在 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/gshadow
sg
如果用户可以自由切换到该组,那么不让他们成为该组的成员就没有多大意义。唯一真正的优势是在他们访问该组时进行记录。
您尝试的配置(用户在 中列出gshadow
但未在 中列出group
)不是受支持的配置。事实上,它提供了接近你想要的东西,这对我来说实际上感觉像是一个错误 -gshadow
不应该授予未在 中列出的组成员资格group
。这手动的声明“您应该使用与”中相同的用户列表/etc/group
。如果您违反了此建议,请不要指望明智或可移植的行为。
如果您希望允许用户作为一个组运行特定命令并进行日志记录,您可以使用 sudo。运行visudo
并添加这样的行NOPASSWD
在任何可能引起该用户关注的非类似情况之后:
morfik ALL = (morfik:audio) NOPASSWD: pulseaudio