“users”是否保证指示主机上的所有用户?

“users”是否保证指示主机上的所有用户?

我有一个关于 Linux 主机的非常基本的问题:

users命令是否保证指示主机上的所有用户,或者用户是否有办法隐藏他们当时在主机上处于活动状态的事实?

如果是后者,有谁知道用户可以使用哪些技术来隐藏用户命令输出结果中的用户?

其他人可以就这个问题提供的任何想法都会非常有帮助。

答案1

在系统上“能够执行系统命令并有权访问系统文件”而不出现在读取的/var/run/utmp文件中是微不足道的users(1)

$ ssh testhost sh

例如,users在 Centos 7 上没有任何迹象testhost表明有人正在运行,sh而它非常有能力执行系统命令和访问系统文件:

# users
root
# pstree | grep -3 'sh$'
        |-sshd-+-sshd---sshd
        |      |-sshd---bash-+-grep
        |      |             `-pstree
        |      `-sshd---sshd---sh
        |-sssd-+-sssd_be
        |      `-sssd_nss
        |-systemd-journal

另一种方法:在某个高端口上运行 shellsocat或其他东西。另一种方法:运行一个接受命令、运行命令并返回结果的网络服务器。另一种方法:提前安排命令,at(1)然后注销。

答案2

users实用程序是用 C 编写的非常小的程序 - 仅大约 150 行代码。既然它是一部分GNU 核心实用程序, 你可以下载users.c实用程序并从文件中读取代码。

事实上,默认情况下,该users实用程序只是utmp和 的包装器wtmp。有两种明显的基本方法可以隐藏用户已登录的事实。

第一种方法是更改users​​实用程序的代码并替换二进制文件/usr/bin/users

第二种方法是擦除*nix 系统上可能存在的utmpwtmplastlogutmpx等日志文件中的痕迹。wtmpx有一些日志擦除工具可用于这种方法,例如、cloak等。zapclear仔细阅读3.4部分摘自《黑客入侵 UNIX》中的《闯入之后》。

当然,还有许多其他方法可以避免写入特定应用程序和用户的文件utmpwtmp阅读这个例子为了ssh

login可以在文件中配置一些附加的基本和常见日志记录选项:

/etc/login.defs

要从管理员和用户的角度更深入地了解users实用程序解析其信息的位置,只需浏览以下文件:

utmpdump /var/run/utmp
utmpdump /var/log/wtmp
sudo utmpdump /var/log/btmp

另外请注意中的注释UTMP(5)WTMP(5)男人:

与其他各种系统(可以通过删除文件来禁用 utmp 日志记录)不同,utmp 必须始终存在于 Linux 上。如果您想禁用 who(1),则不要使 utmp 世界可读。

文件格式与机器相关,因此建议仅在创建它的机器架构上进行处理。

因此,问题的答案是:“是否可以向users实用程序隐藏用户已登录的事实?” - 是的,这是可能的。确定的方法取决于确定的情况 - 它取决于对 *nix 系统等的访问级别。

答案3

基本上,是的。这包括物理登录和从远程主机登录的用户。

man users

根据FILE输出当前登录的是谁。如果未指定 FILE,则使用 /var/run/utmp

乌特姆普数据库包含char ut_host[UT_HOSTSIZE];远程主机登录信息。

但是,如果用户没有登录 shell,它可能不会显示在users输出中,显然是这样的情况这个问题

相关内容