Sudo
/etc/sudoers授权文件
Sudoers语法格式:
Who------where=(whom)......command
# ls /etc/sudoers -l # lsattr /etc/sudoers
[root@localhost ~]# useradd zhangsan [root@localhost ~]# passwd zhangsan
更改用户 zhangsan 的密码 。
新的 密码:
重新输入新的 密码:
passwd: 所有的身份验证令牌已经成功更新。
场景一:希望让zhangsan用户在sudo里面代替root用户使用useradd命令;
可使用专门编辑sudoers文件的命令visudo
#visudo
Sudo授权用户:
#sudo -l #sudo COMMAND [zhangsan@localhost ~]$ whoami [zhangsan@localhost ~]$ sudo -l [zhangsan@localhost ~]$ useradd han [zhangsan@localhost ~]$ sudo /usr/sbin/useradd lisi [zhangsan@localhost ~]$ tail -1 /etc/passwd
[zhangsan@localhost ~]$ useradd hanadd han [zhangsan@localhost ~]$ sudo /usr/sbin/useradd lisi [zhangsan@localhost ~]$ tail -1 /etc/passwd [zhangsan@localhost ~]$ ls /var/log/secure -l
[zhangsan@localhost ~]$ sudo /usr/sbin/useradd wangwu [sudo] password for zhangsan: [zhangsan@localhost ~]$ tail -1 /etc/passwd wangwu:x:502:502::/home/wangwu:/bin/bash
[root@localhost ~]# tail /var/log/secure
Sudo默认为用户保留五分钟成功登陆后的状态,前提是之前执行的命令是成功的
[zhangsan@localhost ~]$ sudo -k [zhangsan@localhost ~]$ sudo /usr/sbin/useradd maliu
[sudo] password for zhangsan:
[zhangsan@localhost ~]$ tail -1 /etc/passwd
maliu:x:503:503::/home/maliu:/bin/bash
sudosers常用选项: -k结束密码的有效期限,也就是在下次再执行sudo时,需要输入密码; -l列出目前用户可执行与无法执行的指令; -p改变询问密码的提示符号; -s执行指定的shell; -u<用户> 以指定的用户作为新的身份。若不加上此参数,则预设以root作为新的身份; -v延长密码有效期限五分钟; -V显示版本信息; -S从标准输入流替代终端来获取密码;
场景之二:期望某一组的用户都可以执行useradd命令;
1)添加用户组administrations
[root@localhost ~]# groupadd admins [root@localhost ~]# useradd test1 [root@localhost ~]# useradd test2
useradd:警告:此主目录已经存在。
不从 skel 目录里向其中复制任何文件。
正在创建信箱文件: 文件已存在
[root@localhost ~]# userdel -r test2 [root@localhost ~]# useradd test2 [root@localhost ~]# usermod -a -G admins test1 [root@localhost ~]# usermod -a -G admins test2
使用test1账户登录查看效果
[test1@localhost ~]$ sudo -l
[test1@localhost ~]$ sudo /usr/sbin/useradd zhaomin
使用root身份查看日志信息:
[root@localhost ~]# tail /var/log/secure
小结:看来,test1和test2这两个用户都没有相关的权限哦!
解决方法:编辑sudoers,添加如下文件
[root@localhost ~]# vim /etc/sudoers
114 %admins 172.16.17.0/24=(root) /usr/sbin/useradd
[test1@localhost ~]$ whoami [test1@localhost ~]$ sudo -l [test1@localhost ~]$ sudo /usr/sbin/useradd test3 [test1@localhost ~]$ tail -1 /etc/passwd
小结:%groupname:对组中所有用户进行sudo授权
Sudo别名机制的应用
Sudoers文件支持使用别名,对同类对象进行分组;此组指的是sudoers自己内建的逻辑组,且组名必须使用全大写字符
Host_Alias哪个主机?
User_Alias哪些用户给?
Runas_Alias在哪个主机上以谁的身份?
Cmnd_Alias执行什么命令?
简化定义结构:
定义命令别名:
在客户端执行如下命令
[test1@localhost ~]$ sudo -k
执行sudo-l查看列出test可以执行的命令
[test1@localhost~]$sudo -l
删除用户试试看:
[test1@localhost ~]$ sudo /usr/sbin/useradd test5 [test1@localhost ~]$ sudo /usr/sbin/userdel -r test5
小结:通过别名的机制让用户所能够执行的命令进行分组
那么,可以使用自己创建的组吗?不使用系统默认组,新建admin希望admin也能使用上述命令;但是不希望把admin加到admins组里面;该如何操作呢?
可以定义用户别名:
[root@localhost ~]# useradd han1 [root@localhost ~]# useradd han2 [root@localhost ~]# passwd han1 [root@localhost ~]# passwd han2 [root@localhost ~]# useradd admin
[root@localhost ~]# passwd admin
[test1@localhost ~]$ su - han1
[han1@localhost ~]$ sudo -l
定义主机别名: