今天发现,以我喜欢的其他用户身份运行的屏幕无法正常工作!

ie

ssh bob@server         # ssh into server as bob
sudo su "monitor" -
screen                 # fails: Cannot open your terminal '/dev/pts/0'


我有一个脚本以“监视”用户身份运行。我们在屏幕会话中运行它,以便在屏幕上查看输出。问题是,我们有许多用自己的帐户(即鲍勃,詹姆士,苏西等)登录的用户,然后他们将sudo变成“监视”用户。将他们授予“监视”用户访问权限是不可能的。

评论

这是您得到的错误吗? “无法打开终端'/ dev / pts / 0'-请检查。”

是的,那是一个。我知道为什么会发生这种情况,但是有解决方法吗?

关于您的命令的注释-我一直看到有人在运行sudo su“ user”-。为什么不使用sudo -u user -s?

@Jim:+1用于提供缺少的错误消息。

@Andrew我认识的大多数人都喜欢sudo su-我认为这是人们习惯的(在我的情况下,这是因为您不需要知道sudo su的任何sudo标志-我不认为我曾经读过sudo手册页:)

#1 楼

在启动屏幕之前,尝试以script /dev/null的用户身份运行su-这是一个贫民窟的小技巧,但它应该会使屏幕开心。

评论


回复:安全隐患,我不知道(但这并不意味着不存在任何隐患:)-IIRC依赖于“脚本”打开新终端设备的副作用(因为用户正在调用它) ,并且由于您要将脚本的输出发送到/ dev / null,因此没有任何要捕获的内容。绝对比将用户添加到tty组(IMHO)更安全

–voretaq7
2010-2-25在19:20

@nalply坦率地说,如果您是Unix系统管理员,您不会发现多个shell令人困惑-也就是说,脚本可用于启动屏幕。然后,您只需退出两次(一次进入屏幕,一次进入su)。 (这是脚本手册页可以为您阐明的内容,如果您花时间阅读的话...)

–voretaq7
13-10-8在15:40

或者只是运行sudo -u bob脚本-q -c'screen -dr myscreen'/ dev / null。这样,您只有一个终端可以退出/分离。

–安迪·舒尔曼(Andy Shulman)
13年11月27日在4:48

谢谢,这救了我。但是,为什么要解决此问题?据我了解,它可以打印从stdout到...的所有内容。并以某种方式修复屏幕。

– sudo
16 Jan 15'20:33



@sudo为了执行其操作,脚本打开了自己的tty设备,该设备由运行它的用户所有(在/ dev中查看,您将在运行脚本后看到它)。屏幕然后抓取该tty设备(该用户设备由运行中的屏幕拥有,因此它可以轻松访问它)。这是一个完全的骇客工作,但确实可行。查看我的某些机器,似乎新版本的屏幕似乎安装了setuid-root,它也可以工作,但是意味着您还有另一个setuid-root二进制文件在周围浮动,这使某些人感到不舒服。

–voretaq7
16 Jan 20'23:01



#2 楼

我正在对screen的用户使用围绕sudo su的包装函数。这是我添加到用户~/.bashrc的包装函数:

function screen() {
  /usr/bin/script -q -c "/usr/bin/screen ${*}" /dev/null
}


这使我可以使用screen的所有选项和参数可能要使用。我正在考虑将此功能放在系统范围内。

评论


完美运作。对于那些希望在整个系统范围内使用的用户,我建议将其添加到/etc/bash.bashrc-适用于所有用户。

–́Someguy123
2015年1月2日,8:19

这将不会引用参数以正确筛选,否则是一个很好的解决方案。

–augustar
16年11月9日在18:13

#3 楼

假设他们仍然通过SSH进入主机,则可以在〜monitor / .ssh / authorized_keys文件中为需要访问监视帐户的每个用户添加公共ssh密钥。然后,他们可以在每个用户的远程计算机上运行


ssh -t monitor@remote.machine屏幕-RD


评论


这是另一种很好的方法-尽管您必须在授权密钥文件中指定强制命令(按照上述的“幸运的运气”,“使他们无法访问'监视'用户”)注释–强制命令可能会将其限制为仅附加屏幕会话)

–voretaq7
2010-2-25在16:59

我不确定如何在我的答案中解决该问题,因为他说过“让他们访问...是不可能的”,但他也说“ ...他们对'监视'用户感到很恼火”。但是我同意,在authorized_keys中强制执行命令限制应该可以解决这一问题。

– Alex
2010-2-25在20:14

#4 楼

假设我们正在谈论此错误:

$ sudo su - bob
$ screen
Cannot open your terminal '/dev/pts/5' - please check.


这里是单线(例如,可以用作“别名图案”):

sudo su - bob -c "script -c bash /dev/null"'


说明:

这将以用户bob的身份启动外壳程序(如登录外壳程序)。用户bob启动script,该命令被告知调用bash(可以是破折号或ksh ...),并且会丢弃该会话的副本。

#5 楼

可能必须更改有关设备的权限,或者将监视器添加到具有读取该设备权限的组中,这是我的初衷。但是您必须权衡这样做的安全隐患。

#6 楼

您说自己做到了:

sudo su "monitor" -


我想知道后面的破折号。我通常这样做:

sudo su - username


破折号(根据su手册页)告诉su“使shell成为登录shell”。这意味着它将获取所有常用的shell启动脚本并正确设置诸如PATH和HOME之类的内容。

评论


不。 sudo su-用户名和sudo su用户名-做同样的事情。

–蒂姆·卢德温斯基(Tim Ludwinski)
2014年11月10日20:59

#7 楼

我只是将读/写权限授予“其他”:

sudo chmod o+rw /dev/pts/0


,然后再次尝试screen

#8 楼

我刚遇到这个问题。在运行sudo之前用chmod +rw $(tty)解决了它。
此解决方案的问题在于,任何人都可以在那之后连接并监听您的终端。

评论


听起来是个不错的解决方案。

–埃文·卡洛尔(Evan Carroll)
2012年1月20日16:19

@EvanCarroll这是一个很好的解决方案,除了它可以使整个世界对其终端进行读写访问的部分。只是一个很小的安全性问题-没有程序会关心它,除了在接受密码之前会检查终端安全性的任何东西(例如gpg)。当然,他永远不会与会监视tty和sniff密码的恶意用户一起使用系统...

–voretaq7
13-10-8在15:35

警告:切勿在家尝试!这很危险!!!

–ruizpauker
18年8月30日在10:12