解决低权限用户的screen Cannot open your terminal '/dev/pts/1'问题

简介:

解决方法:

1
2
3
4
5
# 以web用户为例
# su - web
# script /dev/null
# screen
这几步后,普通用户即可拥有执行 screen 的权限,当然,下次登录的话,还得先执行script  /dev/null 才能不报错的使用 screen 这个命令。

想了解细节的,请继续往下看。


问题描述:

 

   userA首先登录系统,使用screen开启了一个session,然后detach这个窗口。

   userB然后登录系统,通过su - userA 变成userA,然后使用screen -r 恢复之前detached窗口,这时系统报如下错误:

 

   Cannot open your terminal '/dev/pts/1' - please check.

 

解决方法:

 

   userB在 su - userA以后,执行如下命令即可:

 

   script /dev/null

 

注意: 有人提到 chmod 777 /dev/pts/1,这么干的人真是误人子弟,虽然这么做的确能解决这个问题,但是会带来极大的安全问题!!!

 

为什么这条命令能解决问题?

 

一般人看到上面这里估计就马上回去试验了,但是,等等,你不想知道为什么这个命令会有作用吗?它是怎么起作用的呢?

 

我们来过一遍整个的操作步骤:

 

首先,usera登录到系统中,我们使用tty命令查看一下分配给他的tty,然后看一下这个tty的权限,然后用户执行screen命令。

 

usera@localhost ~ $ ssh usera@remotehost
usera@remotehost ~ $ tty
/dev/pts/1
usera@remotehost ~ $ ls -l /dev/pts/1
crw--w---- 1 usera tty 136, 1 2011-01-09 20:14 /dev/pts/1
usera@remotehost ~ $ screen

 

我们观察上边的输出,发现usera对于/dev/pts/1具有读写权限,它所在组成员对这个tty具有写权限,其他用户不能访问这个tty。

 

然后,userb也登录到系统中,同样我们使用tty命令查看一下分配给他的tty,然后看一下这个tty的权限

userb@localhost ~ $ ssh userb@remotehost
userb@remotehost ~ $ tty
/dev/pts/2
userb@remotehost ~ $ ls -l /dev/pts/2
crw--w---- 1 userb tty 136, 2 2011-01-09 20:20 /dev/pts/2

 

观察输出,userb被分配了/dev/pts/2,也是对于/dev/pts/2具有读写权限,它所在组成员对这个tty具有写权限,其他用户不能访问这个tty。

 

然后userb通过su - usera命令变成usera,同样我们使用tty命令查看一下分配给他的tty,然后看一下这个tty的权限

userb@remotehost ~ $ sudo su - usera
[sudo] password for userb:
usera@remotehost ~ $ tty
/dev/pts/2
usera@remotehost ~ $ ls -l /dev/pts/2
crw--w---- 1 userb tty 136, 2 2011-01-09 20:20 /dev/pts/2

 

AHA!!  注意了,我们看到虽然userb已经变成了usera,但是他所使用的tty并没有改变,仍然是/dev/pts/2。这就是为什么执行screen命令会报错的原因了,因为所有命令此时是使用usera帐户执行的,但是/dev/pts/2的读写权限属于userb,所以所有试图控制/dev/pts/2的访问都被拒绝了!

 

那么我们接下来看一下 script /dev/null做了些什么,使得screen命令能执行呢?

 

usera@remotehost ~ $ script /dev/null
Script started, file is /dev/null
usera@remotehost ~ $ tty
/dev/pts/3
usera@remotehost ~ $ ls -l /dev/pts/3
crw--w---- 1 usera tty 136, 3 2011-01-09 20:36 /dev/pts/3

 

AHA!!! 看到了吗?我们实际上是得到了一个新的tty ---> /dev/pts/3,因此screen命令能够执行了,因为 /dev/pts/3这个tty的所有者是usera!










本文转自 lirulei90 51CTO博客,原文链接:http://blog.51cto.com/lee90/1882859,如需转载请自行联系原作者
目录
相关文章
|
5月前
|
Ubuntu Unix Linux
Linux 用户使用sudo时 显示xxx is not in the sudoers file.This incident will be reported.的解决方法
Linux 用户使用sudo时 显示xxx is not in the sudoers file.This incident will be reported.的解决方法
117 1
执行脚本出现 standard in must be a tty
出现该提示是因为你执行的脚本的时候并不是在没有对应用户的环境变量,应该在脚本中加入su - username,来加载环境变量。
419 0
|
Linux
Error mounting /dev/sr0 at /media/ VBox【虚拟机增强功能问题||已解决】
Error mounting /dev/sr0 at /media/ VBox【虚拟机增强功能问题||已解决】
142 0
|
Linux
9.10 Linux mask有效权限有什么用,如何修改?
前面,我们已经学习如何使用 setfacl 和 getfacl 为用户或群组添加针对某目录或文件的 ACL 权限。例如:
223 0
9.10 Linux mask有效权限有什么用,如何修改?
|
Linux 网络安全
解决Linux下ssh登录后出现 报错 Write failed: Broken pipe 的方法
解决Linux下ssh登录后出现 报错 Write failed: Broken pipe 的方法解决也很简单,在执行 ssh 命令的时候,多加一个参数即可,如下: ssh -p 2200 -o ServerAliveInterval=60 root@8.
2000 0
|
Linux 开发工具
linux下vi编辑某文件时,操作出现 错误提示: E325: ATTENTION 2, Found a swap file by the name ".p1.c.swp"
当我在linux下用vi打开p1.c文件时 root@iZ2zeeailqvwws5dcuivdbZ:~/1/01/指针# vi p1.c 会出现如下信息: 1 E325: ATTENTION 2 Found a swap file by the name ".
1743 0