一、前言
sudo 是linux系统管理指令,是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如halt,reboot,su等等, 这样不仅减少了root用户的登陆和管理时间,同样也提高了安全性,sudo不是对shell的代替,它是面向每一个命令的。sudo是可以让某个用户不需要拥有管理员的账号密码,可以执行管理员的权限的。
二、su与sudo的区别
su命令就是转换用户的工具,假如当前用户没有userdel权限,而只有root有此权限,这时你就可以使用利用su切换到root用户(你要知道root密码才可以),操作完成后再切换回来。还有如果有多个用户都要涉及root运行程序,那么就要将root密码告诉多个人,那么,这么多人当中就可以通过root权限能够做任何事,这在一定程度上就对系统的安全造成了威协。所以说su只适用于一两个人参与管理的系统,毕竟su并不能让普通用户受限的使用;终极用户root密码应该掌控在少数用户手中,这绝对是真理!su并不能做到对权限的下放,也不能做到约定其它用户使用哪些命令来完成与其相关的工作;这样也就有了suo,通过sudo,我们能把某些终极权限有针对性的下放,并且无需普通用户知道root密码,所以sudo 相对于权限无限制性的su来说,还是比较安全的,所以sudo 也能被称为受限制的su ;另外sudo 是需要授权许可的,所以也被称为授权许可的su;
二、sudo 授权工具
把有限的管理操作授权某普通用户,并且还能限定其仅能够在某些主机上执行此类命令,操作过程还会被记录于日志中,以便于日后审计,作为管理员可以指派某些用户可以执行某些特定的命令,类似于suid(仅在执行所用的权限上类似)
三、特点
sudo使用时间戳文件来执行类似的“检票”的系统,当用户调用sudo并且输入它的密码时,用户获得了一张存活期为5分钟的票(这个值可以在编译的时候改变)
四、配置文件
Sudo的配置文件是sudoers文件,它允许系统管理员集中的管理用户的使用权限和使用的主机,它所存放的位置默认是在/etc/sudoers,属性为0440.
注:可以使用vim /etc/sudoers编辑配置文件,也可以使用visudo(建议使用visudo)
1、命令参数
命令 | 参数 | 说明 |
sudo[klv] | -b | 在后台执行指令 |
-h | 显示帮助 | |
-H | 将HOME环境变量设为新身份的HOME环境变量 | |
-k | 结束密码的有效期限,也就是下次再执行sudo时便需要输入密码 | |
-l | 列出当前用户可执行的命令与不可执行的命令 | |
-p | 改变询问密码的提示符 | |
-s | 执行指定的shell | |
-u <user> | 以指定的用户作为新的身份。若不加上此参数,则预设以root作为新的身份。 | |
-v | 延长密码有效期限5分钟 | |
-V | 显示版本信息 |
2、配置文件说明
⑴、语法
who which_host=(whom) command
who:授权的用户(也可以使用 User_Alias定义一个或一组用户)
which_host:对于那些主机(也可以使用Host_Alias定义一个或一组主机)
whom:以谁的身份(也可以使用Runas_Alias定义一个或一组用户)
command:定义的命令(也可以使用Cmd_Alias来定义一个或一组命令)
其语义就是说,授权那一个用户在那一个主机上以什么样的身分执行那些命令。
注:关于更多别名的用法请visudo自行查看
⑵、标签
NOPASSWD:如果在命令别名前加上NOPASSWD则表示这一组命令都不需要不密码。
PASSWD:如果在命令别名前加上PASSWD则表示这一组命令在执行前都会提示输入密码
⑶、别名类别注解
注:
定义的别名必须要使用大写字母
%表示本地系统组
!表示取反(不允许执行)
Cmnd_Alias USERADMIN = /usr/sbin/useradd,/usr/sbin/usermod,/usr/sbin/userdel,/usr/bin/passwd, !/usr/bin/passwd (root)
别名类别 | User Aliases | |
样例 | User_Alias ADMINS = jsmith, mikem | |
注解 | 以ADMINS为别名(大写)包含了两个用,jsmith与mikem | |
别名类别 | Host Aliases | |
样例 | Host_Alias SPARC = bigtime,eclipse,moet,anchor Host_Alias CUNETS = 192.168.0.0/255.255.255.0 Host_Alias CURNETS = 172.16.0.0/16 | |
注解 | 将主机分类,这些都是可以随便分,目的是为了更好的管理,可以使用主机名,也可使用ip/mask或ip/cidr | |
别名类别 | Runas Aliases | |
样例 | Runas_Alias SYSTEM = root,oracle | |
注解 | 在这里可以定义一组用户 | |
别名类别 | Command Aliases | |
样例 | Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum | |
注解 | 定义命令是命令的路径,命令一定要使用绝对路径,避免其它目录的同名命令被执行,造成安全隐患,因此使用的时候也是使用绝对路径引用 |
五、实例
授权tom,hdoop用户能够以管理员的身份基于sudo执行useradd、passwd、usermod、userdel命令;后面三个命令在执行时需要输入密码,而前一个不需要。
编辑sudo配置文件
$sudo visudo
User_Alias USERADMIN=tom,hdoop Host_Alias LOCAL=127.0.0.1,bogon Runas_Alias SYSTEM=root Cmnd_Alias USERADD=/usr/sbin/useradd Cmnd_Alias USERMOD=/usr/bin/passwd,/usr/sbin/userdel,/usr/sbin/usermod USERADMIN LOCAL=(SYSTEM) NOPASSWD:USERADD USERADMIN LOCAL=(SYSTEM) PASSWD:USERMOD
前提:
tom,hdoop必须事先存在,保存后,使用su - hdoop
=====================完====================