我想允许所有用户(或者可能只有其中一些,但所有用户都已经很好了)能够启动/停止特定的 systemd 服务。
我找到了以下解决方案
#include <stdlib.h>
#include <unistd.h>
int main(void)
{
execl("/usr/bin/systemctl", "systemctl", "start", "myService", NULL);
return(EXIT_SUCCESS);
}
gcc allow.c -o allow
chown root:root allow
chmod 4755 allow
这似乎可以解决问题,但我想知道这在安全方面是否可以接受,或者是否还有其他选择(我正在使用 CentOS 7)
更新:这是不好的做法。“sudo”在这里是你最好的朋友,因为该命令具有特定的非变量参数,它可以在 sudoers 文件中允许。
答案1
execl
保留环境变量。用户可以使用环境变量来更改 加载的库systemctl
,这可能会导致 执行任意代码systemctl
。
答案2
由于该命令具有非变量的特定参数,因此它可以适合 sudoers 文件。
所以答案是:man sudo