sudo的作用在man中概括为"execute a command as another user",即以另外一个用户的身份来执行一条命令。之所以想到这条命令是因为前段时间公司服务器上的文件莫名全部消失而导致的系统重装,追根朔源,系统的安全措施不够到位。
- 登陆到机器上的用户为使用方便,全部使用root用户
- root密码过于简单,并且没有做相应的定期更换
- 通过telnet登陆的用户大部分为同一个用户,造成系统记录多是以该用户名记录的,虽然可以通过IP地址查证本人,但是IP的伪装确是再容易不过的事
为解决第一和第三个问题,可以实行“实名制”,即为每个用户分配一个用户名,所有用户对系统的使用必须通过自己的用户名来完成。那么一些必须由root用户才能进行的操作就以sudo的方式来执行,因为对sudo的使用是有记录可查的,那么大部分用户的行为也就是可以记录的了。
sudo可以为每一个用户单独授权,授权(也就是用户可以执行的命令)是命令的条数为单位的。sudo的配置在/etc/sudoers文件中完成,使用专用的"visudo"命令来编辑(visudo保证用户能够安全的编辑/etc/sudoers文件,如语法检查、并行编辑等)。最简单的/etc/sdoers文件如下:































仅在原始文件上添加了红色的两行,以#开头的行为注释行。"gongam ALL=NOPASSWD:/sbin/ifconfig"的意思是允许gongam这个用户在任何主机登陆使用"sudo /sbin/ifconfig"命令并且不需要输入密码。
仿照这个文件我们就可以为特定用户赋予特定的权利了。高级的用法如限制主机、用户组、命令组的用法可以参照下面的规则,详细可参看"man sudoers":









sudo的默认目的角色为root;没有配置"NOPASSWD"参数,则默认5分钟后再次用sudo需要重新验证身份(即输入密码)。
sudo的使用,常用参数解释:








备注 :
- 使用sudo时,虽然是以目的用户(如root)的身份执行命令,但是环境变量并没有变成目的用户的,所以执行命令是要给出绝对路径,如普通用户需要输入"sudo /sbin/ifconfig"后才能执行root的ifconfig命令。
- 要记录日志需要在/etc/sudoers添加"Defaults logfile=/var/log/sudo.log"