在这篇文章中,我们讨论了Linux中的sudo和su命令,这两个命令都是为用户分配权限,使他们能够执行某些命令。
目录:
- 简介
- 语法
- sudoers文件
- 密码超时
- sudo命令
- su命令
- 总结
- 参考文献
简介
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用户,我们使用*-l和U*选项,如下所示:
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切换到根用户,当我们处于超级用户模式时,我们执行的任何命令都将以高权限执行,没有停止命令,也没有密码提示,这可能是危险的,特别是当我们忘记切换回来时。
参考资料
- 执行man su或man sudo,查看其手册页面。
- 执行su --help或sudo --help。