![我应该在启动脚本中使用“sudo”还是“su”?](https://linux22.com/image/28997/%E6%88%91%E5%BA%94%E8%AF%A5%E5%9C%A8%E5%90%AF%E5%8A%A8%E8%84%9A%E6%9C%AC%E4%B8%AD%E4%BD%BF%E7%94%A8%E2%80%9Csudo%E2%80%9D%E8%BF%98%E6%98%AF%E2%80%9Csu%E2%80%9D%EF%BC%9F.png)
我有一个个人程序,具有服务器/客户端设计。
它的服务器守护进程部分应该作为其自己的受限用户运行,并且该程序的设计目的不是像某些 Linux 程序那样放弃其 root 权限(如果以 root 身份启动)。
所以我的问题是,在它的启动脚本中/etc/init.d/
,我应该使用sudo
或su
以另一个用户身份运行这个守护进程吗?这有什么不同吗?两者中的任何一个都可以工作吗?还有别的事吗?
该操作系统是一种定制的 GNU/Linux 操作系统,使用“Linux From Scratch”指令构建,并且两个程序都可以正确运行。
答案1
在这两者中,我将用于su
此目的,因为它的可配置性较低,因此更可预测。如果您sudo
在 init 脚本中使用,然后(无意或故意)删除root ALL=(ALL) ALL
中的条目/etc/sudoers
,您的 init 脚本将神秘地中断。
此外,我将使用以下形式来进一步减少配置占用空间:
su -s /bin/sh -c "my_program my_args etc" my_user
该-s
选项意味着您可以将用户的默认 shell 更改为 /bin/false 或 /sbin/nologin 或其他内容,而不会破坏脚本。/dev/null
如果您的程序本身尚未处理该问题,您可能还希望将标准 I/O 重定向到或其他合适的位置。
答案2
答案3
如果您可以轻松地更改程序以使其放弃其特权,那么这是最好的方法。在启动脚本中切换用户 ID 很麻烦而且相当不灵活,即使它确实“有效”。
答案4
从技术上讲,两者都应该可以正常工作,但是您可能希望在这里遵循约定。 sudo 通常用于提升到 root 权限以运行单个命令,而 su 通常用于更改为新用户,然后以该新用户身份运行命令:
也就是说,如果您快速进行 Google 搜索,就会发现关于 sudo 与 su 的一些看法: