sudo权限规划
一 问题简述
随着公司的服务器越来越多,人员流动性也开始与日俱增,以往管理服务器的陈旧思想(root权限随意给出,开发、测试、运维共用同一账号)应当摒弃,公司需要有更好更完善的权限体系,经过多轮沟通和协商,公司一致决定重新整理规划权限体系。运维主管明确指出权限存在的问题,并需要解决以往的root权限泛滥问题。
我作为本次权限规划的发起人,我首先了解到公司服务器权限现状后,经过多次与相关员工及领导沟通,确认了公司存在的部分问题:运维部基本入职离职流程中存在一些账号问题,如:离职不报备,系统权限不回收、账号密码过于简单化等。root权限随意给开发及测试。
以上问题无疑给公司的服务器及数据安全造成了不小的隐患。因此下文将详解此次关于权限划分的方案。
公司有多个部门使用我们提供的linux服务器以及开通的账号:安全权限没有进行合理规划,因此我提出更加安全的账号管理方式:①领用账号权限流程,②命令执行以sudo授权形式。
优势: 它可以对账号进行详细的权限分层划分,给服务器带来了更好的安全保障,公司有级别不同的运维人员,我们需要对其权限整理划分,根据职责能力我们规划权限为初级、中级、高级。而其他部门,如开发、测试等部门采取服务器账号权限流程。这样有利于权限最小化控制,避免因权限滥用导致服务运行不稳定,配置随意修改,不规范操作等安全隐患。为后续日志审计等溯源,分析奠定基础。
二 权限规划表及技术人员配备情况
1.权限规划表
①运维组权限规划表
级别 | 权限 |
初级运维 | 查看系统、网络、服务、进程状态信息: /bin/hostname,/sbin/ifconfig,/bin/netstat,/sbin/route,/sbin/ip,/bin/ping, /usr/bin/sar,/usr/bin/free, /usr/bin/vmstat,/usr/bin/mpstat,/usr/bin/iostat,/usr/sbin/iotop,/usr/bin/top,/bin/ps |
高级运维 | 查看和修改系统、网格、服务、进程状态配置信息,软件包管理,存储管理 /bin/hostname,/sbin/ifconfig,/bin/netstat,/sbin/route,/sbin/ip,/usr/bin/sar, /usr/bin/free, /usr/bin/vmstat, /usr/bin/mpstat,/usr/bin/iostat,/usr/sbin/iotop,/usr/bin/top, /bin/ps,/sbin/iptables,/etc/init.d/network,/bin/nice,/bin/kill,/usr/bin/kill, /usr/bin/killall,/bin/rpm,/usr/bin/up2date,/usr/bin/yum,/sbin/fdisk,/sbin/sfdisk, /sbin/parted,/sbin/partprobe,/bin/mount,/bin/umount |
运维经理 | 超级用户所有权限 ALL |
②开发组权限模板
级别 | 权限 |
初级开发 | root的查看权限,对应服务查看日志的权限 /usr/bin/tail /app/log*,/bin/grep /app/log*,/bin/cat,/bin/ls |
高级开发 | root的查看权限,对应服务查看日志的权限,重启对应服务的权限 /sbin/service,/sbin/chkconfig,/usr/bin/tail /app/log*,/bin/grep /app/log*,/bin/cat,/bin/ls, /bin/sh ~/scripts/deploy.sh |
开发经理 | 项目所在服务器的ALL权限,不能修改root密码 ALL,!/usr/bin/passwd root,!/usr/sbin/visudo,!/usr/bin/vim /etc/sudoers |
③测试组权限模板
级别 | 权限 |
测试 | 普通用户的权限 不加入sudo列表 |
④DBA组权限模板
级别 | 权限 |
初级DBA | 普通用户的权限 不加入sudo列表 |
高级DBA | 项目所在数据库服务器的ALL权限 ALL,!/usr/bin/passwd root,!/usr/sbin/visudo,!/usr/bin/vim /etc/sudoers |
⑤网络组权限模板
级别 | 权限 |
初级网工 | 普通用户的权限 不加入sudo列表 |
高级网工 | 项目所在服务器的有关网络配置的权限 /sbin/route,/sbin/ifconfig,/bin/ping,/sbin/dhclient,/usr/bin/net, /sbin/ip,/sbin/iptables,/usr/bin/rfcomm,/usr/bin/wvdial,/sbin/iwconfig,/sbin/mii-tool,/bin/cat /var/log/,/usr/bin/vim /etc/sysconfig/network-scripts/ |
2.公司目前的技术人员配备情况
运维组:5个初级运维,2个高级运维,1个运维经理
开发组:3个初级开发人员,1个高级开发,1个开发经理
测试组:2个测试工程师(测试组不加入sudo)
DBA组:3个初级DBA(初级DBA不加入sudo),1个高级DBA
网络组:2个初级网工(初级DBA不加入sudo),1个高级网工
三 命令讲解
创建用户
useradd yw && echo "123456" | passwd --stdin yw
创建yw用户,然后输出一个123456交passwd作为yw用户的密码
for n in seq 21 25
;do useradd user$n;echo "user$necho user$n|md5sum|cut -c4-8
"|passwd --stdin user$n;done
用for循环来创建用户账号和密码: seq 21 25创建5个数字(21,22,23,24,25),n 就代表这5个数字,后面的创建用户接着user$n就是以user开头接n,
然后 echo 输出用户名的md5,使用cut 取出4-8块的字符交给passwd --stdin来为每位用户配置不同的密码,他们的密码都是用户名的md5值的4至8位字符串。
删除用户
userdel yw
删除yw用户
for n in seq 21 25
;do userdel -r user$n;done
用for循环删除用户
查看自己的sudo权限:sudo -l
……
……
四 实施命令脚本
举例:在公司时根据实际情况编写用户账号密码及相应权限,此处根据上述权限规划表为例。
1.创建用户组和用户:
#运维组、开发组、测试组、DBA组、网络组
groupadd chujiyunwei -g 1100
groupadd gaojiyunwei -g 1110
groupadd yunweijingli -g 1120
groupadd chujikaifa -g 1200
groupadd gaojikaifa -g 1210
groupadd kaifajingli -g 1220
groupadd ceshi -g 1300
groupadd chujidba -g 1400
groupadd gaojidba -g 1410
groupadd chujinetwork -g 1500
groupadd gaojinetwork -g 1510
#-----------------------------------------------------------------------------
#运维组:5个初级运维,2个高级运维,1个运维经理
#-----------------------------------------------------------------------------
for n in seq 1 5
;do useradd chujiyunwei$n -g 1100;echo "123456" | passwd --stdin chuji$n;done
#创建5个初级运维账户并配置了密码
for n in seq 1 2
;do useradd gaojiyunwei$n -g 1110;echo "123456" | passwd --stdin gaoji$n;done
#创建2个高级运维的用户和密码
useradd yunweijingli -g 1120 && echo 123456 | passwd --stdin yunweijingli
#创建1个运维经理的账号和密码
#-----------------------------------------------------------------------------
#开发组:3个初级开发人员,1个高级开发,1个开发经理
#-----------------------------------------------------------------------------
for n in seq 1 3
;do useradd chujikaifa$n -g 1200;echo "123456" | passwd --stdin chujikaifa$n;done
#创建3个初级开发账户并配置了密码
useradd gaojikaifa1 -g 1210 && echo "123456" | passwd --stdin gaojikaifa1
#创建1个高级开发的用户和密码
useradd kaifajingli -g 1220 && echo 123456 | passwd --stdin kaifajingli
#创建1个开发经理的账号和密码
#-----------------------------------------------------------------------------
#测试组:2个测试
#-----------------------------------------------------------------------------
for n in seq 1 2
;do useradd ceshi$n -g 1300;echo "123456" | passwd --stdin ceshi$n;done
#创建2个测试账号和密码
#-----------------------------------------------------------------------------
#DBA组:3个初级DBA,1个高级DBA
#-----------------------------------------------------------------------------
for n in seq 1 3
;do useradd chujidba$n -g 1400;echo "123456" | passwd --stdin chujidba$n;done
#创建3个初级dba 账号和密码
useradd gaojidba1 -g 1410&& echo 123456 | passwd --stdin gaojidba1
#创建1个高级dba账号和密码
#-----------------------------------------------------------------------------
#网工组:2个初级网工,1个高级网工
#-----------------------------------------------------------------------------
for n in seq 1 2
;do useradd chujinetwork$n -g 1500;echo "123456" | passwd --stdin chujinetwork$n;done
#创建2个初级网工
useradd gaojinetwork1 -g 1510 && echo 123456 | passwd --stdin gaojinetwork1
#创建1个高级网工
2.配置/etc/sudoers文件
cat >>/etc/sudoers<<EOF
#配置用户组别名:
User_Alias CHUJIYUNWEI = %chujiyunwei
User_Alias GAOJIYUNWEI = %gaojiyunwei
User_Alias YUNWEIJINGLI = %yunweijingli
User_Alias CHUJIKAIFA = %chujikaifa
User_Alias GAOJIKAIFA = %gaojikaifa
User_Alias KAIFAJINGLI = %kaifajingli
User_Alias CESHI= %ceshi
User_Alias CHUJIDBA = %chujidba
User_Alias GAOJIDBA = %gaojidba
User_Alias CHUJINETWORK = %chujinetwork
User_Alias GAOJINETWORK = %gaojinetwork
#配置命令别名:
Cmnd_Alias CHUJIYUNWEI_CMD = /bin/hostname,/sbin/ifconfig,/bin/netstat,/sbin/route,/sbin/ip,/bin/ping,/usr/bin/sar,/usr/bin/free, /usr/bin/vmstat,/usr/bin/mpstat,/usr/bin/iostat,/usr/sbin/iotop,/usr/bin/top,/bin/ps
Cmnd_Alias GAOJIYUNWEI_CMD = /bin/hostname,/sbin/ifconfig,/bin/netstat,/sbin/route,/sbin/ip,/usr/bin/sar,/usr/bin/free,/usr/bin/vmstat,/usr/bin/mpstat,/usr/bin/iostat,/usr/sbin/iotop,/usr/bin/top,/bin/ps,/sbin/iptables,/etc/init.d/network,/bin/nice,/bin/kill,/usr/bin/kill,/usr/bin/killall,/bin/rpm,/usr/bin/up2date,/usr/bin/yum,/sbin/fdisk,/sbin/sfdisk,/sbin/parted,/sbin/partprobe,/bin/mount,/bin/umount
Cmnd_Alias YUNWEIJINGLI_CMD = ALL
Cmnd_Alias CHUJIKAIFA_CMD = /usr/bin/tail /app/log*,/bin/grep /app/log*,/bin/cat,/bin/ls
Cmnd_Alias GAOJIKAIFA_CMD = /sbin/service,/sbin/chkconfig,/usr/bin/tail /app/log*,/bin/grep /app/log*,/bin/cat,/bin/ls, /bin/sh ~/scripts/deploy.sh
Cmnd_Alias KAIFAJINGLI_CMD = ALL,!/usr/bin/passwd root,!/usr/sbin/visudo,!/usr/bin/vim /etc/sudoers
Cmnd_Alias CESHI_CMD = /usr/bin/uname
Cmnd_Alias CHUJIDBA_CMD = /usr/bin/uname
Cmnd_Alias GAOJIDBA_CMD = ALL,!/usr/bin/passwd root,!/usr/sbin/visudo,!/usr/bin/vim /etc/sudoers
Cmnd_Alias CHUJINETWORK_CMD = /usr/bin/uname
Cmnd_Alias GAOJINETWORK_CMD = /sbin/route,/sbin/ifconfig,/bin/ping,/sbin/dhclient,/usr/bin/net,/sbin/ip,/sbin/iptables,/usr/bin/rfcomm,/usr/bin/wvdial,/sbin/iwconfig,/sbin/mii-tool,/bin/cat /var/log/,/usr/bin/vim /etc/sysconfig/network-scripts/
#用户组能获取到的权限
Runas_Alias CHUJIYUNWEI = root
Runas_Alias GAOJIYUNWEI = root
Runas_Alias YUNWEIJINGLI = root
Runas_Alias CHUJIKAIFA = root
Runas_Alias GAOJIKAIFA = root
Runas_Alias KAIFAJINGLI = root
Runas_Alias CESHI = root
Runas_Alias CHUJIDBA = root
Runas_Alias GAOJIDBA = root
Runas_Alias CHUJINETWORK = root
Runas_Alias GAOJINETWORK = root
#用户组权限对应关系
CHUJIYUNWEI ALL=(CHUJIYUNWEI) CHUJIYUNWEI_CMD
GAOJIYUNWEI ALL=(GAOJIYUNWEI) GAOJIYUNWEI_CMD
YUNWEIJINGLI ALL=(YUNWEIJINGLI) YUNWEIJINGLI_CMD
CHUJIKAIFA ALL=(CHUJIKAIFA) CHUJIKAIFA_CMD
GAOJIKAIFA ALL=(GAOJIKAIFA) GAOJIKAIFA_CMD
KAIFAJINGLI ALL=(KAIFAJINGLI) KAIFAJINGLI_CMD
CESHI ALL=(CESHI) CESHI_CMD
CHUJIDBA ALL=(CHUJIDBA) CHUJIDBA_CMD
GAOJIDBA ALL=(GAOJIDBA) GAOJIDBA_CMD
CHUJINETWORK ALL=(CHUJINETWORK) CHUJINETWORK_CMD
GAOJINETWORK ALL=(GAOJINETWORK) GAOJINETWORK_CMD
EOF
五 权限领用流程
1. 领用流程
① 领用人发起权限领用流程,填写权限配置变更申请表,交由运维人员审核。
② 运维人员审核没有问题告知运维主管,由运维主管开放权限。
2.配置更变申请表
配置变更申请表 | ||||
*以下申请部门填写 | 填表日期: | |||
申请部门 | ||||
申 请 人 | 联系方式 | |||
申请测试日期 | 年 月 日 | 申请实施日期 | ||
实施部门 | ||||
实施联系人 | 联系方式 | |||
变更目的: | ||||
变更内容:(如内容较多,请另附页说明) | ||||
申请部门 意 见 | 口 一般变更 口 重大变更 口 紧急变更 | |||
签章: 日期: 年 月 日 | ||||
*以下为运维单位填写 | ||||
运维单位 意 见 | 口 一般变更 口 重大变更 口 紧急变更 | |||
口 同意申请实施日期 口 请在以下日期执行: 年 月 日 | ||||
签章: 日期: 年 月 日 | ||||
*以下为实施人填写 | ||||
运维单位 处理结果 | ||||
签章: 日期: 年 月 日 |
注: 1、该申请需附带需求报告、开发及变更计划、变更方案操作步骤详解、用户测试报告、源代码或脚本等的纸质文件,及操作所涉及到的电子文件用以存档。
2、变更方案需包括变更步骤详解、变更成功标志、回滚方案等。
(例子)
groupadd loguser -g 1003
useradd loguser -g 1003 && echo "############" | passwd --stdin loguser
cat >>/etc/sudoers<<EOF
User_Alias LOGUSER = %loguser
Cmnd_Alias LOGUSER_CMD = /sbin/service,/sbin/chkconfig,/usr/bin/tail,/bin/grep,/bin/cat,/bin/ls, /bin/sh,/bin/vim,/bin/less,/usr/bin/docker
Runas_Alias LOGUSER = root
LOGUSER ALL=(LOGUSER) NOPASSWD:LOGUSER_CMD
EOF