如何在不要求密码的情况下切换组?

Mik*_*kov 3 users group

在 linux 中,有两个文件指定了组定义。其中一个是/etc/group,另一个是/etc/gshadow。我希望我的普通用户能够在启动进程时切换组,而无需输入任何密码。重要的是用户不应该是该组的成员。

我通过以下方式设置这两个文件设法做到了这一点:

# cat /etc/group | grep audio
audio:x:29:pulse

# cat /etc/gshadow | grep audio
audio:*::pulse,morfik
Run Code Online (Sandbox Code Playgroud)

现在用户morfik可以运行,例如,这个命令:

$ /usr/bin/sg audio -c "pulseaudio -D" 

$ ps -eo user,group,args | grep pulse
morfik   audio    pulseaudio -D
morfik   audio    /usr/lib/pulseaudio/pulse/gconf-helper
Run Code Online (Sandbox Code Playgroud)

但是有一个问题grpck,它给出了以下输出:

# grpck
'morfik' is a member of the 'audio' group in /etc/gshadow but not in /etc/group
Run Code Online (Sandbox Code Playgroud)

如果我audio/etc/gshadow文件中从组中删除用户,然后尝试启动该过程,我会收到以下错误:

sg[2378]: Failed to crypt password with previous salt of group 'audio'
Run Code Online (Sandbox Code Playgroud)

所以问题真的是:我应该担心grpck的消息吗?也许有没有办法解决这个sg错误,这样每个人都会开心?

Gil*_*il' 6

sg允许在/etc/group不提供任何身份验证的情况下将主要组切换到不同的补充组(即用户在 中列出的组),或者/etc/group通过输入/etc/group或 中列出的密码将主要组切换到 中提到的组/etc/gshadow。因此,使用sg“不输入任何密码”和“不应成为该组的成员”是矛盾的。

如果用户可以自由切换到该组,那么不让他们成为该组的成员就没有多大意义。唯一真正的优势是在他们访问组时登录。

您尝试的配置(用户在 中列出gshadow但不在 中group)不是受支持的配置。它提供了接近您想要的东西的事实对我来说实际上感觉像是一个错误 -gshadow不应该授予未在group. 该手册指出“您应该使用与 中相同的用户列表/etc/group”。如果您违反了此建议,请不要指望明智或可移植的行为。

如果要允许用户以组的形式运行特定命令,并带有日志记录,则可以使用 sudo。运行visudoNOPASSWD可能与该用户相关的任何非类似之后添加这样的行:

morfik ALL = (morfik:audio) NOPASSWD: pulseaudio
Run Code Online (Sandbox Code Playgroud)