Linux sudo命令
sudo命令" title="sudo命令">sudo命令允许您以其他用户身份与权限运行程序,默认情况下为root用户。如果您在命令行上花费大量时间,那么sudo是您将经常使用的命令之一。
使用sudo而不是以root用户身份登录会更安全,因为您可以为单个用户授予有限的管理权限,而无需让他们知道root用户密码。
在本教程中,我们将说明如何使用sudo
命令以及选项。这其中包括安装Sudo,将用户添加到sudo组中或者/etc/sudoers文件,仅允许用户使用sudo运行指定的命令,使用sudo以非root身份执行命令,配置sudo的密码超时,以及如何在重定向中使用sudo等。
安装Sudo
sudo命令已预先安装在大多数Linux发行版中。要检查系统上是否安装了sudo命令,请打开终端台,键入sudo
,然后按Enter
。如果您已安装sudo,系统将显示一条简短的帮助消息,否则您将看到类似sudo command not found
的信息。
如果你未安装sudo,则可以使用发行版的软件包管理器安装它,例如apt命令或者yum命令安装sudo。
在Ubuntu和Debian上安装Sudo
sudo apt install sudo
在CentOS和Fedora上安装Sudo
yum install sudo
将用户添加到sudo组中
默认情况下,在大多数Linux发行版中,授予sudo访问权限,就像将用户添加到用户组一样简单。只需将用户添加到sudoers
文件中定义的sudo组即可。该组的成员将能够以root用户身份运行任何命令。该组的名称可能因发行而异。
在基于RedHat的发行版,例如CentOS和Fedora上,sudo组的名称是wheel
。要将用户添加到wheel组,请以下usermod命令运行:
usermod -aG wheel username
在Debian,Ubuntu及其衍生的Linux发行版上,sudo
组的成员被授予sudo访问权限:
usermod -aG sudo username
出于安全原因,Ubuntu中的root用户帐户默认情况下处于禁用状态,鼓励用户使用sudo执行系统管理任务。在安装Ubuntu过程创建的初始用户已经是sudo组的成员,因此,如果您正在运行Ubuntu,您登录的用户很有可能已经是sudo组的用户。
如果需要知道自己是否存在于sudo组,可以运行以下groups和grep,管道组合的命令来验证当前用户是否存在于sudo组:
groups | grep sudo
仅允许以sudo运行指定命令
如果要仅允许用户以sudo身份运行指定的命令或者程序,则不要将用户添加到sudo组中,而是将用户添加到sudoers
文件中。例如,仅允许用户myfreax
以sudo运行mkdir
命令。
换句话说,就是myfreax这个用户在使用sudo执行的命令就只有mkdir命令可以使用。为此我们需要编辑/etc/sudoers
文件。在大多数系统上,visudo
命令使用vim文本编辑器打开文件/etc/sudoers
。如果您没有使用vim的经验,请查看我们的vim教程。
请输入以下visudo命令,它将会使用vim编辑器打开文件/etc/sudoers
:
sudo visudo
并添加以下行:
myfreax ALL=/bin/mkdir
保存文件并退出vim编辑器。您还可以允许用户不用输入密码即可运行sudo命令:
myfreax ALL=(ALL) NOPASSWD: ALL
使用Sudo
sudo
命令的语法如下:
sudo OPTION.. COMMAND
sudo
命令有用于控制其行为的选项,但通常sudo
以其最基本的形式使用,没有任何选项。要使用sudo,只需在命令前加上sudo
:
sudo command
其中command
是您要执行的命令。sudo将读取/etc/sudoers
文件,并检查调用用户是否授予sudo的访问权限。在第一次使用sudo时,系统会提示您输入当前用户密码,并且该命令将以root用户执行。例如,要列出/root
目录中的所有文件,请使用:
sudo ls /root
[sudo] password for myfreax:. .. .bashrc .cache .config .local .profile
密码超时
默认情况下,sudo闲置五分钟后,sudo会要求您再次输入密码。您可以通过编辑sudoers
文件来更改默认超时。用visudo
打开文件:
sudo visudo
通过添加以下行来设置默认超时,其中10
是以分钟为单位指定的超时:
Defaults timestamp_timeout=10
如果您只想为特定用户更改sudo超时,请添加以下行,其中user_name是用户名。
Defaults:user_name timestamp_timeout=10
以其它用户身份运行命令
一直以来,大家有一个错误的认识,认为sudo
仅用于向普通用户提供root权限。实际上,您可以使用sudo
以任何用户身份运行命令。-u
选项允许您以指定用户的身份运行命令。
在以下示例中,我们使用sudo
以“richard”用户身份运行whoami
命令:
sudo -u richard whoami
whoami
命令将打印运行该命令的用户的名称:
richard
如何使用sudo重定向
如果您尝试将sudo命令的输出重定向到用户没有写权限的文件,则会收到permission denied
错误。例如以下命令使用echo命令和重定向操作符>
,将标准输出重定向到/root/file.txt
文件。
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的选项。包括如何使用sudo以其它用户身份执行命令,设置sudo超时,sudo与重定向,如何修改/etc/sudoer文件等。如果您有任何疑问,请随时发表评论。
以上是 Linux sudo命令 的全部内容, 来源链接: utcz.com/z/507352.html