当前位置: 首页 > 工具软件 > SUDO > 使用案例 >

Linux ❉ sudo 命令

戚阳文
2023-12-01

sudo,意为super user do,以超级用户身份执行命令。

目的是解决部分普通用户权限不够的问题。

[test2@localhost ~]$ tail -n 3 /etc/shadow
tail: cannot open ‘/etc/shadow’ for reading: Permission denied

工作原理

        一个用户能否使用 sudo 命令,取决于 /etc/sudoers 文件的设置。/etc/sudoers 是一个文本文件,因其有特定的语法,不能直接用 vim 或者 vi 来编辑它,需要用 visudo 这个命令。

        只有 root 用户有权限使用 visudo 命令。

[root@localhost ~]# visudo

······
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL

## Allows members of the 'sys' group to run networking, software,
## service management apps and more.
# %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS

## Allows people in group wheel to run all commands
%wheel  ALL=(ALL)       ALL

## Same thing without a password
# %wheel        ALL=(ALL)       NOPASSWD: ALL

## Allows members of the users group to mount and unmount the
## cdrom as root
# %users  ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom

## Allows members of the users group to shutdown this system
# %users  localhost=/sbin/shutdown -h now

## Read drop-in files from /etc/sudoers.d (the # here does not mean a comment)
#includedir /etc/sudoers.d
·····
  • 第一个表示用户名,如 root 、ubuntu 等;

  • 接下来等号左边的 ALL 表示允许从任何主机登录当前的用户账户;

  • 等号右边的 ALL 表示:这一行行首对一个的用户可以切换到系统中任何一个其它用户;

  • 行尾的 ALL 表示:当前行首的用户,能以 root 用户的身份下达什么命令,ALL 表示可以下达任何命令。

# test2执行查询shadow文件,提示权限不够
[test2@localhost ~]$ tail -f /etc/shadow
tail: cannot open ‘/etc/shadow’ for reading: Permission denied


# root下修改sudoer文件
[root@localhost ~]# visudo



#includedir /etc/sudoers.d
test2    ALL=(ALL)      NOPASSWD: ALL

# 切换test2用户,sudo执行之前的命令

[test2@localhost ~]$ sudo tail -f /etc/shadow
setroubleshoot:!!:18715::::::
gdm:!!:18715::::::
rpcuser:!!:18715::::::
nfsnobody:!!:18715::::::

技巧

[test2@localhost ~]$ sudo su -
[sudo] password for test2: 
[test2@localhost ~]$ sudo -i

这两种方式也能以 login-shell 的方式切换到 root 用户,但是它和 su - 方法是有区别的:

  • 前者输入 sudo su - / sudo -i 后,需要提供当前用户的登录密码,也就是test2用户的密码;

  • 后者输入 su - 后,需要提供 root 用户的登录密码。

安全

        如果一个用户在 /etc/sudoers 文件中,那么它就具有 sudo 权限,就能通过 sudo su - 或者 sudo -i 等命令切换到 root 用户了,那这时这个用户就变成 root 用户了,会对系统造成很大的威胁。所以如果在编辑 /etc/sudoers 文件赋予某种用户 sudo 权限时,必须要确定该用户是可信任的,不会对系统造成恶意破坏,否则将所有 root 权限都赋予该用户将会有非常大的危险。

        当然,root 用户也可以编辑 /etc/sudoers 使用户只具备一部分权限,即只能执行一小部分命令。

与su命令的差别

  • 使用 su - ,提供 root 账户的密码,可以切换到 root 用户;

  • 使用 sudo su - ,提供当前用户的密码,也可以切换到 root 用户

        两种方式的差异也显而易见:如果我们的 Linux 系统有很多用户需要使用的话,前者要求所有用户都知道 root 用户的密码,这显然是非常危险的;后者是不需要暴露 root 账户密码的,用户只需要输入自己的账户密码就可以,而且哪些用户可以切换到 root,这完全是受 root 控制的(root 通过设置 /etc/sudoers 实现的),这样系统就安全很多了

 类似资料: