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
是指以指定身份运行(ALL
或ALL: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