su VS sudo

文章目录

背景

在实际工作当中需要在Linux不同用户之间进行切换。root用户权限最高,很多时候需要root用户才能执行一些关键命令或者访问一些关键资源,所以需要临时切换为root用户。工作完成后,考虑到系统的安全性避免误操作需要切换为普通用户。
su和sudo就是为了解决该问题内置的Linux命令。

su

switch user,切换用户

命令描述备注
su
su -m
切换到username用户下
输入该命令后,需要输入username用户的密码,才能切换到username
username用户名可以省略,默认是切换到root用户
non-login shell方式,即环境变量还是原用户的
su -
su -l
切换到username用户下
输入该命令后,需要输入username用户的密码,才能切换到username
username用户名可以省略,默认是切换到root用户
login shell方式,先以目标用户登录,再执行命令,是真正切换到了username用户下,环境变量也切换到了username用户
su -c “命令”-c参数表示以目标用户执行完后面命令之后又切换为原来本身用户

说明:su从普通用户切换到其他用户需要输入密码,但是从root用户切换到普通用户就不需要密码,root拥有最高权限;

缺点:su命令是需要知道切换目标用户的密码的。最常使用的场景就是切换到root用户,因为root用户拥有系统的最高权限,很容易误操作造成系统挂掉。一般情况下root密码尽可能要进行保密。

sudo

与su不同的是,sudo可以跳过切换目标用户登录而去执行一些特定命令,而且sudo仅需要自己的密码,而不需要切换目标用户的密码,而且sudo在输入一次密码后,在一段时间内都不需要再输密码了(系统配置)

命令描述备注
sudo 命令默认以root用户权限执行命令
需要输入自身的密码
sudo -u 命令
sudo - 命令
以user用户权限执行命令
需要输入自身的密码

可以发现如果不加控制,任何用户只要输入自己密码都能使用sudo命令以root用户的权限操作系统,这是很危险的,因此要对用户使用sudo命令做控制,在系统/etc/sudoers配置文件中就配置了用户使用sudo的权限:

developmac@DevelopdeMBP /tmp % sudo cat /etc/sudoers
developmac is not in the sudoers file.  This incident will be reported.
developmac@DevelopdeMBP /tmp % su - root
Password:
DevelopdeMBP:~ root# cat /etc/sudoers
......
root		ALL = (ALL) ALL
#%admin		ALL = (ALL) ALL
......

可以看到/etc/sudoers文件中只对root用户授予了使用sudo的权限,因此developmac用户使用sudo命令时报告错误,对developmac用户授予sudo权限后就可以使用sudo命令了

developmac@DevelopdeMBP /tmp % sudo cat /etc/sudoers
Password:
......
root		ALL = (ALL) ALL
#%admin		ALL = (ALL) ALL
developmac		ALL = (ALL) ALL
......

可以看到/etc/sudoers具体配置:

root		ALL = (ALL) ALL
#%admin		ALL = (ALL) ALL
developmac		ALL = (ALL) ALL
  1. 第2行#开头是注释
  2. 授权语法为:第一列root不用多说,是用户账号/授权用户第二列的ALL意思是登陆者的来源主机名第三列等号右边小括号里的ALL是代表能够切换的身份第四列ALL是可运行的命令
  3. 如果要对很多用户授权,对每个用户都加配置会很麻烦,/etc/sudoers也支持对组授权,如第2行%开头的就是授权组,%admin表示授权给admin组

几个授权示例:

#授权给wheel组的用户,使它们能以root身份执行passwd命令
%wheel ALL=(root) /usr/bin/passwd

#授权给developmac用户,使它能以root身份执行passwd命令,但是不能修改root用户的密码,!表示禁止
developmac ALL=(root) !/usr/bin/passwd,/usr/bin/passwd [A-Za-z]*,!/usr/bin/passwd root

#授权给developmac用户,使它能以root身份执行ls和passwd命令,NOPASSWD表示使用者不需要输入自己的密码就可以执行ls命令
developmac ALL=(root) NOPASSWD:/bin/ls,/usr/bin/passwd

/etc/sudoers配置还支持别名:

User_Alias:授权用户列表
Host_Alias:授权主机列表
Runas_Alias:授权登录用户列表
Cmnd_Alias:授权命令列表

如:

Host_Alias	CSNETS = 128.138.243.0, 128.138.204.0/24, 128.138.242.0
Host_Alias	SERVERS = master, mail, www, ns
Runas_Alias	OP = root, operator
User_Alias	FULLTIMERS = millert, mikef, dowdy
Cmnd_Alias	PAGERS = /usr/bin/more, /usr/bin/pg, /usr/bin/less

FULLTIMERS  CSNETS=(OP) PAGERS
FULLTIMERS  CSNETS=(root) PAGERS

sudo搭配su一起使用,修改配置文件/etc/sudoers

User_Alias ADMINS = user1, user2, user3
ADMINS ALL=(root) /bin/su -

这样用户user1,user2,user3就直接切换到root了。


关于修改/etc/sudoers配置文件:

可以通过vi/vim命令修改文件,最好的做法是通过visudo来修改。这个命令可以编辑保存的同时检查语法的正确性。这样可以避免由于误操作造成文件无法使用sudo命令。


总结

su方式切换是须要输入目标用户的password。而sudo仅仅须要输入自己的password,所以sudo能够保护目标用户的password不外流的。当帮root管理系统的时候,su是直接将root全部权利交给用户。而sudo能够更好分工,仅仅要配置好/etc/sudoers,这样sudo能够保护系统更安全,并且分工明白,有条不紊。


参考:
Linux中su和sudo的用法整理
linux权限之su和sudo的差别
Linux下su与su -命令的本质区别

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值