我有一个关于系统管理脚本的一般问题,这些脚本需要以 root 访问权限执行“某些”命令,而其他命令则需要作为普通的非 root 用户(即 myusername 等)执行。我应该提到我在 Linux Red Hat 4 系统上使用 Ruby 1.8.6。到目前为止,我看到的建议是:
- 允许来自 sudoers 的访问:
USERNAME = NOPASSWD: /path/to/script, /etc/init.d/httpd, /path/to/somethingelse
这个语法正确吗?如果是这样,我是否想在脚本中列出我不想提示输入密码的所有特定命令,这是否正确?
- 设置 suid
http://www.wellho.net/mouth/733_Perl-for-Systems-Admin-suid-scripts.html
以 root 权限运行 Perl 脚本:
a) 将脚本的所有者设置为 root
b) 设置(chmod u+s filename) 文件上的 suid 位
c) 关闭对文件的读取权限,并对除 root 之外的所有人打开执行权限 (chmod go=x)
但其他研究表明您只能在二进制文件上设置 suid更高版本的 Linux 系统(我的脚本实际上将在较旧版本的 RH4 上运行,但我们最终可能会升级,因此我希望向前兼容)。我不认为我想为此创建一个二进制文件!
- '将 ssh 与生成的公钥/私钥一起使用。可以将密钥配置为仅允许使用它执行某些命令。
- 对于任何需要 root 的脚本命令,保留 sudo:
system 'sudo rake ts:rebuild'(当然,这有所有这些密码提示的缺点!)
- 以 root 身份执行脚本
但是我想以普通用户身份运行的命令呢?
- 以root身份执行su username(对于需要以普通用户
身份运行的任务)'以root身份运行脚本,以root身份执行一堆任务,su newUser以newUser身份执行一堆任务,退出(退出回到root用户) 以 root 身份执行更多任务。(由詹姆斯在下面提出)
我为没有更好地掌握这个主题而感到羞耻,但我有点惊讶我提到的多少 Ruby“脚本书籍”没有解决这个问题!我想这更像是一件“不务正业”的事情,但似乎要做任何有实质性用途的事情,您很可能会遇到这种情况。
编辑:像 …