sudo

sudo #

bash
# root身份运行命令
sudo command

# 以指定用户身份运行命令
sudo -u user command
#相当于:su user -c 'command'

# 切换为root
sudo -i

sudoers 配置文件 #

  • /etc/sudoers
  • /etc/sudoers.d/

(1/3)默认规则 #

例如:

text
Defaults env_reset,pwdfeedback,timestamp_timeout=60

Defaults env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE LS_COLORS"
Defaults env_keep += "LANG LC_CTYPE LC_ALL LANGUAGE"
Defaults env_keep += "http_proxy https_proxy ftp_proxy all_proxy no_proxy"
Defaults env_keep += "EDITOR"

pwdfeedback 表示输入密码时星号反馈。 timestamp_timeout 表示会话超时(分钟)。 env_keep 表示保留当前环境变量。

(2/3)别名规则 #

text
# Host_Alias
Host_Alias NAME = HOSTNAME_1, HOSTNAME_2, ...

# Cmnd_Alias
Cmnd_Alias NAME = COMMAND_1, COMMAND_2,...

# User_Alias
User_Alias NAME = USER_1, USER_2, ...

# Runas_Alias
Runas_Alias NAME = OPERATOR_1, OPERATOR_2, ...

(3/3)安全策略规则 #

text
# Permission
USER|%GROUP HOST=[(RUNAS)] [NOPASSWORD:] [!]COMMAND_1, [!]COMMAND_2, ...

RUNAS 是指以指定身份运行(ALLALL:ALL 表示任意身份)。

若用户或组匹配到多条策略,则以最后一条策略为主。

用例 #

检查sudoers文件语法 #

bash
sudo visudo -c

允许deploy用户执行任意命令 #

text
$ sudo visudo
$ #sudo visudo -f /etc/sudoers.d/deploy

deploy ALL=(ALL) ALL

在bash脚本中编辑sudoers规则 #

bash
#echo 'deploy ALL=(ALL) ALL' | sudo tee -a /etc/sudoers
echo 'deploy ALL=(ALL) NOPASSWD: ALL' | sudo tee -a /etc/sudoers
bash
echo 'deploy ALL=(ALL) NOPASSWD: ALL' | sudo tee -a /etc/sudoers.d/deploy
sudo chmod 0440 /etc/sudoers.d/deploy

允许deploy用户维护mysql服务 #

text
$ sudo visudo

deploy ALL=(ALL) NOPASSWD: /etc/init.d/mysqld

$ su deploy
$ sudo /etc/init.d/mysqld start

允许deploy用户维护tomcat服务 #

text
$ sudo visudo

deploy ALL=(ALL) NOPASSWD: /usr/local/tomcat/bin/startup.sh, /usr/local/tomcat/bin/shutdown.sh

$ vim /usr/local/tomcat/bin/catalina.sh

export JAVA_HOME=/usr/local/jdk
export JRE_HOME=/usr/local/jre

$ su deploy
$ sudo /usr/local/tomcat/bin/startup.sh

允许maintain组中的用户在本地执行关机操作 #

text
$ sudo visudo

%maintain localhost= /sbin/shutdown -h now
2024年7月12日