我正在设置一个服务器,其中有多个开发人员正在处理多个应用程序。
我已经弄清楚如何使用 向某些开发人员提供对必要的应用程序目录的共享访问权限,setgid bit
并default ACLs
为组中的任何人提供访问权限。
其中许多应用程序在开发过程中都在终端下运行,以便于访问。当我单独工作时,我为应用程序设置一个用户并以该用户身份运行 screen。这样做的缺点是每个使用的开发人员都screen session
需要知道密码,并且很难将用户和应用程序帐户分开。
一种可行的方法是使用屏幕多用户功能。它们不能开箱即用,但是屏幕抱怨需要suid root
.给予有什么缺点吗?我对使用任何东西都非常小心suid root
。也许有一个原因为什么它不是默认的?
我应该这样做screen
还是有其他一些明智的方式来做我想做的事?
答案1
screen
是的,您可以使用多用户支持来做到这一点。
首先,创建一个新会话:
screen -d -m -S multisession
附加到它:
screen -r multisession
打开多用户支持:
按下Ctrl-a
并键入(注意:Ctrl+a
在每个命令之前都需要,即此处两次)
:multiuser on
:acladd USER ← use username of user you want to give access to your screen
现在,Ctrl-a d
列出会话:
$ screen -ls
There is a screen on:
4791.multisession (Multi, detached)
您现在有一个多用户屏幕会话。将名称指定multisession
给 acl'd 用户,以便他可以附加到该用户:
screen -x youruser/multisession
就是这样。
唯一的缺点是screen
必须以 root 身份运行suid
。但据我所知这是默认的、正常的情况。
另一种选择是做screen -S $screen_id -X multiuser on
,screen -S $screen_id -X acladd authorized_user
希望这可以帮助。
答案2
我已经确定,即使按照@Scyld de Fraud 的答案中的步骤进行操作,评论此问题的其他人也无法执行多用户操作的原因是因为必须启用 SELinux(请参阅https://phoenixnap.com/kb/enable-selinux-centos)。 Screen 需要此功能来实现某些功能,例如分配访问控制列表(通过屏幕acladd
和aclchg
命令)权限来限制或授予对多用户显示器上的各个用户的访问权限,以及重新启动僵尸会话。
答案3
原帖-这个答案到如何在屏幕会话中执行命令:
我花了一些时间,但我发现的是:版本屏幕4.06 有一个错误。如果您想通过共享屏幕会话发送这样的命令,则会失败:
screen -S shared_session_name -X stuff "command \n"
屏幕失败并出现错误:
Cannot opendir /run/screen/S-$USER: Permissions denied
更新到版本后屏幕4.09有用。