有没有办法以只读模式运行“屏幕”?

有没有办法以只读模式运行“屏幕”?

我希望能够screen以只读方式检查现有会话的进度和输出,以防止由于用户错误而出现问题。有没有办法做到这一点?

答案1

不幸的是,我认为答案是否定的。提问者为这个问题切换到多路复用器特别是因为它具有该功能(连接时传递标志-r),所以如果您可以选择切换多路复用器,那么它可能是您的最佳选择

答案2

你可以试试:

aclchg username -w "#"

如果您screen在多用户模式下运行(但在作为单个附加用户进行测试时,我不需要做任何特殊的事情来使其工作)。如果您确实需要进入多用户模式,请使用multiuser on.

您可以使用*该用户名来影响所有用户。

使用+w而不是-w启用写入模式。

man screen:

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)

相关内容