转载请注明,文章来源:http://blog.youkuaiyun.com/redhat7890
什么是授权?
什么是su?什么是sudo?
su命令就是切换用户的工具,通过su可以在用户之间切换,如果超级权限用户root向普通或虚拟用户切换不需要密码
su 的用法:
su [OPTION选项参数] [用户]
-, -l, --login 登录并改变到所切换的用户环境;
-c, --commmand=COMMAND 执行一个命令,然后退出所切换到的用户环境;
至于更详细的,请参看man su ;
su 的范例:
su 在不加任何参数,默认为切换到root用户,但没有转到root用户家目录下,也就是说这时虽然是切换为root用户了,但并没有改变root登录环境;用户默认的登录环境,可以在/etc/passwd 中查得到,包括家目录,SHELL定义等;
<ccid_nobr></ccid_nobr>
<ccid_code>[beinan@localhost ~] $ su |
su 加参数 - ,表示默认切换到root用户,并且改变到root用户的环境;
<ccid_nobr></ccid_nobr>
<ccid_code>[beinan@localhost ~] $ pwd |
su 参数 - 用户名
[beinan@localhost ~] $ su - root 注:这个和su - 是一样的功能;
Password:
[root@localhost ~]# pwd
/root
[beinan@localhost ~] $ su - linuxsir 注:这是切换到 linuxsir用户
Password: 注:在这里输入密码;
[linuxsir@localhost ~] $ pwd 注:查看用户当前所处的位置;
/home/linuxsir
[linuxsir@localhost ~] $ id 注:查看用户的UID和GID信息,主要是看是否切换过来了;
uid=505(linuxsir) gid=502(linuxsir) groups=0(root),500(beinan),502(linuxsir)
[linuxsir@localhost ~] $
[beinan@localhost ~] $ su - -c ls 注:这是su的参数组合,表示切换到root用户,并且改变到root环境,然后列出root家目录的文件,然后退出root用户;
Password: 注:在这里输入root的密码;
anaconda-ks.cfg Desktop install.log install.log.syslog testgroup testgroupbeinan testgrouproot
[beinan@localhost ~] $ pwd 注:查看当前用户所处的位置;
/home/beinan
[beinan@localhost ~] $ id 注:查看当前用户信息;
uid=500(beinan) gid=500(beinan) groups=500(beinan)
su的优缺点;
su 的确为管理带来方便,通过切换到root下,能完成所有系统管理工具,只要把root的密码交给任何一个普通用户,他都能切换到root来完成所有的系统 管理工作;但通过su切换到root后,也有不安全因素;比如系统有10个用户,而且都参与管理。如果这10个用户都涉及到超级权限的运用,做为管理员如 果想让其它用户通过su来切换到超级权限的root,必须把root权限密码都告诉这10个用户;如果这10个用户都有root权限,通过root权限可 以做任何事,这在一定程度上就对系统的安全造成了威协;想想Windows吧,简直就是恶梦;“没有不安全的系统,只有不安全的人”,我们绝对不能保证这 10个用户都能按正常操作流程来管理系统,其中任何一人对系统操作的重大失误,都可能导致系统崩溃或数据损失;所以su 工具在多人参与的系统管理中,并不是最好的选择,su只适用于一两个人参与管理的系统,毕竟su并不能让普通用户受限的使用;超级用户root密码应该掌 握在少数用户手中,这绝对是真理!所以集权而治的存在还是有一定道理的;
sudo 授权许可使用的su,也是受限制的su
sudo 的适用条件
由于su 对切换到超级权限用户root后,权限的无限制性,所以su并不能担任多个管理员所管理的系统。如果用su 来切换到超级用户来管理系统,也不能明确哪些工作是由哪个管理员进行的操作。特别是对于服务器的管理有多人参与管理时,最好是针对每个管理员的技术特长和 管理范围,并且有针对性的下放给权限,并且约定其使用哪些工具来完成与其相关的工作,这时我们就有必要用到 sudo。
通过sudo,我们能把某些超级权限有针对性的下放,并且不需要普通用户知道root密码,所以sudo 相对于权限无限制性的su来说,还是比较安全的,所以sudo 也能被称为受限制的su ;另外sudo 是需要授权许可的,所以也被称为授权许可的su;
sudo 执行命令的流程是当前用户切换到root(或其它指定切换到的用户),然后以root(或其它指定的切换到的用户)身份执行命令,执行完成后,直接退回到当前用户;而这些的前提是要通过sudo的配置文件/etc/sudoers来进行授权;
在前段时间对于Aisanux server 3操作系统中对于保密安全性方面的研究中,关于身份鉴别的功能有一些感受,关于某个用户授权,作为root用户,我们有权利赋予其他用户各种各样的权限,比如,我只想让test1用户可以执行部分命令的操作,部分服务的启动。举例子:
例子1:
#useradd test
#passwd test
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
#useradd test2
#passwd test2
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
新建了两个用户,这两个用户都没有授权,那么我们试一下,分别使用这两个用户登录,我的都能进行什么操作。
1,可以使用test 和test2用户创建其他用户呢?
#su - test
passwd:
$ sudo /usr/sbin/useradd Tom
test is not in the sudoers file.This incident will be reported.
$su -root
passwd:
#su - test2
$sudo /usr/sbin/useradd Tom
test is not in the sudoers file.This incident will be reported.
这两个没有授权的用户都无法创建新用户
2.我们对test2授权,使其可以有权创建用户,授权格式为:
授权用户 主机=命令动作
这三个要素缺一不可,但在动作之前也可以指定切换到特定用户下,在这里指定切换的用户要用( )号括起来,如果不需要密码直接运行命令的,应该加NOPASSWD:参数,但这些可以省略;
#vim /etc/sudoers
在##Allow root to run any commands anywhere这一行下面添加
test2 ALL = ( ALL ) /usr/sbin/useradd
现在test2具备创建新用户的权限了,验证下:
#su - test2
passwd:
$sudo /usr/sbin/useradd Tom
$su - root
passwd:
#vim /etc/passwd
可以看到Tom用户已经添加成功。关于对test2的授权是有效的,我们现在只是授权它可以添加用户,同样的道理我们将删除用户的职能授权给它,在此,不再重复。
3.对于命令和服务的授权是否可以呢?继续验证,最简单的就是启动网络服务,我们还是针对test2用户进行,将test2和test比较。
#su - test
passwd:
$sudo /etc/init.d/network restart
passwd:
test is not int the sudoers file.This incident will be reported.
显然test用户无权启动网络服务,那么我们修改/etc/sudoers文件,我们赋予test2用户权限,使其能够启动network服务。
#vim /etc/sudoers
添加网络服务的授权,添加后为:
test2 AL = (ALL) /usr/sbin/useradd , /etc/init.d/network
我们再使用test2用户开启网络服务,步骤如下。
#su - test2
passwd:
$sudo /etc/init.d/network restart
passwd:
正在关闭接口:eth0 [确定]
关闭环回接口: [确定]
弹出环回接口: [确定]
弹出界面 eth0: [确定]
检验证明,被授权的用户有权限进行授权范围内的操作,所以对于linux系统来说,它就是最安全的操作系统。