实时监控Linux、FreeBSD登陆用户的操作,相当的方便


在 Linux 中,我们可以使用下面这台命令来得到另一个终端的用户的输入输出是什么:

strace -e read,write -s16384 -x -p "用户 pst 的pid"

但 strace 的输出,基本不可读,我刚好发现在 CPAN 上有相应的模块来来帮大家解析,可以通过那个软件直接见到用户的输入输出的内容,可以实时见到他的操作。相当的方便。

cpanm ttylog 

这个的使用也很方便,直接使用 w 看看新进入的用户使用的是哪个 tty 。然后使用这个软件指定见到的那个 tty 就行。

例如新用户进来后是 pst/4.

ttylog pts/4

这样,就可以实时见到用户的操作了。也可以给这个程序的输出记录到日志中,以后好找别人算账是吧。。。因为他的每一个操作你都能见到。

FreeBSD下的watch命令可以也可实现同样的目的:

FreeBSD的watch命令与Linux下的watch命令完全不一样。FreeBSD下的watch命令是查看其它用户的正在运行的操作,而linux下的watch是自动定时运行一个(一行)命令。

下面是FreeBSD下的watch命令的介绍:

watch — snoop on another tty line

watch允许你偷看其它terminal正在做什么,该命令只能让超级用户使用。

为什么要用watch?

有时候,基于安全的目的,你可以用watch看某个用户在干什么。也许你发现你的机器被某人黑了,你想看看他正在你的机器干什么。我不清楚,或者你只是好管闲事。

运行watch需要什么?

watch需要打开下面的kernel options:

pseudo-device snp 3

这会允许你拥有4个 snoop devices。

建立4个devices:

# cd /dev
./MAKEDEV snp0
./MAKEDEV snp1
./MAKEDEV snp2
./MAKEDEV snp3

错误:如果看到下面这个错误,那你必须按照上面所说的方法去做:

watch: fatal: cannot open snoop device

运行watch:

# who
dan ttyp0 Nov 27 17:35 (wocker.int)
dan ttyp1 Nov 28 12:36 (wocker.int)
# watch ttyp1

或者,如果你想要能写入其它的terminal,可以尝试-W参数:

# watch -W ttyp1

其它操作:

切换终端: Ctrl+x
退出watch:Ctrl+g

资料来源:http://www.freebsddiary.org/watch.php

ttysnoop(s)

ttysnoop是一个重定向对一个终端号的所有输入/输出到另一个终端的程序。目前我所知道的它的所在网站为http://uscan.cjb.net,但是始终连不上去,从其它途径我得到了ttysnoop-0.12c-5 ,地址是http://rpmfind.net/linux/rpm/contrib/libc6/i386/ttysnoop-0.12c-5.i386.html

这个版本好象还不能支持shadow password,安装后你需要手动创建目录/var/spool/ttysnoop测试这个程序是有趣的,下面是相关指令:首先改/etc/inetd.conf中的in.telnetd默认调用login登录程序为/sbin/ttysnoops,象下面这样:

# more inetd.conf │ grep in.telnetd
telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd -L /sbin/ttysnoops

更改后一定要运行killall -HUP inetd使之生效,确保不要使用阴影口令,用#pwunconv禁止阴影口令。

再编辑文件/etc/snooptab,默认配置就可以了。

# more snooptab
ttyS1 /dev/tty7 login /bin/login
ttyS2 /dev/tty8 login /bin/login
* socket login /bin/login

最后,如果在某个终端上有人登录进来(你可以用w命令查看它在哪个终端),如登录终端设备为ttyp0,则你可以登录进服务器打入#/bin/ttysnoop ttyp0(提示输入root口令,再次,上面提到的这个版本不支持阴影口令)以监视用户的登录窗口。没有用过,我想写还是有一定管理作用的。

相关内容