Linux系统中的Sudo命令
sudo命令允许你以另一个用户的身份运行程序,默认是根用户。如果你花很多时间在命令行上,sudo是你会经常使用的命令之一。
使用sudo而不是以root身份登录更安全,因为你可以在不知道root密码的情况下,授予个别用户有限的管理权限。
在本教程中,我们将解释如何使用sudo
命令。
安装Sudo(未找到sudo命令)
sudo软件包已经预装在大多数Linux发行版上了。
要检查你的系统是否安装了sudo软件包,请打开你的控制台,输入sudo
,然后按Enter
。如果你的系统安装了sudo,将显示一个简短的帮助信息。否则,你会看到类似sudo command not found
的内容。
如果没有安装sudo,你可以使用你的发行版的软件包管理器很容易地安装它。
在Ubuntu和Debian上安装Sudo软件
apt install sudo
在CentOS和Fedora上安装Sudo系统
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
文件。如果你没有使用vim的经验,请查看我们关于如何保存文件和退出vim编辑器的文章 。
您还可以允许用户在不输入密码的情况下运行sudo命令 :
linuxize ALL=(ALL) NOPASSWD: ALL
如何使用Sudo
sudo
命令的句法如下:
sudo OPTION.. COMMAND
sudo
命令有许多选项来控制它的行为,但通常情况下,它是以最基本的形式使用的,没有任何选项。
要使用sudo,只需在命令前加上sudo
的字样:
sudo command
其中command
是你想使用sudo的命令。
Sudo将读取/etc/sudoers
文件,并检查调用的用户是否被授予sudo评估。第一次在会话中使用sudo时,会提示你输入用户密码,并且命令将以root身份执行。
例如,要列出/root
目录下的所有文件,你可以使用:
sudo ls /root
输出
[sudo] password for linuxize:
. .. .bashrc .cache .config .local .profile
密码超时
默认情况下,sudo会在sudo不活动5分钟后要求你再次输入密码。你可以通过编辑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
命令将打印出运行该命令的用户的名字:
输出
richard
如何用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权限的新用户。
如果你有任何问题,请随时留言。