sudo

什么是sudu

sudo是linux下的一种权限管理机制,用于用户以其他身份来执行命令,预设的身份为root。

/etc/sudoers中设置了可执行sudo指令的用户。若其它未经授权的用户企图使用sudo,则会发出警告的邮件给管理员。用户使用sudo时,会提示输入密码,而此密码为该用户的口令,而不是root密码。每次输入密码有5分钟的有效期。

sudo配置文件

/etc/sudoers是sudo的配置文件,可以设置哪些用户能够以什么身份执行什么命令。

visudo命令

visudo命令可以用来编辑/etc/sudoers文件,保存时会自动检查是否有语法错误。

[root@lwz ~]# visudo    #打开sudoers文件

sudoers文件配置说明

配置格式:用户名   ALL=(ALL)   [NOPASSWD:] conmmand

  • sudoers文件中的配置项说明:

    • 用户名:允许使用sudo的用户,多个用户以逗号分隔,或者将多个用户名组成一个别名。

    • ALL=(ALL):其中等号左边的ALL表示主机ip或者主机名,一般都为ALL。等号右边的ALL为左边的用户将授予哪个用户的权限,ALL表示所有用户。

    • NOPASSWD:表示不需要密码。

    • command:表示允许用户执行的命令,命令必须以绝对路径表示。多个命令用逗号隔开。ALL表示所有命令。还可以配置命令组别名。

实例

用户别名配置

多个用户组成一个别名,方便一次性配置大量用户

[root@lwz ~]# visudo
## User Aliases
## These aren't often necessary, as you can use regular groups
## (ie, from files, LDAP, NIS, etc) in this file - just use %groupname
## rather than USERALIAS
# User_Alias ADMINS = jsmith, mikem
User_Alias lin = lwz1,lwz2,lwz3

命令组别名配置

先创建命令组别名

[root@lwz ~]# visudo
## Command Aliases
## These are groups of related commands...
Cmnd_Alias      CMDS = /bin/ls,/bin/cat,/bin/touch

再将命令组别名配置给用户使用

## Same thing without a password
# %wheel        ALL=(ALL)       NOPASSWD: ALL
lwz,lwz1     ALL=(ALL)       NOPASSWD:    CMDS

限制root远程登陆

生产环境中,为了安全起见,应该禁止root用户远程登陆,如果有需求用到root权限,可以通过visudo给普通用户授权。

编辑/etc/ssh/sshd_config配置文件禁止root远程登陆:

[root@lwz ~]# vi /etc/ssh/sshd_config
#PermitRootLogin yes
PermitRootLogin no

# 重启sshd服务
[root@lwz ~]# systemctl restart sshd

root被限制远程登陆后,可以先远程登陆普通用户,再su - root切换到root。

取消普通用户登陆root需要密码

[root@lwz ~]# visudo
## Same thing without a password
# %wheel        ALL=(ALL)       NOPASSWD: ALL
#lwz,lwz1     ALL=(ALL)       NOPASSWD:    CMDS
lwz     ALL=(ALL)       NOPASSWD: /usr/bin/su - root
[lwz@lwz ~]$ sudo su - root
上一次登录:五 9月  8 18:24:56 CST 2023pts/0 上
[root@lwz ~]#