2015-03-02 21 views
1

我想知道在tty上检测连接的可能性有多大。我的目标是创建一个提醒,以防有人试图通过控制台观看我正在做的事情如何在未登录控制台的情况下检测连接(TTY0)

首先,我通过约who,它允许查看某人是否连接并了解了哪些tty,但让我们说这个用户不是“ t登录,是否还有一种检测tty是否被打开的方法?也许用/ dev/tty?或者有可能知道有多少文件描述符指向文件/ dev/console以及哪些进程正在使用hardware/io?或者也许使用vcs进行硬件检测?我其实不知道如何使用/测试这些。

回答

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 

UPDATE

如果你不想在上面描述的方式来观看(即通过开放描述符),你可以做下一步。

比方说,您正在使用/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一些外壳,良好的管理员仍然可以抓住你,期待/var/log/auth.log。但我相信这种技术可以防止您被wlsof命令捕获。

+0

我没有登录的意思是,当你启动Ubuntu服务器时,在日志记录屏幕上,你可以按alt +左​​键查看控制台的日志,这对应于tty0,我想检测有人在看这个。让我试试你的解决方案。 – user3779430 2015-03-04 08:39:58

+0

恐怕你的解决方案不工作,W只显示登录的人,并且lsof不打印任何东西(我在/ dev/console,tty0,vcs上试过了) - – user3779430 2015-03-04 09:41:48

+0

啊,我完全误解了你的问题。所以,你是与TTY合作的人(哇,它押韵:)),你不希望其他人看到这个。我的答案说明如何看到你正在与TTY合作,但没有说出如何判断你是否正在观看**的任何内容:) – 2015-03-04 13:59:51

相关问题