一、su命令简介及用法
1、su命令简介
su用于用户之间的切换。但是前面的用户依然保持在登录状态。这种切换如果超级权限用户root向普通或虚拟用户切换不需要密码,而普通用户切换到其它任何用户都需要密码验证。
2、常用用法说明
普通用户在使用su命令时不加参数及使用参数-所带来的结果是有区别的:
- su在不加任何参数,默认为切换到root用户,这里需要输入root用户的密码,但没有转到root用户家目录下,也就是说这时虽然是切换为root用户了,但并没有改变为root登录环境;
- su 加参数 - ,表示默认切换到root用户,并且改变到root用户的环境;
3、不足之处
- 很不安全,su工具在多人参与的系统管理中,并不是最好的选择,su只适用于一两个人参与管理的系统,毕竟su并不能让普通用户受限的使用;超级用户root密码应该掌握在少数用户手中。
- 如果某个用户需要使用root权限、则必须要把root密码告诉此用户。
二、sudo命令介绍
1、简介
sudo命令是一种权限管理机制,管理员可以授权于一些普通用户去执行一些root才能执行的操作,而不需要知道root的密码,它依赖于/etc/sudoers这个文件,这个文件可以授权于那个用户在那台主机上能够以管理员的身份执行什么样的管理命令,而且是有限的。这个文件相当于就是一个授权表。
2、主要特点
- 能够限制指定用户在指定主机上运行某些命令。
- 可以提供日志,忠实地记录每个用户使用sudo做了些什么,并且能将日志传到中心主机或者日志服务器。
- 为系统管理员提供配置文件,允许系统管理员集中地管理用户的使用权限和使用的主机。它默认的存放位置是/etc/sudoers。
- 使用时间戳文件来完成类似“检票”的系统。当用户执行sudo并且输入密码后,用户获得了一张默认存活期为5分钟的“入场券”(默认值可以在编译的时候改变)。超时以后,用户必须重新输入密码。
3、常用参数
-b 在后台执行指令。
-H 将 HOME 变量设为目标用户的主目录。
-k 结束密码的有效期限,也就是下次再执行sudo时便需要输入密码。
-l 列出目前用户可执行与无法执行的指令。
-p 改变询问密码的提示符号。
-s 执行指定的shell。
-u 以指定的用户作为新的身份。若不加上此参数,则预设以root作为新的身份。
4、/etc/sudoers文件说明
在编辑这个文件前我们先查看下这个文件的权限:
[[email protected] ~]# ll /etc/sudoers -r--r-----. 1 root root 4002 3月 2 2012 /etc/sudoers
通过查看文件权限我们发现默认这个文件root没有写权限,但是还是可以使用vim编辑器来编辑此文件,为避免出现语法错误这里不建议使用vim编辑器来修改此文件。系统在安装sudo命令时默认还装了专门用来编辑此文件的命令visudo,使用这个命令编辑有这个好处一旦你的语法写错会造成严重的后果,这个工具会替你检查你写的语法正确性。
使用visudo命令编辑配置文件时默认文件会有下面一条语句,此语句的意思为:
root ALL=(ALL) ALL
root root用户
ALL 所有的主机上都可以
(ALL) 是以谁的身份来执行,ALL就代表root可以任何人的身份来执行命令
ALL 所有的命令
那么整个一条规则就是root用户可以在任何主机以任何人的身份来执行所有的命令,也就是不限定。
通过上面的说明我们可以简单的授权一个用户以root身份执行一些命令,多个命令之间要用逗号加空格隔开:
简单应用举例:
定义用户bols可以以root身份执行useradd、usermod、userdel三个命令:
bols AAL=(root) /usr/sbin/useradd, /usr/sbin/usermod, /usr/sbin/userdel
定义用户bols可以以root身份执行useradd、usermod、userdel三个命令,同时可以不用输入密码:
bols ALL=(root) NOPASSWD:/usr/sbin/useradd, /usr/sbin/usermod, /usr/sbin/userdel
在上面可执行命令中增加了passwd更改密码的命令,未避免出现更改root密码的现象,故设置了禁止更改root密码:
bols ALL=(root) NOPASSWD:/usr/sbin/useradd, /usr/sbin/usermod, /usr/sbin/userdel, /usr/bin/passwd, !/usr/bin/passwd root
5、通过别名方式定义普通用户可以执行的命令
1) 配置Host_Alias:就是主机的列表
Host_Alias HOSTS = hostname1, hostname2, hostname3
2) 配置Cmnd_Alias:就是允许执行的命令的列表
Cmnd_Alias USERCMD = command1, command2, command3
3) 配置User_Alias:就是具有sudo权限的用户的列表
User_Alias USERADMIN = user1, user2, user3
4) 配置Runas_Alias:就是用户以什么身份执行(例如root,或者oracle等)的列表
Runas_Alias ADMIN = operator1, operator2, operator3
注意:在定义别名的时候我们一般用大写。
通过别名定义的应用举例:
Host_Alias HOSTS = 192.168.0.0/16 Cmnd_Alias USERCMD = /usr/sbin/*, /sbin/*, !/usr/sbin/passwd, !/usr/sbin/userdel User_Alias USERADMIN = bols, cangls Runas_Alias ADMIN = root USERADMIN HOSTS=(ADMIN) USERCMD
这个定义的意思就是说用户bols,cangls可以在192.168.0.0/16这网段上以root用户的身份运行/usr/sbin/下的和/sbin/下的除了passwd和userdel这两个命令以外的所有命令。
注意:命令一定要使用绝对路径,以避免其他目录的同名命令被执行,从而造成安全隐患。
6、sudo的日志管理
sudo能够记录各用户都运行了哪些命令。但是这些需要对/etc/sudoers和/etc/rsyslog.conf文件进行适当的配置。具体操作如下:
首先日志系统配置文件最后增加如下:
[[email protected] ~]# vim /etc/rsyslog.conf local2.debug /var/log/sudo.log
然后使用visudo名令在/etc/sudoers文件最后增加如下:
Defaults logfile=/var/log/sudo.log
最后重启日志系统:
[[email protected] ~]# /etc/init.d/rsyslog restart
在普通用户使用sudo命令执行几条语句后查看sudo日志文件得到如下日志信息:
[[email protected] ~]# cat /var/log/sudo.log Aug 6 22:40:05 : bols : TTY=pts/2 ; PWD=/home/bols ; USER=root ; COMMAND=/usr/sbin/useradd longls Aug 6 22:40:41 : bols : TTY=pts/2 ; PWD=/home/bols ; USER=root ; COMMAND=/usr/sbin/useradd longls Aug 6 22:41:15 : bols : TTY=pts/2 ; PWD=/home/bols ; USER=root ; COMMAND=/usr/sbin/useradd xiaozels