Linux权限控制之su与sudo的差别与sudo的配置

2019-06-02 17:50发布

su与sudo的差别

  • 在Linux系统中,当我们需要以普通用户身份执行某条系统命令时,通常会显示:Permission denied,这时需要通过su切换到root用户,或者使用sudo命令来执行该命令,如下:
xyzdeMacBook-Pro:linux xyz$ su - root
Password:
su: Sorry
xyzMacBook-Pro:linux xyz$ sudo visudo
Password:
  • su:该命令需要输入被切换到的用户的密码,如切换到root,则输入root的密码,然后切换到root用户的身份(当需要切换到root用户时,也可以直接执行su即可,可以不指定 - root)。所以这里需要知道root的密码(如果以root身份通过su - xx切换到xx用户则不需要输入密码),但是把root的密码告诉执行系统命令的所有人通常是不安全的,因为切换到root用户后可以对系统的所有文件进行任何操作。所以就产生了sudo命令,以当前用户的身份来执行系统命令,而不需要切换到root用户。
  • sudo:首先当前用户需要有执行sudo的权限,这个需要root用户在/etc/sudoers文件里面添加配置,具体配置方式后面再说。如果当前用户拥有通过sudo命令来执行系统命令,则一般需要输入当前用户的密码,如上所示,这个与通过su切换到root用户是不同的。所以通过sudo命令,可以以普通用户身份执行系统命令。
  • 如下:使用sudo命令执行su这个系统命令来切换到root目录,切换后可以直接执行visudo,当退出后则不行,需要通过sudo来执行。
xyzdeMacBook-Pro:sbin xyz$ sudo su - root
xyzdeMacBook-Pro:~ root# visudo
xyzdeMacBook-Pro:~ root# exit
logout
xyzdeMacBook-Pro:sbin xyz$ visudo
visudo: /etc/sudoers: Permission denied
xyzdeMacBook-Pro:sbin xyz$ sudo visudo

sudo权限配置

  • 默认通过useradd命令,新添加的普通用户是没有sudo权限的,而需要使用root身份登录或者有执行sudo命令权限的用户,然后编辑/etc/sudoers文件来添加,可以通过visudo命令来打开这个文件并编辑,这样除了不需要指定具体/etc/sudoers文件位置外,还有个好处是可以检查修改是否存在语法错误:
xyzdeMacBook-Pro:linux xyz$ sudo visudo
# 打开之后,定位到以下内容:
# root and users in group wheel can run anything on any machine as any user
root ALL = (ALL) ALL
%admin ALL = (ALL) ALL
  • 然后拷贝:rootALL = (ALL) ALL,并修改root为你需要添加的普通用户的名字,如下:这样xyz这个用户就可以执行所有的系统命令了,相当于root,其中三个ALL从左到右依次表示:xyz这个用户,可以在任何地方host(第一个ALL)登陆;执行任何人(第二个ALL)的任何命令(第三个ALL)。
# root and users in group wheel can run anything on any machine as any user
root ALL = (ALL) ALL
%admin ALL = (ALL) ALL
xyz ALL = (ALL) ALL
  • 通常可以修改第三个ALL来限制当前用户可以执行的命令,如下:
xyz ALL = (ALL) /sbin/reboot, /sbin/umount
  • 按照以上配置,xyz这个用户每次在执行sudo时都需要输入自己的密码,也配置不需要输入密码,如下使用NOPASSWD来配置:
xyz ALL = (ALL) NOPASSWD:ALL
  • 注意到上面还有一个%admin配置,这个表示属于admin这个组的用户都可以执行sudo命令,所以通常在一个Mac电脑中,默认当前用户不需要配置就可以执行sudo,因为当前用户输入admin组,具体可以通过groups命令来查看当前用户所属的组:
xyzdeMacBook-Pro:sbin xyz$ groups
staff access_bpf everyone localaccounts _appserverusr admin _appserveradm _lpadmin com.apple.sharepoint.group.1 _appstore _lpoperator _developer _analyticsusers com.apple.access_ftp com.apple.access_screensharing com.apple.access_ssh
文章来源: https://www.toutiao.com/group/6697751432906408462/