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

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

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

我通过以下方式设置这两个文件成功实现了这一点:

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

# cat /etc/gshadow | grep audio
audio:*::pulse,morfik

现在用户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

但是 存在一个问题grpck,它给出以下输出:

# grpck
'morfik' is a member of the 'audio' group in /etc/gshadow but not in /etc/group

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

sg[2378]: Failed to crypt password with previous salt of group 'audio'

所以问题确实是:我应该担心 的grpck消息吗?也许有一种方法可以修复sg的错误,以便每个人都高兴?

答案1

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

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

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

如果您希望允许用户作为一个组运行特定命令并进行日志记录,您可以使用 sudo。运行visudo并添加这样的行NOPASSWD在任何可能引起该用户关注的非类似情况之后:

morfik ALL = (morfik:audio) NOPASSWD: pulseaudio

相关内容