我希望能够screen
以只读方式检查现有会话的进度和输出,以防止由于用户错误而出现问题。有没有办法做到这一点?
答案1
答案2
你可以试试:
aclchg username -w "#"
如果您screen
在多用户模式下运行(但在作为单个附加用户进行测试时,我不需要做任何特殊的事情来使其工作)。如果您确实需要进入多用户模式,请使用multiuser on
.
您可以使用*
该用户名来影响所有用户。
使用+w
而不是-w
启用写入模式。
aclchg 用户名权限列表
chacl 用户名权限列表更改以逗号分隔的用户列表的权限。权限位表示为“r”、“w”和“x”。前缀“+”授予权限,“-”删除权限。第三个参数是逗号分隔的命令和/或窗口列表(通过数字或标题指定)。特殊列表“#”指的是所有窗口,“?”到所有命令。如果用户名由单个“*”组成,则所有已知用户都会受到影响。当用户有“x”位时,可以执行命令。当用户设置了“w”位并且没有其他用户获得该窗口的写锁时,用户可以向窗口键入输入。其他位当前被忽略。要在窗口 2 中撤回另一个用户的写锁:“aclchg username -w+w 2”。要允许对会话进行只读访问:'aclchg username -w "#"'。一旦知道屏幕上的用户名,他就可以附加到会话,并且(默认情况下)拥有所有命令和窗口的完全权限。 acl 命令、“at”和其他命令的执行权限也应该被删除,否则用户可能能够重新获得写入权限。特殊用户名nobody 的权限无法更改(请参阅“su”命令)。 “Chacl”是“aclchg”的同义词。仅限多用户模式。
答案3
我找到了一种相当简单的解决方法,可以安全地监视输出。
进入screen会话后立即运行以下命令:
echo /tmp/$STY
touch /tmp/$STY
chmod 0600 /tmp/$STY
script -a -f /tmp/$STY
使用脚本输出分离会话Ctrl-A d并遵循脚本输出,例如:
tail -f /tmp/10751.test
答案4
我刚刚测试了“已暂停,直至另行通知”提供的答案。它有效,但可能需要上下文。以下是我在 Debian 10 上遵循的步骤:
# chmod 4755 /usr/bin/screen # screen requires setuid for multiuser mode
# chmod 0755 /run/screen # screen requires this if setuid
$ screen -dR oneway # run as normaluser
^A:multiuser on # enable multiuser mode
^A:acladd readonlyuser # allow access by readonlyuser
^A:aclchg readonlyuser -w '#' # drop write access for readonlyuser
$
$ screen -x normaluser/oneway # run as readonlyuser
$ [enter] # try to enter text - should fail
write: permission denied (user readonlyuser)