sudo命令允许您以其他用户身份运行命令与程序,默认是root用户。如果您是个命令行用户,那么sudo是您将经常使用的命令之一。
使用sudo而不是以root用户身份登录会更安全,因为您可以为单个用户授予有限的管理权限,而无需让他们知道root用户密码。
sudo命令已预先安装在大多数Linux发行版中。要检查系统是否安装sudo命令,请使用快捷键ctrl+alt+t
打开终端台,键入sudo
,然后按Enter
。
安装 sudo
如果您的系统已安装sudo,系统将显示一条简短的帮助消息,否则您将看到类似sudo command not found
的信息。
如果你未安装sudo,则可以使用发行版的软件包管理器安装它,例如apt命令或者yum命令安装sudo。
如果你的计算机运行的是基于Debian的Linux发行版,例如Ubuntu,Linux mint,则可以运行命令sudo apt install sudo
安装sudo。
如果你的计算机运行的是基于RedHat的Linux发行版,例如CentOS,Fedora,则可以运行命令yum install sudo
安装sudo。
apt install sudo #for ubuntu and debian
yum install sudo #for CentOS and RedHat
sudo命令语法与选项
sudo
命令的基本语法是sudo OPTION.. COMMAND
。sudo
命令有用于控制其行为的选项,但通常sudo
都是以其最基本的形式使用,没有任何选项。
其中COMMAND
是您要运行的命令。sudo将读取/etc/sudoers
文件,并检查用户是否授予sudo的访问权限。
在第一次使用sudo时,系统会提示您输入当前用户密码,并且该命令将以root用户执行。
例如,要列出/root
目录中的所有文件,请运行命令sudo ls /root
。
sudo ls /root
[sudo] password for myfreax:
. .. .bashrc .cache .config .local .profile
密码超时
默认情况下,sudo闲置五分钟后,sudo会要求您再次输入密码。您可以通过编辑/etc/sudoers文件来更改默认超时。运行命令visudo
编辑/etc/sudoers。
添加行Defaults timestamp_timeout=10
来设置默认超时,其中是单位以分钟为单位指定的超时,这里设置为10分钟。
如果您只想仅为指定用户更改sudo的超时,请添加行Defaults:user_name timestamp_timeout=10
,其中user_name是用户名。
sudo visudo
Defaults timestamp_timeout=10
Defaults:user_name timestamp_timeout=10 #specify user
以非root用户运行命令
一直以来,大家有一个错误的认识,认为sudo
仅用于向普通用户提供root权限。
实际上,您可以使用sudo
以任何用户身份运行命令。-u
选项允许您以指定的用户运行命令。
在以下示例中,我们使用sudo命令以myfreax用户运行命令whoami。whoami命令将打印运行该命令的用户名称。
sudo -u myfreax whoami
sudo 重定向
如果您尝试将sudo命令的输出重定向到用户没有写权限的文件,则会收到权限拒绝的错误消息permission denied
。
例如命令sudo echo "test" > /root/file.txt
使用echo和重定向操作符>
,将标准输出重定向到/root/file.txt
文件。
你将会收到错误消息bash: /root/file.txt: Permission denied。之所以会这样,是因为标准输出的重定向>
是以您登录的用户而不是sudo指定的用户运行。
重定向在调用sudo
命令之前发生。一种解决方案是使用sudo sh -c
以root用户创建子shell进程运行命令。
另一种解决方是将普通用户的标准输出通过管道传递给到tee
命令。
sudo echo "test" > /root/file.txt
bash: /root/file.txt: Permission denied
sudo sh -c 'echo "test" > /root/file.txt'
echo "test" | sudo tee /root/file.txt
将用户添加到sudo组
默认情况下,在大多数Linux发行版中,授予sudo访问权限,就像将用户添加到用户组一样简单。
只需将用户添加到sudoers文件中定义的sudo组即可。该组的成员将能够以root用户身份运行任何命令。组的名称可能因发行版而异。
在基于RedHat的发行版,例如CentOS和Fedora,sudo组的名称是wheel
。要将用户添加到wheel组,请运行usermod命令usermod -aG wheel username
。
在Debian,Ubuntu及其衍生的Linux发行版,sudo组的成员被授予sudo访问权限。
sudo usermod -aG wheel username #for CentOS and Fedora
sudo usermod -aG sudo username #for Debian and Ubuntu
出于安全原因,Ubuntu中的root用户帐户默认情况下处于禁用状态,鼓励用户使用sudo执行系统管理任务。
在安装Ubuntu过程创建的初始用户已经是sudo组的成员,因此,如果您正在运行Ubuntu,您登录的用户很有可能已经是sudo组的成员。
如果需要知道自己是否存在于sudo组,可以运行命令groups | grep sudo
。以下groups和grep,管道组合的命令来验证当前用户是否存在于sudo组。
groups | grep sudo #for ubuntu and debian
groups | grep wheel #for centos and fedora
仅允许运行指定的命令
另一个典型示例是仅允许用户使用sudo运行指定的命令。例如,要仅允许用户使用sudo运行mkdir
命令创建目录和rmdir
命令删除目录。
myfreax ALL=(ALL) NOPASSWD:/bin/mkdir,/bin/rmdir
规则将允许用户在不输入密码,仅运行指定rmdir和mkdir命令。
sudo visudo
myfreax ALL=(ALL) NOPASSWD:/bin/mkdir,/bin/rmdir
结论
您已经学习了如何使用sudo
命令以及选项。包括如何使用sudo以其它用户运行命令,设置sudo超时,sudo与重定向,如何修改/etc/sudoer文件等。如果您有任何疑问,请随时发表评论。