标题:sudo玩弄小记 出处:Felix021 时间:Sat, 22 Apr 2017 14:25:32 +0000 作者:felix021 地址:https://www.felix021.com/blog/read.php?2171 内容: 在我司的运维实践中,sudo承担了一个很边缘,但是却很有意思的任务 最简单应用是,在web服务器上,在配置完nginx和php的log以后需要重启service,就这么玩(修改/etc/sudoers): 引用 nginx ALL= NOPASSWD: /sbin/service nginx *, /sbin/service php5-fpm reload 如此一来,nginx用户可以执行 sudo service nginx reload 或者 sudo nginx configtest,也可以执行 sudo php5-fpm reload,但不能执行 sudo php5-fpm stop 不过被玩出花来的还是我司的跳板机。 对于管理员,我们这样配置: 引用 felix021 ALL=(ALL:ALL) ALL 通过密码验证切换到root用户 对于组长,我们这样配置: $ sudo groupadd master #添加组 $ sudo usermod -a -G master felix021 #将用户添加到这个组 $ vi /etc/sudoers 引用 %master ALL= NOPASSWD: /usr/bin/getpubkey * 这个 getpubkey 是一个shell脚本,只包含一句 cat "/home/$user/.ssh/id_rsa.pub" ,用来获取某个用户的公钥 然后配合 authroize_user 这个脚本,将公钥发送到组长有权限访问的机器上,通过这种方式实现一个简陋的二级授权: 引用 sudo getpubkey $1 | ssh nginx@$host bash -c "cat /dev/stdin >> ~/.ssh/authorized_keys" 另外顺便提一下sudo的debug,似乎相关资料很少。在配置group的时候,直接去测试,有时会发现好像总是不对,但是sudo默认没有log,很难排查问题。实际上只要在 /etc/ 下面添加一个 sudo.conf 就好,文件内容为:引用 Debug sudo /var/log/sudo_debug all@warn,plugin@info 再次执行sudo的时候就会看到debug log文件里的信息: 引用 Apr 22 14:12:03 sudo[21786] user_info: user=felix021 Apr 22 14:12:03 sudo[21786] user_info: pid=21786 Apr 22 14:12:03 sudo[21786] user_info: ppid=21785 Apr 22 14:12:03 sudo[21786] user_info: pgid=21785 Apr 22 14:12:03 sudo[21786] user_info: tcpgid=21785 Apr 22 14:12:03 sudo[21786] user_info: sid=21522 Apr 22 14:12:03 sudo[21786] user_info: uid=1002 Apr 22 14:12:03 sudo[21786] user_info: euid=0 Apr 22 14:12:03 sudo[21786] user_info: gid=1000 Apr 22 14:12:03 sudo[21786] user_info: egid=1000 Apr 22 14:12:03 sudo[21786] user_info: groups=1000 从这里可以看到,虽然前面把 felix021 添加到了 master 这个group下,但是sudo并没有识别出来。 放狗搜了一下才知道,原来linux下需要退出所有的登录session重新登录,才能生效。 Generated by Bo-blog 2.1.0