zoukankan      html  css  js  c++  java
  • 解决screen Cannot open your terminal '/dev/pts/1'问题

    转载于:http://urchin.blog.51cto.com/4356076/1153322

    问题描述:

       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

  • 相关阅读:
    _CrtSetBreakAlloc(…)来检测内存泄漏+VC使用CRT调试功能检测内存泄漏(转)
    VC 2005 解决方案的目录结构设置和管理
    ArcGIS Engine基础开发教程(转)
    vc++实现avi文件的操作 用于视频解析及录制(转)
    微软免费杀毒软件下周二公测 年底推简体中文版 狼人:
    大量用户升级iPhone3.0系统导致苹果服务器故障 狼人:
    苹果发布45个iPhone和iTouch漏洞补丁 狼人:
    “汉网热血三国”“南方电视台”等网站被挂马 狼人:
    WAPI有望晋身国际标准 最大阻力美国首度支持 狼人:
    前Google员工推云安全服务检测网站挂马 狼人:
  • 原文地址:https://www.cnblogs.com/chris-cp/p/4287690.html
Copyright © 2011-2022 走看看