这时我们可以用sudo more /etc/shadow 来读取文件的内容;就就需要在/etc/soduers中给linuxidc授权;
于是我们就可以先su到root用户下通过visudo 来改/etc/sudoers ;(比如我们是以linuxidc用户登录系统的)
[linuxidc@localhost ~]$ su
Password: 注:在这里输入root密码
下面运行visodu;
[root@localhost linuxidc]# visudo 注:运行visudo 来改 /etc/sudoers
加入如下一行,退出保存;退出保存,在这里要会用vi,visudo也是用的vi编辑器;
linuxidc ALL=/bin/more 表示linuxidc可以切换到root下执行more 来查看文件;
退回到linuxidc用户下,用exit命令;
[root@localhost linuxidc]# exit
exit
[linuxidc@localhost ~]$
查看linuxidc的通过sudo能执行哪些命令?
[linuxidc@localhost ~]$ sudo -l
Password: 注:在这里输入linuxidc用户的密码
User linuxidc may run the following commands on this host: 注:在这里清晰的说明在本台主机上,linuxidc用户可以以root权限运行more ;在root权限下的more ,可以查看任何文本文件的内容 的;
(root) /bin/more
最后,我们看看是不是linuxidc用户有能力看到/etc/shadow文件的内容;
[linuxidc@localhost ~]$ sudo more /etc/shadow
linuxidc 不但能看到 /etc/shadow文件的内容,还能看到只有root权限下才能看到的其它文件的内容,
比如;
[linuxidc@localhost ~]$ sudo more /etc/gshadow
对于linuxidc用户查看和读取所有系统文件中,我只想把/etc/shadow 的内容可以让他查看;可以加入下面的一行;
linuxidc ALL=/bin/more /etc/shadow
实例五:练习用户组在/etc/sudoers中写法;
如果用户组出现在/etc/sudoers 中,前面要加%号,比如%linuxidc ,中间不能有空格;
%linuxidc ALL=/usr/sbin/*,/sbin/*
如果我们在 /etc/sudoers 中加上如上一行,表示linuxidc用户组下的所有成员,在所有可能的出现的主机名下,都能切换到root用户下运行 /usr/sbin和/sbin目录下的所有命令;
实例六:练习取消某类程序的执行;
取消程序某类程序的执行,要在命令动作前面加上!号; 在本例中也出现了通配符的*的用法;
linuxidc ALL=/usr/sbin/*,/sbin/*,!/usr/sbin/fdisk 注:把这行规则加入到/etc/sudoers中;但您得有linuxidc这个用户组,并且linuxidc也是这个组中的才行;
本规则表示linuxidc用户在所有可能存在的主机名的主机上运行/usr/sbin和/sbin下所有的程序,但fdisk 程序除外;
[linuxidc@localhost ~]$ sudo -l
Password: 注:在这里输入linuxidc用户的密码;
User linuxidc may run the following commands on this host:
(root) /usr/sbin/*
(root) /sbin/*
(root) !/sbin/fdisk
[linuxidc@localhost ~]$ sudo /sbin/fdisk -l
Sorry, user linuxidc is not allowed to execute '/sbin/fdisk -l' as root on localhost.
注:不能切换到root用户下运行fdisk 程序;
实例七:别名的运用的实践;
假如我们就一台主机localhost,能通过hostname 来查看,我们在这里就不定义主机别名了,用ALL来匹配所有可能出现的主机名;并且有 linuxidc、linuxsir、lanhaitun 用户;
主要是通过小例子能更好理解;sudo虽然简单好用,但能把说的明白的确是件难事;最好的办 法是多看例子和man soduers ;
User_Alias SYSADER=linuxidc,linuxsir,%linuxidc
User_Alias DISKADER=lanhaitun
Runas_Alias OP=root
Cmnd_Alias SYDCMD=/bin/chown,/bin/chmod,/usr/sbin/adduser,/usr/bin/passwd [A-Za-z]*,!/usr/bin/passwd root
Cmnd_Alias DSKCMD=/sbin/parted,/sbin/fdisk 注:定义命令别名DSKCMD,下有成员parted和fdisk ;
SYSADER ALL=SYDCMD,DSKCMD
DISKADER ALL=(OP) DSKCMD
注解:
第一行:定义用户别名SYSADER 下有成员 linuxidc、linuxsir和linuxidc用户组下的成员,用户组前面必须加%号;
第二行:定义用户别名 DISKADER ,成员有lanhaitun
第三行:定义Runas用户,也就是目标用户的别名为OP,下有成员root
第四行:定义SYSCMD命令别名,成员之间用,号分隔,最后的!/usr/bin/passwd root 表示不能通过passwd 来更改root密码;
第五行:定义命令别名DSKCMD,下有成员parted和fdisk ;
第六行: 表示授权SYSADER下的所有成员,在所有可能存在的主机名的主机下运行或禁止 SYDCMD和DSKCMD下定义的命令。
更为明确遥说, linuxidc、linuxsir和linuxidc用户组下的成员能以root身份运行 chown 、chmod 、adduser、passwd,但不能 更改root的密码;也可以以root身份运行 parted和fdisk ,
本条规则的等价规则是:
linuxidc,linuxsir,%linuxidc ALL=/bin/chown,/bin/chmod,/usr/sbin/adduser,/usr/bin/passwd [A-Za-z]*,!/usr/bin/passwd root,/sbin/parted,/sbin/fdisk
第七行:表示授权DISKADER 下的所有成员,能以OP的身份,来运行 DSKCMD ,不需要密码;更为明确的说 lanhaitun 能以root身份运行 parted和fdisk 命令;其等价规则是:
lanhaitun ALL=(root) /sbin/parted,/sbin/fdisk