Sudo是一款很有用的工具,通过sudo可以允许系统管理员授权给普通用户来完成部分或全部root命令。比如:执行关机命令shutdown,这个命令是管理员命令,普通用户不能访问执行该命令。但是通过sudo授权后,普通用户就可以访问shutdown这个命令了。
一、sudo的安装。
AIX安装完成后默认是没有安装sudo工具的,需要我们额外安装。基本安装过程有两种方式,源代码编译安装和rpm安装包安装。
1、 源代码安装:安装之前先确定系统内已经安装gcc4以上版本,然后从IBM网站下载sudo源代码tar包,并解压。然后执行下面过程!!
# export LIBPATH=/usr/lib
# ./configure --with-aixauth
# make
# make install
2、 rpm包安装:采用rpm安装方式比较简单!不需要系统安装gcc等编译环境,所以建议大家采用rpm方式安装。安装方法:首先从网上下载sudo的rpm安装包,然后执行安装。
下载rpm:http://www.bullfreeware.com/affichage.php?id=1031
# rpm –ivh sudo-1.7.0-2.aix6.1.ppc.rpm
或者使用smit工具安装也可以
# smit installp -->Install Software 输入sudo工具rpm包所在路径,然后执行安装即可。
二、sudo安装后主要文件:
1、sudo安装完成后主要文件:
sudo 文件:该文件安装完成后存在于/opt/freeware/bin文件夹中,并链接到/usr/bin/sudo文件。
visudo文件:该文件安装完成后存在于/opt/freeware/sbin 文件夹中,并链接到/usr/sbin/visudo文件。
Sudoers文件:该文件完成安装后存在于/etc/文件夹中。
2、上述三个文件关系:
Sudo 文件是用来执行普通用户使用管理员用户命令授权,即允许普通用户执行用户本身不能执行的命令。比如:让普通用户(bao)执行关机命令,可以这样来实现。
$ sudo –u root /usr/sbin/shutdown –h now
Sudoers 文件:该文件是sudo的配置文件,当管理员要开放给某个普通用户一些特殊命令执行权限时,就是在这个文件中进行编辑设置的。比如:上面的普通用户(bao)之所以可以执行关机命令,就是由管理员先行编辑该文件,并在文件中指定用户(bao)能够执行关机命令。然后当用户(bao)执行sudo命令关机时,sudo就会读取该文件中的内容,来判断用户(bao)能否执行sudo后面的shutdown命令。下面的内容就是sudoers文件中的一行。
bao ALL=/usr/bin/shutdown –h now
visudo文件:visudo就是用来编辑sudoers文件内容的。之所以使用visudoo来编辑sudoers文件,是因为它即能防止两个用户同时编辑sudoers,还可以进行一些语法检查,因此建议编辑sudoers文件时使用该命令来编辑。
三、sudo配置文件/etc/sudoers配置:
1、/etc/sudoers文件中每行算一个规则,前面带有#号可以当作是说明的内容,并不执行;如果规则很长,一行列不下时,可以用\号来续行,这样看来一个规则也可以拥有多个行。规则的设置格式为
授权用户主机=命令动作
例如:
bao ALL=(root)/usr/bin/shutdown –Fr now ---允许用户bao以root用户身份执行重启系统命令。
2、别名规则:
上面的设置只是简单的设置,如果访问主机的用户不多,而且执行功能简单的话,可以采用上面的设置方式,但是涉及到用户规则多而且设置复杂时,为了避免出错,可以采用别名设置。
/etc/sudoers 的规则可分为两类;一类是别名定义,另一类是授权规则;别名定义并不是必须的,但授权规则是必须的。
别名类型(Alias_Type):别名类型包括如下四种
Host_Alias 定义主机别名,就是主机的列表,可以是主机名,也可以是ip地址
如:Host_Alias TEST=host1,192.168.1.100
User_Alias 用户别名,别名成员可以是用户,用户组(前面要加%号)
如:User_Alias USRGP=usr1,usr2,usr3
Runas_Alias 就是用户以什么身份执行(例如root,或者db2inst1)的列表,即sudo允许切换至的用户;
如:Runas_Alias RUN=root,db2inst1
Cmnd_Alias 定义命令别名;就是允许执行的命令的列表.
如:Cmnd_Alias CMD=/usr/bin/shutdown –Fr now,/usr/bin/svmon –G,
/home/db2inst1/sqllib/bin
参考上面的别名定义,可以用别名来完成规则设定。
如:
USRGP TEST=(RUN)CMD
注意:在定义别名时,语句一定要顶格写,而且别名一定要大写。
3、 关于环境变量的继承:由于sudo 会缩减系统变量,因此在执行一些命令时,会出现一些错误,下面通过实例来理解一下,如果继承环境变量。
当用户bao通过sudo要执行oracle的sqlplus命令时,例如:
Sudo –u oracle /oracle/ora10g/bin/sqlplus
会出现如下错误:
SP2-0750: You may need to set ORACLE_HOME to your Oracle software directory,这是由于没有继承ORACLE_HOME环境变量的缘故。这就需要编辑sudo的配置文件,添加如下内容:Defaults env_keep += "ORACLE_HOME"。完成后,切换到执行用户,然后执行sudo –l 命令,会看到这样信息:
Matching Defaults entries for bao on this host:
env_keep+=ORACLE_HOME
然后再执行Sudo –u oracle /oracle/ora10g/bin/sqlplus,结果依然报上面的错误。
SP2-0750: You may need to set ORACLE_HOME to your Oracle software directory。
这是由于只是指定了ORACLE_HOME变量的名称,并没有指定变量的值,因此在运行Sudo –u oracle /oracle/ora10g/bin/sqlplus还要执行该变量的值。这样运行起来就不会报错了。过程如下:
# export ORACLE_HOME=/oracle/ora10g
# sudo -u oracle /oracle/ora10g/bin/sqlplus
四、sudo命令的主要参数:
-V 显示版本编号
-h 显示sudo命令的使用参数。
-v 因为sudo在第一次执行时或是在N分钟内没有执行(N预设为5)会询问密码。这个参数是重新做一次确认,如果超过N分钟,也会问密码。
-k 将会强迫使用者在下一次执行sudo时询问密码(不论有没有超过N分钟)。
-u username/#uid不加此参数,代表要以root的身份执行命令,而加了此参数,可以以username的身份执行命令(#uid为该username的UID)。
-s 执行环境变量中的 SHELL 所指定的 Shell ,或是 /etc/passwd 里所指定的 Shell。
-H 将环境变量中的HOME(宿主目录)指定为要变更身份的使用者的宿主目录。(如不加-u参数就是系统管理者root。)