Linux中的sudo和su命令(详细指南)

545 阅读4分钟

在这篇文章中,我们讨论了Linux中的sudo和su命令,这两个命令都是为用户分配权限,使他们能够执行某些命令。

目录:

  1. 简介
  2. 语法
  3. sudoers文件
  4. 密码超时
  5. sudo命令
  6. su命令
  7. 总结
  8. 参考文献

简介

sudo命令允许拥有适当权限的用户作为具有管理权限的root用户执行命令。

su命令允许用户以另一个用户的权限执行命令。
通过它,我们可以在不注销当前会话的情况下切换账户。

sudo允许一次性访问,而su允许无限次访问。

语法

sudo命令的语法如下:

sudo [OPTION] COMMAND

没有任何选项的基本形式如下:

sudo command

当上述命令被执行时,sudo检查sudoers文件,以检查调用该命令的用户是否有权限。

su命令的语法如下:

su [OPTIONS] [USERNAME [ARGUMENTS...]]

su常用的选项包括:

  • -c, --command COMMAND, 以指定的用户身份运行一个特定的命令。
  • -l, --login USERNAME, 运行一个登录脚本,以便改变为一个特定的用户。
  • -s, --shell SHELL, 指定一个不同的外壳。
  • -p, --preserve-environment, 用于保留当前的shell环境。

sudoers文件

该文件位于/etc/sudoer。在
sudoers文件中定义的sudo
组的成员有管理权限,能够作为根用户执行任何命令。

要将一个用户添加到这个组,我们要写:

usermod -aG sudo username

我们还可以通过编辑这个文件来限制一个用户可以以sudo身份执行的程序。
一个例子

为了让一个用户john只能以sudo身份执行chmod命令,我们编辑文件如下:

sudo visudo

然后添加这一行:

john = ALL=/bin/mkdir

为了允许john在没有密码提示的情况下执行sudo命令,我们编辑文件如下:

john ALL=(ALL) NOPASSWD: ALL

密码超时

在调用sudo时输入密码后,默认情况下,在任何其他sudo用户命令再次要求输入密码之前,超时被设置为5分钟。

我们可以通过编辑sudoers文件来改变这一点,如下所示:

sudo visudo

改变默认超时:

Defaults timestamp_timeout=10

要改变一个用户的超时,我们要写:

Defaults:john time_stamp=10

Sudo现在要等10分钟后才会再次提示输入密码。

sudo命令

诸如编辑重要文件、更新系统、重启系统等任务需要提升权限。

一个例子

一个普通用户不能重启系统,因此用户需要通过使用sudo来提升他/她的权限:

sudo reboot

只要我们有root权限,我们也可以以其他用户的身份运行一个命令。
一个例子

sudo -u john rm -rf Documents

上面的命令以用户john的身份删除了Documents目录。

为了检查某个用户是否是sudo用户,我们使用*-lU*选项,如下所示:

sudo -l -U john

su命令

要调用它,我们写:

su

之后,我们会被提示输入密码,当密码被验证后,当前用户将拥有提升的权限,现在可以以root身份运行命令,而不会再被提示输入密码,这意味着从现在开始我们应该小心我们执行的命令,因为已经没有回头路了。

我们可以使用whoami命令来查看当前用户。

要把登录的用户切换到另一个用户john我们写:

su -l john

我们也可以通过写,以不同的用户身份运行命令:

su -c rm -rf ~/Documents john

上面的命令将用户切换为john,并删除了Documents目录。

要改变shell,我们使用*-s*选项:

su -s /usr/bin/zsh

该命令将当前的shell改为Z shell。

总结

sudo命令给予用户执行命令的高权限,它可以让用户只运行具有root权限的指定命令。

su允许一个人暂时成为另一个用户,并作为该用户执行命令,默认情况下会切换到用户。

Sudo是一个更好的方法,它比su(switch user)切换用户更安全,假设我们使用su切换到根用户,当我们处于超级用户模式时,我们执行的任何命令都将以高权限执行,没有停止命令,也没有密码提示,这可能是危险的,特别是当我们忘记切换回来时。

参考资料

  1. 执行man suman sudo,查看其手册页面。
  2. 执行su --helpsudo --help