如何在不登录控制台的情况下检测连接(TTY0)

时间:2015-03-02 14:51:04

标签: linux serial-port detection

我想知道有什么可用于检测tty上的连接。我的目标是创建一个警报,以防有人试图通过控制台观察我正在做的事情

首先我虽然关于who,它允许看到有人连接和什么tty,但是假设这个用户没有登录,是否还有一种检测tty被打开的方法?也许用/ dev / tty?或者是否可以知道有多少文件描述符指向文件/ dev / console以及哪些进程正在使用hardware / io?或者也许使用vcs进行硬件检测?我实际上不知道如何使用/测试它们。

1 个答案:

答案 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,以及他使用的是哪个程序(COMMANDPID)。

关闭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。要通过此文件连接到您的控制台,您必须先打开它(无论哪种方式,例如使用catminicom等)。一旦打开它,其他用户(例如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。但我相信这种技术可以防止你被wlsof命令捕获。

相关问题