我想知道有什么可用于检测tty上的连接。我的目标是创建一个警报,以防有人试图通过控制台观察我正在做的事情
首先我虽然关于who
,它允许看到有人连接和什么tty,但是假设这个用户没有登录,是否还有一种检测tty被打开的方法?也许用/ dev / tty?或者是否可以知道有多少文件描述符指向文件/ dev / console以及哪些进程正在使用hardware / io?或者也许使用vcs进行硬件检测?我实际上不知道如何使用/测试它们。
答案 0 :(得分:0)
让我们说这个用户没有登录
每个进程都属于某个用户。运行某些代码而不是登录的唯一方法是在内核中编写此代码。
我想知道在tty
上检测连接的可能性有多大
试试这个:
$ lsof /dev/tty0
lsof
是一个用于观察打开文件的工具。
例如,我的开发板的串行控制台是/dev/ttyUSB0
。所以我打开了minicom
会话,并为我的TTY文件制作了cat
:
$ minicom -D /dev/ttyUSB0
$ cat /dev/ttyUSB0
并检查了这个:
$ lsof /dev/ttyUSB0
给了我:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
minicom 13299 joe 3u CHR 188,0 0t0 135832 /dev/ttyUSB0
cat 13310 joe 3r CHR 188,0 0t0 135832 /dev/ttyUSB0
从这个输出中你可以看出,谁(USER
)连接到你的TTY,以及他使用的是哪个程序(COMMAND
,PID
)。
关闭minicom
会话和cat
后,lsof
不会打印任何内容。
也可以使用w
命令完成:
$ w | grep ttyUSB0
输出:
joe pts/2 :0 17:57 2:47 0.12s 0.00s minicom -D /dev/ttyUSB0
joe pts/3 :0 17:58 2:39 0.08s 0.00s cat /dev/ttyUSB0
<强>更新强>
如果您不希望以上述方式(即通过开放描述符)进行观看,您可以进行下一步。
我们假设你正在使用/dev/ttyUSB0
。要通过此文件连接到您的控制台,您必须先打开它(无论哪种方式,例如使用cat
或minicom
等)。一旦打开它,其他用户(例如root用户)就可以看到您的会话,只是查看该文件是否有打开的文件描述符(lsof /dev/ttyUSB0
)。
现在,TTY设备只是角色设备,您可以为这些设备创建自己的文件(节点)。让我们仔细查看/dev/ttyUSB0
文件:
$ ls -l /dev/ttyUSB0
输出:
crw-rw---- 1 root dialout 188, 0 Mar 4 16:07 /dev/ttyUSB0
此处c
表示这是字符设备,我们可以看到它的主号码188
和次要号码0
。让我们为这个设备创建自己的节点(文件)。
$ cd /tmp
$ sudo mknod some_tricky_name c 188 0
$ sudo chown root:dialout some_tricky_name
$ sudo chmod 644 some_trickyname
现在您可以连接到此文件而不是/dev/ttyUSB0
,而且没有人会看到您:
$ minicom -D /tmp/some_tricky_name
但是,如果你要在这个TTY中运行一些shell,那么好的管理员仍然可以抓住你,期待/var/log/auth.log
。但我相信这种技术可以防止你被w
或lsof
命令捕获。