需求
- 一台服务器安装各种五花八门的应用?
- 前端、后端、架构、DBA、运维都要维护服务器?
- 人员经常变动,服务器密码总需要修改?
经历过以上痛苦的小伙伴们一定都在想,如何才能保障安全的前提下,又方便管理呢,以下介绍一个方案供各位小伙伴参考。
方案规划:在linux中规划运维用户组,运维人员每人都使用自己的账号,相关管理权限的用户划分到同一个组中。
以下以一个WEB业务运维组(www)以及一个运维用户(www)为例。
环境
硬件
配置 | 测试配置 |
---|---|
CPU | 1.8GHz |
内存 | 4GB |
核心 | 4核 |
带宽 | 1000Mb |
软件
- VMware® Workstation 16 Pro 16.1.1 build-17801498
- CentOS Linux release 7.6.1810 (Core)
权限规划
服务管理
/usr/bin/systemctl start
/usr/bin/systemctl stop
/usr/bin/systemctl reload
/usr/bin/systemctl restart
/usr/bin/systemctl status
/usr/bin/systemctl enable
/usr/bin/systemctl disable
进程管理
/usr/bin/nice
/usr/bin/kill
/usr/bin/killall
/usr/bin/ps
/usr/bin/top
网络管理
/usr/sbin/route
/usr/sbin/ifconfig
/usr/bin/netstat
存储管理
/usr/sbin/fdisk
/usr/sbin/sfdisk
/usr/sbin/parted
/usr/sbin/partprobe
/usr/bin/mount
/usr/bin/umount
关闭系统
/usr/sbin/reboot
/usr/sbin/halt
/usr/sbin/poweroff
软件管理
/usr/bin/rpm
/usr/bin/yum
/usr/local/bin/pip
/usr/local/bin/pip3
文件管理
/usr/bin/ls
/usr/bin/cat
其它
根据实际情况维护维护人员需要执行的其它命令。
visudo
介绍
sudo的配置文档是/etc/sudoers ,我们能够用他的专用编辑工具visudo对其进行编辑 ,此工具的好处是在添加规则有误时,保存退出会提示给我们错误信息。
如果没有visudo命令 需要 yum install -y sudo
配置完毕后,如果想知道哪些命令是您当前用户能够执行或禁止的,可通过切换至该用户身份,然后通过sudo -l 查看。
配置文件介绍
默认内容
## Sudoers allows particular users to run various commands as
## the root user, without needing the root password.
##
## Examples are provided at the bottom of the file for collections
## of related commands, which can then be delegated out to particular
## users or groups.
##
## This file must be edited with the 'visudo' command.
## Host Aliases
## Groups of machines. You may prefer to use hostnames (perhaps using
## wildcards for entire domains) or IP addresses instead.
# Host_Alias FILESERVERS = fs1, fs2
# Host_Alias MAILSERVERS = smtp, smtp2
## 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
## Command Aliases
## These are groups of related commands...
## Networking
# Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient, /usr/bin/net, /sbin/iptables, /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig, /sbin/mii-tool
## Installation and management of software
# Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum
## Services
# Cmnd_Alias SERVICES = /sbin/service, /sbin/chkconfig, /usr/bin/systemctl start, /usr/bin/systemctl stop, /usr/bin/systemctl reload, /usr/bin/systemctl restart, /usr/bin/systemctl status, /usr/bin/systemctl enable, /usr/bin/systemctl disable
## Updating the locate database
# Cmnd_Alias LOCATE = /usr/bin/updatedb
## Storage
# Cmnd_Alias STORAGE = /sbin/fdisk, /sbin/sfdisk, /sbin/parted, /sbin/partprobe, /bin/mount, /bin/umount
## Delegating permissions
# Cmnd_Alias DELEGATING = /usr/sbin/visudo, /bin/chown, /bin/chmod, /bin/chgrp
## Processes
# Cmnd_Alias PROCESSES = /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall
## Drivers
# Cmnd_Alias DRIVERS = /sbin/modprobe
# Defaults specification
#
# Refuse to run if unable to disable echo on the tty.
#
别名类型包括如下四种
- Host_Alias 定义主机名别名;
- User_Alias 用户别名,别名成员能够是用户,用户组(前面要加%号)
- Runas_Alias 用来定义runas别名,这个别名指定的是“目的用户”,即sudo 允许转换至的用户;
- Cmnd_Alias 定义命令别名。
需要注意的是:
- 在每一种Alias后面定义的别名 NAME 可以是包含大写字母、下划线、数字,但必须以一个大写字母开头。
- 配置文件中的 Default env_reset 表示重置(就是去除)用户定义的环境变量,也就是说,当你用sudo执行一个命令的时候,你当前用户设置的所有环境变量都是无效的。
放权格式
授权用户/组 主机名(允许转换至的用户) NOPASSWD:命令动作
- 粗体标注的三个要素缺一不可,但在动作之前也能够指定转换到特定用户下,在这里指定转换的用户要用( )号括起来,
- 假如无需密码直接运行命令的,应该加NOPASSWD:参数,不需要时方可省略,下面介绍中会有NOPASSWD的使用示例。
创建运维用户
groupadd www # 添加用户组
cut -d : -f 1 /etc/group # 确认添加结果
useradd -g www -d /home/www www # 添加用户,指定用户组与根目录
cut -d : -f 1 /etc/passwd # 确认添加结果
运维用户配置
# 定义用户组
User_Alias WEB = %www
# 服务管理
Cmnd_Alias SERVICES = /usr/sbin/service, /usr/sbin/chkconfig, /usr/bin/systemctl start *, /usr/bin/systemctl stop *, /usr/bin/systemctl reload *, /usr/bin/systemctl restart *, /usr/bin/systemctl status *, /usr/bin/systemctl enable *, /usr/bin/systemctl disable *
# 进程管理
Cmnd_Alias PROCESS = /usr/bin/nice, /usr/bin/kill, /usr/bin/killall, /usr/bin/ps, /usr/bin/top
# 网络管理
Cmnd_Alias NETWORKING = /usr/sbin/route, /usr/sbin/ifconfig, /usr/bin/netstat
# 存储管理
Cmnd_Alias STORAGE = /usr/sbin/fdisk, /usr/sbin/sfdisk, /usr/sbin/parted, /usr/sbin/partprobe, /usr/bin/mount, /usr/bin/umount
# 关闭系统
Cmnd_Alias SHUTDOWN = /usr/sbin/reboot, /usr/sbin/halt, /usr/sbin/poweroff, /usr/sbin/shutdown
# 软件管理
Cmnd_Alias SOFTWARE = /usr/bin/rpm, /usr/bin/yum, /usr/local/bin/pip, /usr/local/bin/pip3
# 文件管理
Cmnd_Alias FILE = /usr/bin/ls, /usr/bin/cat
# 其他
Cmnd_Alias NGINX = /usr/local/nginx/sbin/nginx, /usr/local/nginx/sbin/nginx -s *, /usr/local/nginx/sbin/nginx -t
# 规则
WEB ALL = (root) NOPASSWD: SERVICES, PROCESS, NETWORKING, STORAGE, SHUTDOWN, SOFTWARE, FILE, NGINX
验证效果
验证服务sudo