SUDO
命令允许你以另一个用户(默认为root)的身份运行程序。如果您经常使用命令行,那么sudo是您将经常使用的命令之一。
使用sudo
代替以root
用户身份登录更安全,因为您可以向单个用户授予有限的管理特权,而无需他们知道root用户密码。
在本教程中,我们将说明如何使用sudo命令。
安装sudo(sudo command not found)
sudo软件包已预先安装在大多数Linux发行版中。
要检查系统上是否安装了sudo软件包,请打开控制台,键入sudo,然后按Enter。 如果您已安装sudo,系统将显示一条简短的帮助消息,否则您将看到未找到类似sudo命令的信息。
如果未安装sudo,则可以使用发行版的软件包管理器轻松安装它。
Ubuntu & Debian
apt install sudo
CentOS & Fedora
yum install sudo
添加用户为Sudoers
默认情况下,在大多数Linux发行版中,授予sudo访问权限就像将用户添加到sudoers文件中定义的sudo组一样简单。 该组的成员将能够以root用户身份运行任何命令。 该组的名称可能因分发版本的不同而有所异。
在基于RedHat的发行版(例如CentOS和Fedora)上,sudo组的名称为wheel。要将用户添加到组,请运行:
usermod -aG wheel username
在Debian,Ubuntu及其衍生产品上,sudo组的成员被授予sudo访问权限:
usermod -aG sudo username
出于安全原因,Ubuntu中的root用户帐户默认是禁用的,并且鼓励用户使用sudo执行系统管理任务。由Ubuntu安装程序创建的初始用户已经是sudo组的成员,因此,如果您正在运行Ubuntu,则很有可能已经以sudo权限授予您登录的用户身份。
如果要允许特定用户以sudo身份仅运行某些程序,则不要将用户添加到sudo组中,而是将用户添加到sudoers文件中。
例如,要允许用户linuxize以sudo的身份仅运行mkdir命令,请输入:
sudo visudo
并添加以下行:
linuxize ALL = /bin/mkdir
在大多数系统上,visudo
命令使用vim文本编辑器打开/etc/sudoers
文件。
您还可以允许用户在不输入密码的情况下运行sudo命令:
linuxize ALL=(ALL) NOPASSWD: ALL
如何使用Sudo命令
sudo命令的语法如下:
sudo OPTION.. COMMAND
sudo命令具有许多控制其行为的选项,但是sudo通常以其最基本的形式使用,没有任何选项。
要使用sudo,只需在命令前加上sudo:
sudo command
其中command是要使用sudo的命令。
Sudo将读取/etc/sudoers
文件,并检查调用用户是否被授予sudo访问权限。第一次在会话中使用sudo时,系统将提示您输入用户密码,并且该命令将以root用户身份执行。
例如,要列出/root
目录中的所有文件,请使用:
sudo ls /root
接下来会提示输入密码,密码正确则会执行对应命令。
密码超时
默认情况下,sudo会在闲置五分钟后要求您再次输入密码。您可以通过编辑sudoers文件来更改默认超时。使用visudo
打开文件:
sudo visudo
通过添加以下行来设置默认超时,其中10是以分钟为单位指定的超时:
Defaults timestamp_timeout=10
如果只想更改特定用户的时间戳,请添加以下行,其中user_name是需要指定的用户:
Defaults:user_name timestamp_timeout=10
以root用户以外的用户身份运行命令
有人错误地认为sudo仅用于向普通用户提供root权限。实际上,您可以使用sudo以任何用户身份运行命令。
-u
选项允许您以指定用户身份运行命令。
在以下示例中,我们使用sudo以用户“richard”的身份运行whoami命令:
sudo -u richard whoami
whoami
命令将显示运行该命令的用户的名称。
如何使用Sudo重定向
如果您尝试将命令的输出重定向到您的用户没有写权限的文件,则会出现“Permission denied”错误:
比如:
sudo echo "test" > /root/file.txt
输出:
bash: /root/file.txt: Permission denied
发生这种情况是因为输出的重定向“>”是在您登录的用户而不是sudo指定的用户下执行的。重定向在调用sudo命令之前发生。
一种解决方案是使用sudo sh -c
以root身份调用新的shell:
sudo sh -c 'echo "test" > /root/file.txt'
另一个选择是将普通用户的输出通过管道传递到tee命令,如下所示:
echo "test" | sudo tee /root/file.txt
结论
您已经了解了如何使用sudo命令以及如何使用sudo特权创建新用户。
参考文章: