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.