在linux系统中,有些普通用户须要借助root账号来执行一些操做,但咱们并不能把root密码给普通用户,就有了sudolinux
sudo能够临时切换到指定账号进行操做web
使用方法:vim
sudo [ -u 用户账号] 须要执行的命令;切换到root时,能够直接执行sudo 执行命令 便可;网络
sudo -l :列出全部能够执行的命令
运维
使用条件:ide
必须以root身份执行visudo,添加须要执行sudo命令的用户;
测试
执行visudo,实际上修改的是/etc/sudoers文件;ui
为何要使用visudo,而不直接使用vim /etc/sudoers呢?这是因数visudo在修改完成后能够对语法进行检查
spa
使用visudo -c进行语法检查,当sudoers文件有语法错误时,全部的sudo命令都没法使用
orm
修改配置:
[root@web1 ~]# visudo
root ALL=(ALL) ALL <==找到这一行
liu ALL=(ALL) ALL <==新增的行,保存退出
用户账号:表示系统中哪一个账号可使用sudo命令
第一个ALL:登陆者来源的主机名,表示这个账号能够从哪一台主机链接过来,ALL表示任意主机
第二个ALL:可切换的身份,表示此账号能够切换哪一个账号进行操做,ALL表示能够切换成任何用户
第三个ALL:可执行的命令,表示此账号能够执行哪些命令,ALL表示能够执行任何命令;
注意:在大多数状况下,不能为普通用户设置所有命令的权限,要让用户拥有一个或者几个权时,ALL能够换成此命令的绝对路径,有多个命令时,中间以逗号分开,但必须是全路径
好比只有修改密码的权限时,但绝对不能修改root用户的密码:
liu ALL=(ALL) !/usr/bin/passwd,/usr/bin/passwd [A-Za-z]*,!/usr/bin/passwd root
用!(感叹号)表示排除此命令
进行测试:
结果:
从上图中能够看到以普通用户liu登陆时,执行sudo命令建立test2目录,其属主和属组均为root
sudo免密码执行命令:
每次执行sodu命令都须要输入用户密码才能执行,那怎么能够作到执行sudo不输入密码呢?
liuwei ALL=(ALL) NOPASSWD:/usr/sbin/useradd
在给定可执行的命令时,在前边添加NOPASSWD
有时咱们须要为不少用户添加sudo权限,此时能够经过组来实现
前提:
把须要执行一样的权限的普通用户,添到同一个组中
把用户wei,cui同时加入到组liu中,此组liu中就有liu,wei,cui3个普通用户
修改配置文件:
#visudo 把以前添加的用户liu独有权限删除,添加组liu
找到圈中的这一行,把“wheel”改成你本身设定的组,我这边改成组liu,保存退出进行测试
检查语法:
#visudo -c
测试:
分别切换到用户liu,wei,cui进行测试 注意:用户第一次用sudo命令时会收到一些提示
查看上面3文件的属主属组,能够看到都为root,说明测试成功
之后若是想要增长或者删除某个用户sudo权限时,只须要将此用户添加到或者移除此组就能够了
思考:
使用sudo命令切换用户,老是提示输入本身的密码才能够成功,那有没有办法不输入密码呢?
找到此行,把前边的#号去掉,百分号后边添加你须要设定的组便可
测试:能够看到用户组liu中的全部用户,再执行sudo操做时,能够不用输入密码了
总结:
要给定sudo权限的用户,必须是你信任的用户;
别名设置:
用户或者组的别名 --> User_Alias ADMINS = jsmith,mkike,%groupname (注:组前边须要添加%)
主机别名 --> Host_Alias FILESERVERS = fs1,fs2
能够切换的用户角色别名 --> Runas_Alias OP = root
命令别名 --> Cmnd_Alias SERVICES = /sbin/service,/sbin/chkconfig
什么状况才使用别名?
答:在工做中通常有多个系统用户,须要分类,分层次管理用户的时候
别名实际实例:
工做需求:
开发人员:User_Alias KAIFA_ADMINS = kaifa01,kaifa02
命令权限:KAFACMD
身份权限:KAIFA_ADMINS
运维人员:User_Alias OLD_ADMINS = oldboy,oldgirl,%sa
命令权限:USERCMD,NETMAGCMD,CTRLCMD,DISKCMD
身份权限:OP1
网络工程师:User_Alias OLD_NETADMINS = leo,maya
命令权限:NETMAGCMD
身份权限:OP2
#用户分组 --> 相同岗位的人放在一个组
User_Alias OLD_ADMINS = oldboy,oldgirl,%sa
User_Alias OLD_NETADMINS = leo,maya
User_Alias KAIFA_ADMINS = kaifa01,kaifa02
#相似命令分组
Cmnd_Alias USERCMD = /usr/sbin/useradd,/usr/sbin/userdel,/usr/bin/passwd [A-Za-z]*,/bin/chown,/bin/chmod
Cmnd_Alias DISKCMD = /sbin/fdisk,/sbin/parted
Cmnd_Alias NETMAGCMD = /sbin/ifconfig,/etc/init.d/network
Cmnd_Alias CTRLCMD = /usr/sbin/reboot,/usr/sbin/halt
Cmnd_Alias KAFACMD = /bin/grep,/usr/bin/tail,/bin/cat
#角色
Runas_Alias OP1 = root,oldboy
Runas_Alias OP2 = root,oldgirl
#受权
KAIFA_ADMINS ALL=(OP1) KAFACMD
OLD_ADMINS ALL=(OP1) USERCMD,DISKCMD,NETMAGCMD,CTRLCMD
OLD_NETADMINS ALL=(OP2) NETMAGCMD
sudo审计:
只记录用户使用sudo时执行的命令;
只须要向/etc/sudoers文件中添加以下内容,便可实现sudo审计
echo "Defaults logfile=/var/log/sudo.log" >> /etc/sudoers