Cmnd_Alias USERMAG=/usr/sbin/adduser,/usr/sbin/userdel,/usr/bin/passwd [A-Za-z]*,/bin/chown,/bin/chmod
注意:命令别名下的成员必须是文件或目录的绝对路径;
Cmnd_Alias DISKMAG=/sbin/fdisk,/sbin/parted
Cmnd_Alias NETMAG=/sbin/ifconfig,/etc/init.d/network
Cmnd_Alias KILL=/usr/bin/kill
Cmnd_Alias PWMAG=/usr/sbin/reboot,/usr/sbin/halt
Cmnd_Alias SHELLS=/usr/bin/sh, /usr/bin/csh, /usr/bin/ksh, \
/usr/local/bin/tcsh, /usr/bin/rsh, \
/usr/local/bin/zsh
注:这行定义命令别名有点长,可以通过 \ 号断行;
Cmnd_Alias SU=/usr/bin/su,/bin,/sbin,/usr/sbin,/usr/bin
在上面的例子中,有KILL和PWMAG的命令别名定义,我们可以合并为一行来写,也就是等价行;
Cmnd_Alias KILL=/usr/bin/kill:PWMAG=/usr/sbin/reboot,/usr/sbin/halt 注:这一行就代表了KILL和PWMAG命令别名,把KILL和PWMAG的别名定义合并在一行写也是可以的;
Runas_Alias OP=root, operator
Runas_Alias DBADM=MySQL:OP=root, operator 注:这行是上面两行的等价行;至于怎么理解Runas_Alias ,我们必须得通过授权规则的实例来理解;
4、/etc/sudoers中的授权规则:
授权规则是分配权限的执行规则,我们前面所讲到的定义别名主要是为了更方便的授权引用别名;如果系统中只有几个用户,其实下放权限比较有限的话,可以不用定义别名,而是针对系统用户直接直接授权,
所以在授权规则中别名并不是必须的;
授权规则并不是无章可寻,我们只说基础一点的,比较简单的写法,如果您想详细了解授权规则写法的,请参看man sudoers
授权用户 主机=命令动作
这三个要素缺一不可,但在动作之前也可以指定切换到特定用户下,在这里指定切换的用户要用括号括起来,
如果不需要密码直接运行命令的,应该加NOPASSWD:参数,但这些可以省略;举例说明;
实例一:
linuxidc ALL=/bin/chown,/bin/chmod
如果我们在/etc/sudoers 中添加这一行,表示linuxidc可以在任何可能出现的主机名的系统中,可以切换到root用户下执行/bin/chown和/bin/chmod 命令,通过sudo -l 来查看linuxidc 在这台主机上允许和禁止运行的命令;
值得注意的是,在这里省略了指定切换到哪个用户下执行/bin/shown 和/bin/chmod命令;在省略的情况下默认为是切换到root用户下执行;同时也省略了是不是需要linuxidc用户输入验证密码,如果省略了,默认为是需要验证密码。
为了更详细的说明这些,我们可以构造一个更复杂一点的公式;
授权用户 主机=[(切换到哪些用户或用户组)] [是否需要密码验证] 命令1,[(切换到哪些用户或用户组)] [是否需要密码验证] [命令2],[(切换到哪些用户或用户组)] [是否需要密码验证] [命令3]......
注解:
凡是[ ]中的内容,是可以省略;命令与命令之间用,号分隔;通过本文的例子,可以对照着看哪些是省略了,哪些地方需要有空格;
在[(切换到哪些用户或用户组)] ,如果省略,则默认为root用户;如果是ALL ,则代表能切换到所有用户;注意要切换到的目的用户必须用()号括起来,比如(ALL)、(linuxidc)
实例二:
linuxidc ALL=(root) /bin/chown, /bin/chmod
如果我们把第一个实例中的那行去掉,换成这行;表示的是linuxidc 可以在任何可能出现的主机名的主机中,可以切换到root下执行/bin/chown,可以切换到任何用户招执行/bin/chmod 命令,
通过sudo -l 来查看linuxidc 在这台主机上允许和禁止运行的命令;
实例三:
linuxidc ALL=(root) NOPASSWD: /bin/chown,/bin/chmod
如果换成这个例子呢?表示的是linuxidc 可以在任何可能出现的主机名的主机中,可以切换到root下执行 /bin/chown,不需要输入 linuxidc用户的密码;并且可以切换到任何用户下执行/bin/chmod 命令,
但执行chmod时需要linuxidc输入自己的密码;
通过sudo -l 来查看linuxidc 在这台主机上允许和禁止运行的命令;
关于一个命令动作是不是需要密码,我们可以发现在系统在默认的情况下是需要用户密码的,除非特加指出不需要用户需要输入自己密码,所以要在执行动作之前加入NOPASSWD: 参数;
有可能有的弟兄对系统管理的命令不太懂,不知道其用法,这样就影响了他对 sudoers定义的理解,下面我们再举一个最简单,最有说服务力的例子;
实例四:
比如我们想用linuxidc普通用户通过more /etc/shadow文件的内容时,可能会出现下面的情况;
[linuxidc@localhost ~]$ more /etc/shadow
/etc/shadow: 权限不够