sudo 命令允许您以另一个用户(默认为 root 用户)运行程序。如果您在命令行上花费大量时间,那么 sudo 是您经常使用的命令之一。
使用 sudo 而不是以 root 身份登录更安全,因为您可以向单个用户授予有限的管理权限,而无需他们知道 root 密码。
在本教程中,我们将解释如何使用sudo
命令。
安装 Sudo(未找到 sudo 命令)#
大多数 Linux 发行版上都预安装了 sudo 软件包。
要检查您的系统上是否安装了 sudo 软件包,请打开控制台,输入sudo
,然后按Enter
。如果你已经安装了sudo系统,将会显示一条简短的帮助信息。否则,你会看到类似的东西sudo command not found
.
如果未安装 sudo,您可以使用发行版的包管理器轻松安装它。
在 Ubuntu 和 Debian 上安装 Sudo#
apt install sudo
在 CentOS 和 Fedora 上安装 Sudo#
yum install sudo
将用户添加到 Sudoers#
默认情况下,在大多数 Linux 发行版上,授予 sudo 访问权限就像将用户添加到 sudo 组中定义的那样简单sudoers 文件。该组的成员将能够以 root 身份运行任何命令。组的名称可能因发行版而异。
在基于 RedHat 的发行版(例如 CentOS 和 Fedora)上,sudo 组的名称是wheel
. To 将用户添加到组中
, run:
usermod -aG wheel username
在 Debian、Ubuntu 及其衍生产品上,该小组的成员sudo
被授予 sudo 访问权限:
usermod -aG sudo username
The Ubuntu 中的 root 用户帐户出于安全原因默认禁用,并且鼓励用户使用 sudo 执行系统管理任务。 Ubuntu 安装程序创建的初始用户已经是 sudo 组的成员,因此如果您正在运行 Ubuntu,则您登录的用户很可能已被授予 sudo 权限。
要允许特定用户仅以 sudo 身份运行某些程序,请将用户添加到sudoers
file.
例如,允许用户linuxize
仅运行mkdir命令为 sudo,输入:
sudo visudo
并附加以下行:
在大多数系统上,visudo
命令打开/etc/sudoers
使用 vim 文本编辑器创建文件。如果您没有使用 vim 的经验,请查看我们的文章,了解如何使用保存文件并退出 vim 编辑器
.
您还可以允许用户运行 sudo 命令而不输入密码
:
linuxize ALL=(ALL) NOPASSWD: ALL
如何使用须藤#
语法为sudo
命令如下:
The sudo
命令有很多选择控制其行为,但通常,它以其最基本的形式使用,没有任何选项。
要使用 sudo,只需在命令前面加上前缀即可sudo
:
Where command
是您要使用 sudo 的命令。
须藤将阅读/etc/sudoers
文件并检查调用用户是否被授予 sudoassess 权限。第一次在会话中使用 sudo 时,系统会提示您输入用户密码,并且该命令将以 root 身份执行。
例如,列出目录中的所有文件/root
您将使用的目录:
[sudo] password for linuxize:
. .. .bashrc .cache .config .local .profile
密码超时#
默认情况下,sudo 将在 sudo 不活动五分钟后要求您再次输入密码。您可以通过编辑来更改默认超时sudoers
文件。打开文件visudo
:
通过添加下面的行来设置默认超时,其中10
是以分钟为单位指定的超时:
Defaults timestamp_timeout=10
如果您只想更改特定用户的时间戳,请添加以下行,其中 user_name 是相关用户。
Defaults:user_name timestamp_timeout=10
以 root 以外的用户身份运行命令#
有一种错误的认识是sudo
仅用于向普通用户提供 root 权限。实际上,你可以使用sudo
以任何用户身份运行命令。
The -u
选项允许您以指定用户身份运行命令。
在下面的示例中,我们使用sudo
运行whoami
以用户“richard”的身份执行命令:
sudo -u richard whoami
The whoami
命令将打印运行该命令的用户的名称:
richard
如何使用 Sudo 重定向#
如果您尝试将命令的输出重定向到您的用户没有写入权限的文件,您将收到“权限被拒绝”错误。
sudo echo "test" > /root/file.txt
bash: /root/file.txt: Permission denied
发生这种情况是因为重定向“>
” 的输出是在您登录的用户下执行的,而不是使用 sudo 指定的用户。重定向发生在sudo
命令被调用。
一种解决方案是使用 root 身份调用新 shellsudo sh -c
:
sudo sh -c 'echo "test" > /root/file.txt'
另一种选择是将普通用户的输出通过管道传输到发球命令, 如下所示:
echo "test" | sudo tee /root/file.txt
结论#
您已经学会了如何使用sudo
命令以及如何创建具有 sudo 权限的新用户。
如果您有任何疑问,请随时发表评论。