ie
ssh bob@server # ssh into server as bob
sudo su "monitor" -
screen # fails: Cannot open your terminal '/dev/pts/0'
我有一个脚本以“监视”用户身份运行。我们在屏幕会话中运行它,以便在屏幕上查看输出。问题是,我们有许多用自己的帐户(即鲍勃,詹姆士,苏西等)登录的用户,然后他们将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
评论
这是您得到的错误吗? “无法打开终端'/ dev / pts / 0'-请检查。”是的,那是一个。我知道为什么会发生这种情况,但是有解决方法吗?
关于您的命令的注释-我一直看到有人在运行sudo su“ user”-。为什么不使用sudo -u user -s?
@Jim:+1用于提供缺少的错误消息。
@Andrew我认识的大多数人都喜欢sudo su-我认为这是人们习惯的(在我的情况下,这是因为您不需要知道sudo su的任何sudo标志-我不认为我曾经读过sudo手册页:)