linux中su与sudo的区别与联系


前言

su与sudo都是linux系统中用于切换使用者身份的工具,本文将记录这二者间的区别。


一、su

直接看范例!!!

# 范例一 root用户切换到普通用户,不需要输入密码
root@ubuntu:/home# su - study
study@ubuntu:~$

# 范例二 普通用户切换到root用户,需要输入root用户密码
study@ubuntu:~$ su -
Password:				# 输入root用户密码
root@ubuntu:~#

# 范例三 普通用户切换到另一个普通用户,需要输入新用户的密码
study@ubuntu:~$ su -l test
Password:				# 输入test用户密码
test@ubuntu:~$

切换用户时,输入的密码是新用户的密码,而不是当前用户的密码。

如果当前用户是root用户,切换成其他用户不需要输入新用户的密码。

缺点也很明显,当我的主机是多人共管的环境时,如果大家都使用 su 来切换成 root 的身份,那么不就每个人都要知道 root 的密码了,这样密码太多人知道可能就泄露出去了,很不好!这时,sudo“粉墨登场”了。

二、sudo

sudo 的作用主要是,让某个程序暂时获得 root 权限,这样,这个程序就有权限去操作一些普通用户本没法操作的文件。举个例子,tail 程序读 /etc/shadow 文件,正常情况下普通用户是无法读文件的,因为 /etc/shadow 的权限为 【-rw-r----- 1 root shadow】,对其他用户关闭所有权限。

然而,我们有两种方法可以让普通用户读到 /etc/shadow 文件。

其一,就是借助SUID权限,为 tail 程序权限添加s权限,这样普通用户执行 tail 程序时将暂时获得root权限,那么它自然能读 /etc/shadow 文件。更多SUID特殊权限的介绍可参考linux文件特殊权限。不过我们一般不会这么做,因为为 /etc/shadow 文件添加s权限需要借助root权限,并且像 /etc/shadow 这类文件对普通用户公开对系统不安全。

而另一种方法,就是这里讲的sudo,采用 [sudo tail -n 10 /etc/shadow] 这个命令,输入普通用户账号密码后即可读取到文件了。当执行sudo时,系统会去读取 /etc/sudoers 文件,查看当前用户是否是可信任的,如果是可信任的,系统提示输入自己账号的密码,验证密码正确后,普通用户将暂时获得root权限,这样普通用户也就能读取 /etc/shadow 了!

所以,也并不是所有用户 sudo 都能起作用的,root 信任的才会有效的。

sudo 让我们只需输入自己账号的密码以暂时获得root权限,假如此时执行[ su - ]命令,会发生什么呢?是的,不用输入root的密码即可直接登录到root了。这就是 [sudo su -] 这条命令啦!

# 范例一 sudo tail -n 1 /etc/shadow
# 查看/etc/shadow文件权限
test@ubuntu:~$ ls -l /etc/shadow
-rw-r----- 1 root shadow 1617 119 20:54 /etc/shadow				# 显示其他用户没有权限

# 查找tail程序所在位置
test@ubuntu:~$ whereis tail
tail: /usr/bin/tail /usr/share/man/man1/tail.1.gz

# 查询tail程序权限
test@ubuntu:~$ ls -l /usr/bin/tail
-rwxr-xr-x 1 root root 67452 33  2017 /usr/bin/tail			# 显示其他用户有执行权限,不过该程序没有SUID权限

# 以test普通用户读/etc/shadow文件
test@ubuntu:~$ tail -n 1 /etc/shadow
tail: cannot open '/etc/shadow' for reading: Permission denied		# 显示没权限

# 用sudo读
test@ubuntu:~$ sudo tail -n 1 /etc/shadow
[sudo] password for test:
test is not in the sudoers file.  This incident will be reported.	# 提示test没有在sudoers file,也就是说目前test没有取得root信任

# 将test用户添加到root信任里
root@ubuntu:~$ visudo			# 注意要切换到root账号执行命令,visudo修改的就是/etc/sudoers文件,具体修改方法这里不展开了

# 再次sudo读,读取成功
test@ubuntu:~$ sudo tail -n 1 /etc/shadow
[sudo] password for test:		# 输入test账户密码
xxxxxxxxxxxxxxxxxxxx

# --------------------------------------------------------------------------

# 范例二 sudo结合su切换到root账号
test@ubuntu:~$ sudo su -	
[sudo] password for test:		# 输入test账户密码
root@ubuntu:~#

总结

su 用于在shell上切换用户,而 sudo 主要用于让普通用户在执行某些程序时暂时获得root权限。
su 在切换到root时输入的是root的密码,而sudo在请求root权限的时候是用的普通用户的密码。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值