前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >解决低权限用户的screen Cannot open your terminal '/dev/pts/1'问题

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

作者头像
保持热爱奔赴山海
发布2019-09-18 15:16:10
8880
发布2019-09-18 15:16:10
举报
文章被收录于专栏:饮水机管理员饮水机管理员

转载自:http://blog.sina.com.cn/s/blog_704836f401010osn.html

解决方法:

代码语言:javascript
复制
# 以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!

参考文档:

Sharing a screen session with another administrator on a Linux system
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-12-14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Sharing a screen session with another administrator on a Linux system
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档