Linux sudo实作
sudo执行过程:
sudo首先会查看/etc/sudoers文件,根据其中的内容判断使用者是否具有权限,如果通过则会要求输入使用者的密码然后才会执行后面的命令;
所以/etc/sudoers这个文件是值得我们来花时间看一看的,因为此文件有自己特定的语法,所以我们需要使用专用命令打开它(其实root通过给此文件增加w权限也是可以编辑的):visudo,当使用此工具编辑完成保存退出时,如果有语法错误会直接提示我们,超级棒有木有!
所以接下来我们来看看这个文件:
## Allow root to run any commands anywhere(在文件中寻找这一行,其下面就是我们需要编辑的内容)
root ALL = (ALL) ALL
使用者 登入者的来源主机 可使用的身份 可执行的命令
例子:guowei ALL=(root) ALL
表示:账号guowei可以通过任何一部主机登录到系统,通过sudo命令以root的身份执行其所有支持的全部命令;
例子:guowei1 ALL=(root) /usr/bin/passwd
表示:账号guowei1可以通过任何一部主机登录到系统,通过sudo命令以root的身份执行修改用户密码的操作;
Note:命令需要写绝对路径,否则visudo会报错;
#但是当你实作了此例子之后会发现,实际修改的不是你指定用户的密码,而是root用户的密码;#所以我们应该避免这种情况才对:
#guowei1 ALL=(root) !/usr/bin/passwd,/usr/bin/passwd [A-Za-z]*,!/usr/bin/passwd root
#表示:guowei1可以使用除了passwd和passwd root这两个命令之外的其他任何搭配来修改指定用户密码;
Note:#表示暂时注释掉,以上是鸟哥原文,但是我测试以后发现修改的是指定用户的密码,没有修改root密码;
## Allows people in group wheel to run all commands
%wheel ALL = (ALL) ALL
组 登入者的来源主机 可使用的身份 可执行的命令
例子:%Text ALL=(guowei) ALL
表示:属于Text组的任何用户都可以通过任何一部主机登录到系统,通过sudo命令以guowei的身份执行其所支持的全部命令;
Note:推荐使用sudo -u guowei COMMAND 格式;
如不使用-u参数会失败,暂时我也不知道是什么原因;
%Text ALL=(guowei) NOPASSWD:ALL
既然我们已经相信了这些账户,所以可以设置不需要密码即可登录,NOPASSWD即表示免密;
如果我们有很多用户需要被授权使用sudo,并且执行很多特定命令,或者以后我们打算添加或修改或撤销某个用户或命令那我们岂不是要一条一条的修改,这太麻烦了!所以出于管理方便我们可以在其配置文件中使用别名来将用户或命令归为一组来管理;
命令别名:
Cmnd_Alias COMMAND_NAME = COMMANDS , …
账号别名:
User_Alias USER_NAME = USERA , …
主机别名:
Host_Alias HOST_NAME = HOST , …
USER_NAME HOST_NAME=(root) COMMAND_NAME
例子:User_Alias ADMINS=guowei,gw
ADMINS ALL=(root) /bin/su -
此例表示:guowei和gw均可切换到root身份执行操作并且使用的是自己的密码,所以使用这条命令需要确保授权的用户都是可信任的;
注:根据鸟哥的Linux私房菜做的笔记,如有错误,欢迎指正;侵删