sudo 命令其实是Linux中的一种权限管理机制,管理员可以授权于一些普通用户去执行一些 root 执行的操作,而不需要知道 root 的密码。
严谨些说,sudo 允许一个已授权用户以超级用户或者其它用户的角色运行一个命令。当然,能做什么不能做什么都是通过安全策略来指定的。sudo 支持插件架构的安全策略,并能把输入输出写入日志。第三方可以开发并发布自己的安全策略和输入输出日志插件,并让它们无缝的和 sudo 一起工作。默认的安全策略记录在 /etc/sudoers 文件中。而安全策略可能需要用户通过密码来验证他们自己。也就是在用户执行 sudo 命令时要求用户输入自己账号的密码。如果验证失败,sudo 命令将会退出。我们可以通过visudo来修改/etc/sudoers配置文件,visudo等价于vi /etc/sudoers。
文件的语法相当于 who where whom command 表示哪个用户可以在哪个主机以谁的身份来执行哪些命令。
如:
[root@zxl ~]# visudo
root:表示root用户。
ALL:表示在任何主机上都可以,也可以表示192.168.232.0/24。
(ALL):表示以任何的身份。
ALL:表示可以执行任何命令。
整条语句的意思就是:root用户可以在任何机器上以任何身份执行任何命令。
上面这条表示在wheel这个组中的成员所拥有的权限,这里表示这个组中的成员能在任何机器上以任何身份来执行任何命令。
和前面的意思是一样的,不过在执行命令的时候不会提示输入密码。默认的情况下是需要输入角色的密码。
eg:
给zxl用户赋予任何角色来执行任何命令zxl ALL=(ALL) ALL 切换到zxl用户: [root@zxl ~]# su - zxl 执行useradd命令:需要在命令前加上sudo[zxl@zxl ~]$ sudo useradd lisiWe trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:#1) Respect the privacy of others.
#2) Think before you type. #3) With great power comes great responsibility.[sudo] password for zxl:
[zxl@zxl ~]$注意:在这过程中需要输入zxl用户的密码[zxl@zxl ~]$ tail -1 /etc/passwdlisi:x:501:501::/home/lisi:/bin/bash[zxl@zxl ~]$给zxl用户以任何身份来执行指定命令:
99 zxl ALL=(ALL) /bin/touch, /usr/sbin/useradd
表示:zxl用户可以执行touch和useradd命令,多条命令用逗号和空格隔开,命令用全路径,查看命令所在路径用which命令。[root@zxl ~]# su - zxl
[zxl@zxl ~]$ sudo touch /etc/test.txt[sudo] password for zxl: [zxl@zxl ~]$ ll /etc/test.txt -rw-r--r-- 1 root root 0 Jul 11 17:32 /etc/test.txt[zxl@zxl ~]$屏蔽输入密码提示:在命令处添加 NOPASSWD: ALL
表示zxl用户可以不用输入密码执行任何命令。
[root@zxl ~]# su - zxl
[zxl@zxl ~]$ sudo touch /etc/test1.txt[zxl@zxl ~]$ LANG=en[zxl@zxl ~]$ ll /etc/test.txt -rw-r--r-- 1 root root 0 Jul 11 17:32 /etc/test.txt[zxl@zxl ~]$ ll /etc/test1.txt -rw-r--r-- 1 root root 0 Jul 11 17:43 /etc/test1.txt[zxl@zxl ~]$ [zxl@zxl ~]$ rm -rf /etc/test1.txt rm: cannot remove `/etc/test1.txt': Permission denied[zxl@zxl ~]$ sudo rm /etc/test1.txt [zxl@zxl ~]$ sudo rm /etc/test.txt [zxl@zxl ~]$