>允许来自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 privilage运行Perl脚本:
a)将脚本的所有者设置为root
b)在文件上设置suid位(chmod u s filename)
c)关闭读取权限,并对除root之外的所有人执行文件执行权限(chmod go = x)
但是其他研究表明你只能为以后的Linux系统设置二进制文件suid(我的脚本实际上会运行在RH4的旧版本上,但我们最终可能会升级,所以我想要向前兼容).我不认为我想为此创建一个二进制文件!
>’将ssh与生成的公钥/私钥一起使用.密钥可以配置为只允许某些命令与它一起执行.
>为任何需要root的脚本命令留下sudo:
系统’sudo rake ts:rebuild'(当然这有缺点就是拥有所有这些密码提示!)
>以root身份执行脚本
但是我想要的命令如何作为普通用户运行?
>以root su用户名执行(对于需要以普通用户身份运行的任务)
‘以root身份运行脚本,以root身份执行一系列任务,su newUser执行一系列任务,如newUser,exit(退出root用户)以root身份执行更多任务. (詹姆斯在下面提出)
我对自己没有更好地掌握这个主题感到惭愧,但是我有点惊讶于我提到的那些没有解决这个问题的Ruby“脚本书”!我想这更像是一个’nix的东西,但似乎做任何实际使用的东西,你可能会碰到这个.
编辑:像MysqL这样的东西我可以在命令中使用选项,比如–password,所以我用它来做到这一点:
puts "Remote Password: " system('stty -echo') password = STDIN.gets.chomp puts "MysqL Password (local): " MysqL_local_password = STDIN.gets.chomp system('stty echo')
然后我可以在脚本中使用这些密码,但它们永远不会被视为明文.但这当然不适用于所有事情.
我应该提到的另一件事是,有些命令需要作为不同的用户运行(除了root和一个普通用户,可能还有’build’用户等等)
问题:请帮助我理解这些(以及任何其他提议的或更好的解决方案)的优缺点.此外,如果有一本权威书籍,链接,手册页等,它们解决了脚本如何与底层系统的权限进行交互,您可以将这些权限引用给我,这也很好.
谢谢大家!
解决方法
你没有提到你的工作范围是什么,所以我不知道它们对你有什么用处.
我会不惜一切代价避免“suid”.安装sudo没有意义,这似乎是运行具有不同权限/用户ID的命令(‘sudo -u user2 command2’等)的最佳选择.
此外,您可能希望在基于密钥的ssh会话(ssh sshkeyaccessonlyuser @ yourhost’sudo命令’)中运行一些sudo命令,这些命令不含密码.如果您不希望在sudo中使用更长的密码缓存,并且您的脚本无法及时完成运行sudo命令,则可以解决缓存问题.