Linux Su和sudo命令不同

2013-05-20   来源:站长日记       编辑:沧海桑田   类别:服务器    转载到:    发表评论

linux 切换用户身份

linux su和sudo命令不同

下例中 linuxsir 为普通用户
一. su 命令临时切换用户身份
以linuxsir登录,可要执行的任务需要root权限,
一是退出linuxsir,重新以root用户登录,但这不是个好办法;
二是不退出linuxsir,用su切换到root下进行工作,任务完成后再退出root回到普通用户权限
普通用户切换到其它任何用户都需要密码验证;

su 的用法
su [OPTION选项参数] [用户]
-, -l, ——login 登录并改变到所切换的用户环境;
-c, ——commmand=COMMAND 执行一个命令,然后退出所切换到的用户环境;
详细参看man su


su 的范例
su 无参数时默认为切换到root,但不转到root用户家目录下,没有改变root登录环境;用户默认的登录环境,可以在/etc/passwd 中查得到,包括家目录,SHELL定义等;
[ 命令pwd 是用来查看用户当前所处的位置的 Print Working Directory 此命令显示出当前工作目录的绝对路径 ]

$ su
Password:
# pwd
/home/commonUser

su 加参数 - ,表示默认切换到root用户,并且改变到root用户的环境;

$ pwd
/home/commonUser

$ su -
Password:
# pwd
/root

su 参数 - 用户名
$ su - root
Password:
# pwd
/root

[切换到 linuxsir用户]
$ su - linuxsir
Password:

$ pwd
/home/linuxsir

[ 使用id命令查看用户的UID和GID信息,主要是看是否切换过来了]
$ id
uid=505(linuxsir) gid=502(linuxsir) groups=0(root),500(linuxsir ),502(linuxsir)

[下面这条命令是su的参数组合,切换到root用户,且改变到root环境,列出root家目录的文件,然后退出root用户]
$ su - -c ls
Password:
anaconda-ks.cfg  install.log.syslog  lnmp     vhost.sh install.log      iptables.txt        tar.txt

$pwd
/home/commonUser

su的优缺点

su 要把root密码交给普通用户不安全;
如系统有10个用户都参与管理,想想Windows简直就是恶梦;“没有不安全的系统,只有不安全的人”,不能保证这 10个用户都能按正常操作流程来管理系统,其中任何一人对系统操作的重大失误,都可能导致系统崩溃或数据损失;
su适用于一两个人参与管理的系统;超级用户root密码应该由负责人管理!


二. sudo 授权许可使用的su,是受限制的su

sudo 的适用条件
针对每个管理员的技术特长和管理范围,有针对性的下放给权限,约定其使用工具来完成与其相关的工作,就要用到 sudo

sudo能把某些超级权限有针对性的下放,不需要普通用户知道root密码,相对于权限无限制性的su来说比较安全。
sudo是需要授权许可的,也被称为授权许可的su;

sudo 流程是当前用户切换到root(或其它指定切换到的用户),以root(或其它指定的切换到的用户)身份执行命令,执行完成后,直接退回到当前用户;前提是要通过sudo的配置文件/etc/sudoers来进行授权;

比如我们想用linuxsir通过more /etc/shadow文件的内容
$ more /etc/shadow
系统提示 /etc/shadow: Permission denied
就是没有权限,如果在/etc/soduers有授权的话,可用sudo more /etc/shadow 来读取文件的内容;

以root运行visudo命令 来改/etc/sudoers

$ su
Password: 注:在这里输入root密码

下面运行visodu [visudo也是用的vi编辑器]
# visudo
##下面这句 表示linuxsir可以切换到root下执行more 来查看文件
linuxsir ALL=/bin/more

退回到linuxsir下,用exit命令;
# exit

查看linuxsir通过sudo能执行哪些命令?
$ sudo -l
Password: 注:在这里输入linuxsir的密码

[sudo] password for linuxsir:
Sorry, user linuxsir may not run sudo on miniserver.
这是没有在/etc/sudoers授权的结果


User linuxsir  may run the following commands on this host:
这里说明在本台主机上,linuxsir可以以root权限运行more,root权限的more ,可以查看任何文本文件的内容;
(root) /bin/more

linuxsir是不是有能力看到/etc/shadow文件的内容
$ sudo more /etc/shadow
linuxsir  不但能看到 /etc/shadow文件的内容,还能看到只有root权限下才能看到的其它文件的内容,比如;
$ sudo more /etc/gshadow
对于linuxsir查看和读取所有系统文件中,只想把/etc/shadow 的内容可以让他查看;可以加入下面的一行;
linuxsir  ALL=/bin/more /etc/shadow

实例五:练习用户组在/etc/sudoers中写法;

如果用户组出现在/etc/sudoers 中,前面要加%号,比如%linuxsir  ,中间不能有空格;%linuxsir  ALL=/usr/sbin/*,/sbin/*

如果我们在 /etc/sudoers 中加上如上一行,表示linuxsir组下的所有成员,在所有可能的出现的主机名下,都能切换到root用户下运行 /usr/sbin和/sbin目录下的所有命令;

实例六:练习取消某类程序的执行:

取消程序某类程序的执行,要在命令动作前面加上!号; 在本例中也出现了通配符的*的用法;
让linuxsir在所有可能存在的主机名的主机上运行/usr/sbin和/sbin下所有的程序,但fdisk 程序除外,
[有 linuxsir 用户组,linuxsir组中有linuxsir这个用户,在/etc/sudoers中加如下规则]
linuxsir  ALL=/usr/sbin/*,/sbin/*,!/usr/sbin/fdisk

然后测试
$ sudo -l
Password: 注:在这里输入linuxsir的密码;
User linuxsir  may run the following commands on this host:(root) /usr/sbin/*(root) /sbin/*(root) !/sbin/fdisk

然后测试
$ sudo /sbin/fdisk -l
Sorry, user linuxsir  is not allowed to execute '/sbin/fdisk -l' as root on localhost.

15

1
15|1 | 鲜花 VS 砸蛋 | 65阅读 0评论