背景
在运行Linux系统时,通常不直接使用root用户。但是,当某些命令需要root权限才能执行时,通常是通过sudo命令提升当前用户的执行权限来完成的。
如果普通用户没有配置相应的配置开发版是不是root权限,在使用sudo命令时会提示“xxx不在sudoers文件中,会报这个事”。
本文将带你实践如何为普通用户配置sudo命令执行权限。
sudo 命令权限配置
sudo的英文全称是super user do,即以超级用户(root用户)的身份执行命令。用户是否具有sudo命令的执行权限,取决于是否在/etc/sudoers文件中设置。
/etc/sudoers 是具有特定语法的文本文件。不要使用 vim 或 vi 直接编辑它,而是使用 visudo 命令。需要注意的是,只有root用户才有执行该命令的权限。
切换到root用户,在命令行输入visudo,直接进入/etc/sudoers的编辑页面。
[root@iZ2zedonrtl5m2zsh6tr1xZ ~]# visudo
忽略其他配置信息,直接在底部查看如下信息:
# User privilege specification
root ALL=(ALL:ALL) ALL
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
# See sudoers(5) for more information on "#include" directives:
#includedir /etc/sudoers.d
ubuntu ALL=(ALL:ALL) NOPASSWD: ALL
解释以下每一列的含义:
●第一列代表用户名,如root、ubuntu等;
●第二列,等号左边的ALL表示允许当前用户账号从任意主机登录;
●第二列开发版是不是root权限,等号右边的ALL表示:第一列的用户可以切换到系统中的任何其他用户;
●第三列ALL表示第一列用户作为root用户可以发出什么命令,ALL表示可以发出任何命令。
●ubuntu 用户 第三列有NOPASSWD 关键字,表示ubuntu 用户在请求sudo 时不需要输入密码。
如果你的用户在切换,如果有“not in the sudoers file”的警告信息,那么检查对应的用户不应该在这个文件中配置,所以sudo命令不能使用。
参考ubuntu用户的配置,在/etc/sudoers文件中添加需要提升权限的用户(如test_user):
test_user ALL=(ALL:ALL) ALL # test_user 使用sudo需要提供test_user的密码
上面的配置在执行sudo的时候需要密码,那么就不需要密码了。配置方法如下:
test_user ALL=(ALL:ALL) NOPASSWD:ALL # test_user 使用sudo需要提供test_user的密码
添加后,esc退出编辑,执行:wq,退出保存。
此时切换到test_user用户,在执行需要root权限的命令时在前面加上sudo。
[test_user@iZ2zedonrtl5m2zsh6tr1xZ ~]$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
903734808a1e hello-world "/hello" About an hour ago Exited (0) About an hour ago
可以看到,现在sudo命令可以正常使用了。
概括
普通用户临时提升权限执行命令,只需要在/etc/sudoers文件中配置即可。网络上还有其他的配置方案,但是没有使用visudo命令,而是把/etc/sudoers文件彻底改了,再修改,最后把权限改回来。虽然可以实现同样的修改功能,但是太绕了。读过这篇文章的朋友,现在你已经解锁了新的更方便的命令。