微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

权限 – 需要(某些)根访问权限的脚本

我有一个关于系统管理脚本的一般性问题,这些脚本要求使用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 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’用户等等)
问题:请帮助我理解这些(以及任何其他提议的或更好的解决方案)的优缺点.此外,如果有一本权威书籍,链接,手册页等,它们解决了脚本如何与底层系统的权限进行交互,您可以将这些权限引用给我,这也很好.

谢谢大家!

解决方法

你有没有为你的任务调查过 capistrano,puppet,ansiblechef这样的事情?

你没有提到你的工作范围是什么,所以我不知道它们对你有什么用处.

我会不惜一切代价避免“suid”.安装sudo没有意义,这似乎是运行具有不同权限/用户ID的命令(‘sudo -u user2 command2’等)的最佳选择.

此外,您可能希望在基于密钥的ssh会话(ssh sshkeyaccessonlyuser @ yourhost’sudo命令’)中运行一些sudo命令,这些命令不含密码.如果您不希望在sudo中使用更长的密码缓存,并且您的脚本无法及时完成运行sudo命令,则可以解决缓存问题.

原文地址:https://www.jb51.cc/ruby/271425.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐