在linux中,root用户具有一切事物的管理权限。但对于普通用户来说就没有那么容易了,普通用户需要操作不具备权限的命令时,除了切换到root用户,还有一个方法,那就是sudo
。
介绍
在sudo于1980年前后被写出之前,一般用户管理系统的方式是利用su切换为超级用户。但是使用su的缺点之一在于必须要先告知超级用户的密码。
sudo使一般用户不需要知道超级用户的密码即可获得权限。首先超级用户将普通用户的名字、可以执行的特定命令、按照哪种用户或用户组的身份执行等信息,登记在特殊的文件中(通常是/etc/sudoers),即完成对该用户的授权(此时该用户称为“sudoer”);在一般用户需要取得特殊权限时,其可在命令前加上“sudo”,此时sudo将会询问该用户自己的密码(以确认终端机前的是该用户本人),回答后系统即会将该命令的进程以超级用户的权限运行。之后的一段时间内(默认为5分钟,可在/etc/sudoers自定义),使用sudo不需要再次输入密码。
由于不需要超级用户的密码,部分Unix系统甚至利用sudo使一般用户取代超级用户作为管理帐号,例如Ubuntu、Mac OS X等。
使用
root用户可在路径/etc/sudoers.d/
下添加一个文件名为用户名的文件,使用vim在其中规定某个用户可使用什么身份,需要或不需要验证密码、执行或禁止什么操作,操作如下:
# 使用vim可以编辑一个不存在的文件,保存时会自动创建
vim /etc/sudoers.d/username
用户设置格式如下:
username ALL=(root) NOPASSWD:无需密码命令1,命令2,!禁止命令,PASSWD:需要密码命令1,命令2,!禁止命令
其中关于密码的规定可以不写,默认为需要密码,如下:
username ALL=(root) 需要密码命令1,命令2,!禁止命令
编辑完成后先按esc键退出编辑模式,再输入冒号(按shift + ;
)进入命令模式,输入 wq!
强制保存即可。
真实案例
我把root执行nginx的权限下放给rtau,语句如下:
su
vim /etc/sudoers.d/rtau
# 允许rtau使用root权限执行nginx命令
rtau ALL=(root) /usr/bin/nginx
:wq!
如有错误,欢迎指出,谢谢