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

Linux 如何在不登录控制台的情况下检测连接(TTY0),linux,serial-port,detection,Linux,Serial Port,Detection,我想知道有什么可能性可以检测tty上的连接。我的目标是创建一个警报,以防有人试图通过控制台观看我正在做的事情 首先,我想知道是谁,它允许查看某人是否已连接以及在什么tty上,但假设该用户未登录,是否还有方法检测tty是否已打开?可能使用/dev/tty?或者可以知道有多少文件描述符指向文件/dev/console,以及哪些进程正在使用硬件/io吗?或者可能对vcs使用硬件检测?我实际上不知道如何使用/测试这些 假设该用户未登录 每个进程都属于某个用户。运行某些代码而不登录的唯一方法是在内核中编写

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

首先,我想知道是谁,它允许查看某人是否已连接以及在什么tty上,但假设该用户未登录,是否还有方法检测tty是否已打开?可能使用/dev/tty?或者可以知道有多少文件描述符指向文件/dev/console,以及哪些进程正在使用硬件/io吗?或者可能对vcs使用硬件检测?我实际上不知道如何使用/测试这些

假设该用户未登录

每个进程都属于某个用户。运行某些代码而不登录的唯一方法是在内核中编写此代码

我想知道有什么可能性可以检测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
从这个输出中,您可以知道,谁是连接到您的TTY的用户,以及他使用命令PID的是哪个程序

关闭minicom会话和cat后,lsof不会打印任何内容

也可以使用w命令完成:

输出:

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
crw-rw---- 1 root dialout 188, 0 Mar  4 16:07 /dev/ttyUSB0
更新

如果您不想以上述方式(即通过open descriptor)被监视,您可以执行下一步操作

假设您正在使用/dev/ttyUSB0。要通过此文件连接到您的控制台,无论以何种方式(例如使用cat或minicom等),您都必须首先打开它。。打开会话后,其他用户(例如root用户)可以看到会话,只要查看该文件lsof/dev/ttyUSB0是否有打开的文件描述符即可

现在,TTY设备只是角色设备,您可以为这些设备创建自己的文件节点。让我们仔细看看/dev/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
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命令。

我所说的不登录是指,当你启动ubuntu服务器时,在登录屏幕上,你可以按alt+left查看控制台的日志,这对应于tty0,我想检测到有人在观看。让我试试你的解决方案。恐怕你的解决方案不起作用,只显示登录的用户,并且lsof不会打印我在/dev/console、tty0、vcs上尝试过的任何内容啊,我完全误解了你的问题。所以,你是和TTY wow合作的人,它押韵:,你不想让其他人看到这个。我的回答是如何看到你与TTY合作,但没有说明如何判断你是否被监视:完全正确!是的,我就是那种人:,我想知道这是否可能,但我不确定我是否完全理解ttys,它与/dev和/sys/class有什么区别,为什么还有ttys、ttys和vcs/vcsa。所有这些问题的共同点是中心节点在哪里?我已经在我的答案中添加了更新,请查看是否有帮助。至于TTY:在/dev中,您有用于TTY设备的设备文件节点。您可以通过读取/proc/devices文件,查看Character devices:section来了解您的设备。从那里你可以找出你的设备的主要号码。知道了这一点,您可以使用mknod命令轻松地创建自己的节点,就像在/dev中一样。您还可以通过读取/sys/class/tty/ttyUSB0目录中的dev和uevent文件来获取此信息。这些文件只是提供有关设备信息的内核接口。