当有人使用 Winscp 打开会话时,当我运行who
或last
命令时,其会话不会显示在 Linux 中。我以为它会出现是因为它使用ssh连接。但仍然没有任何记录。这可能被证明是一个安全问题。
我的意思是,如果用户登录并删除了某个文件,但没有任何记录。我们要如何追踪它?
答案1
who
并且last
仅显示您是否已登录。当您使用时,从scp
技术上讲您并未登录,因为远程端的 shell 并未如此生成。
要跟踪此类事情,您需要使用流程记帐,一个名为 的包psacct
可以为您提供日志记录级别(如果这就是您所追求的)。如果您需要的话,还可以增强通过 SSH 进行的日志记录,以向您显示其中一些详细信息。
命令who
和last
并非用于此目的。
最后和谁
这个术语总是让人们感到困惑,因为他们将连接与登录联系起来,但它们是两种截然不同的状态。当您访问 Web 服务器时,您会在未登录的情况下消耗远程系统的资源。这本质上就是您在执行scp
.
摘自 Last & Who 手册页
最后的WHOlast, lastb - 显示上次登录用户的列表
who - 显示谁登录
例子
在这里,我使用 SFTP 登录到服务器,但who
并last
没有注意到。
$ ps auxf | less
...
root 3376 0.0 0.0 7212 1040 ? Ss Sep10 0:00 /usr/sbin/sshd
root 29066 0.0 0.0 10108 3004 ? Ss 09:44 0:00 \_ sshd: sam [priv]
sam 29071 0.0 0.0 10240 1836 ? S 09:44 0:00 | \_ sshd: sam@notty
sam 29072 0.1 0.0 6708 1740 ? Ss 09:44 0:00 | \_ /usr/libexec/openssh/sftp-server
root 29202 0.1 0.0 10084 3052 ? Ss 09:44 0:00 \_ sshd: root@pts/0
root 29204 0.6 0.0 6268 3052 pts/0 Ss 09:44 0:00 \_ -bash
root 29255 0.0 0.0 4624 1108 pts/0 R+ 09:45 0:00 \_ ps auxf
root 29256 0.0 0.0 4288 760 pts/0 S+ 09:45 0:00 \_ less
由于我没有作为登录 shell 执行的 shell,因此从技术上讲我没有登录。当我ssh
以 root 身份进入系统时,如上所示,我确实有一个 shell bash
,。
的输出who -a
证实了这一点:
$ who -a
2014-09-10 05:15 398 id=si term=0 exit=0
system boot 2014-09-10 05:15
run-level 5 2014-09-10 05:15 last=S
2014-09-10 05:16 2307 id=l5 term=0 exit=0
LOGIN tty1 2014-09-10 05:16 3785 id=1
LOGIN tty2 2014-09-10 05:16 3786 id=2
LOGIN tty3 2014-09-10 05:16 3787 id=3
LOGIN tty4 2014-09-10 05:16 3788 id=4
LOGIN tty5 2014-09-10 05:16 3792 id=5
2014-09-10 05:16 3794 id=6
2014-09-10 05:16 3799 id=x
root + pts/0 2014-09-25 09:51 . 29300 (mulder.mydom.net)
pts/1 2014-09-24 16:36 20324 id=ts/1 term=0 exit=0
pts/1 2014-09-12 02:40 27603 id=/1 term=0 exit=0
pts/2 2014-09-12 03:21 27820 id=ts/2 term=0 exit=0
请注意,没有引用具有 SFTP 连接的用户 sam。如果您想确定 shell 是否是交互式的,请查看以下 U&L 问答:如何检查 shell 是否登录/交互式/批处理。