转载自:http://blog.sina.com.cn/s/blog_704836f401010osn.html html
解决方法:web
# 以web用户为例 # su - web # script /dev/null # screen 这几步后,普通用户便可拥有执行screen的权限,固然,下次登陆的话,还得先执行script /dev/null才能不报错的使用screen这个命令。
想了解细节的,请继续往下看。安全
问题描述:bash
userA首先登陆系统,使用screen开启了一个session,而后detach这个窗口。session
userB而后登陆系统,经过su - userA 变成userA,而后使用screen -r 恢复以前detached窗口,这时系统报以下错误:ssh
Cannot open your terminal '/dev/pts/1' - please check.ide
解决方法:spa
userB在 su - userA之后,执行以下命令便可:.net
script /dev/nullorm
注意: 有人提到 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!
参考文档: