服务器用户权限管理改造方案和实施项目
- 在了解公司业务流程后,提出权限整改解决方案改进公司超级权限root泛滥的现状;
- 我是首先撰写了方案后,给运维总监看,得到运维总监的支持后,召集大家开会讨论;
- 讨论确定可行后,由我负责推进实施。
- 实施后结果,公司的服务器权限管理更加清晰了(总结维护)。
- 指定账号权限申请流程及权限申请表格。
企业生产环境用户权限之中管理项目方案案例
1. 问题现状
当前我们公司服务器上百台,各个服务器上的管理人员很多(开发+运维+架构+DBA+产品+市场),在大家登录使用Linux服务器时,不同职能的员工水平不同,因此导致很不规范,root权限泛滥(几乎大部分人员都有root权限),经常导致文件等莫名其妙丢失,老手和新手员工对服务器的熟知度也不同,这样使得公司服务器安全存在很大的不稳定、及操作安全隐患,据调查企业服务器环境,50%以上安全问题都来源于内部,而不是外部。为了解决以上问题,单个用户管理权限过大现状,现提出针对Linux服务器用户权限集中管理的解决方案。
2.项目需求
我们既希望超级用户root密码掌握在少数或唯一的管理员手中,又希望多个系统管理员或相关有权限的人员,能够完成更多复杂的自身职能相关的工作,又不至于越权操作导致系统安全隐患。
那么,如何解决多个系统管理员都能管理系统而又不让超户权限泛滥的需求呢?这就需要sudo管理来替代或结合su命令来完成这样苛刻且必要的企业服务器管理需求。
1) 安装软件最小化 2)目录文件权限最小化 3)用户权限最小化 4)程序运行权限最小化
3.具体实现
针对 公司里不同部门,根据员工的具体工作职能(例如:开发,运维。数据库管理员),分等级、分层次的实现对Linux服务器管理的权限最小化、规范化。这样既减少了运维管理成本,消除了安全隐患,又提高了工作效率,实现了高质量的、快速化的完成项目进度,以及日常系统维护。
4.信息采集(含整个方案流程)
1.1着急相关各部门领导通过会议讨论或是与各组领导沟通确定权限管理方案的可行性。需要支持的人员:运维经理、CTO支持、各部门组的领导。我们作为运维人员,给大家讲解这个项目方案,通过会议形式做演讲,慷慨激昂的演说得到领导们的支持,才是项目能够的得以最终实施的前提。
1.2确定方案可行性后,会议负责人汇总、提交、审核所有相关员工对Linux服务器的权限需求。比如说,请各个部门经理整理归类本部门需要登录linux权限的人员名单、职位、及负责的业务及权限,如果说不清楚权限细节,就说负责业务细节,这样运维人员就可以确定需要什么权限了
1.3按照需要执行的linux命令程序及公司业务服务来规划权限和人员对应配置。主要是运维人员根据上面手机的人员名单,需要的业务及权限角色,对应账号配置权限,实际就是配置sudo配置文件。
1.4权限方案一旦实施后,所有员工必须通过《员工linxu服务器管理权限申请表》来申请对应的权限,确定审批流程,规范化管理。这里实施后把控权限申请流程很重要,否则,大家不听话,方案实施完也会泡汤。
1.5书写操作说明,对各部门人员进行操作讲解。Sudo执行命令,涉及PATH变量问题,运维提前处理好。
4.2收集员工职能和对应权限
此过程是召集大家开会确定,或者安排各组领导安排人员进行统计,人员及对应的工作职责,交给运维人员,由运维人员优化职位所对应的系统权限。
1) 运维组
级别 |
权限 |
初级运维 a b c d |
查看系统信息,查看网络状态 |
/usr/bin/free,/usr/bin/iostat,/usr/bin/top,/bin/hostname, /sbin/ifconfig,/bin/netstat,/sbin/route |
|
高级运维 |
查看系统信息查看和修改网络配置,进程管理,软件包管理,存储管理 |
/usr/bin/free,/usr/bin/iostat,/usr/bin/top,/bin/hostname,/sbin/ifconfig /bin/netstat,/sbin/route,/sbin/iptables,/etc/init./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 |
2) 开发组
级别 |
权限 |
初级开发 |
root的查看权限,对应服务查看日志权限 |
/usr/bin/tail /app/log*,/bin/grep /app/log*,/bin/cat,/bin/ls |
|
高级开发 |
root 的查看权限,对应服务查看日志的权限,重启对应服务的权限 |
/sbin/service,/sbin/chkconfig,tail /app/log*,grep /app/log*,/bin/cat,/bin/ls |
|
开发经理 |
项目所在服务器的ALL权限,不能修改root密码 |
ALL,/usr/bin/passwd[A-Za-z]*,!/usr/bin/passwd root,!/usr/sbin/visudo,!/usr/bin/vi *sudoer* |
3) 架构组
级别 |
权限 |
架构工程师 |
普通用户权限 |
不加入sudo列表 |
4) DBA组
级别 |
权限 |
初级DBA |
普通用户权限 |
不加入sudo列表 |
|
高级DBA |
项目所在数据库服务器的ALL权限 |
ALL,/usr/bin/passwd [A-Za-z]*,!/usr/bin/passwd Root,!/usr/sbin/visudo,!/us/bin/vi *sudoer* |
5) 网络组
级别 |
权限 |
初级网络 |
普通用户权限 |
不加入sudo列表 |
|
高级网络 |
项目所在数据库服务器的ALL权限 |
/sbin/route,/sbin/ifconfig,/bin/ping,/sbin/dhclient,/usr/bin/net, /sbin/iptables,/usr/bin/rfcomm,/usr/bin/wvdial,/sbin/iwconfi, /sbin/mii-toll,/bin/cat /var/log/* |
- 模拟创建用户角色
建立三个初级运维,一个高级运维,一个网络工程师,一个运维经理,密码同一是密码111111
for user in chuji001 chuji002 chuji003 net001 senior001 manager001
do
useradd $user
echo “111111”|passwd –stdin $user
done
建立5个开发人员,属于phpers组
groupadd -g 999 phpers
for n in `seq 5`
do
useradd -g phpers php00$n
echo “111111”|passwd –stdin php00$n
done
for user in kaifamanager001 seniorphpers
do
useradd $user
echo “111111”|passwd –stdin $user
done
修改sudoer
#######Cmnd_Alias by
Cmnd_Alias CY_CMD_1 = /usr/bin/free, /usr/bin/iostat, /usr/bin/top, /bin/hostname, /sbin/ifconfig, /bin/netstat, /sbin/route
Cmnd_Alias GY_CMD_1 = /usr/bin/free, /usr/bin/iostat, /usr/bin/top, /bin/hostname, /sbin/ifconfig, /bin/netstat, /sbin/route, /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 CK_CMD_1 = /usr/bin/tail /app/log*, /bin/tail /app/log*, /bin/grep /app/log*, /bin/cat, /bin/ls
Cmnd_Alias GK_CMD_1 = /sbin/service, /sbin/chkconfig, /bin/tail /app/log*, /bin/grep /app/log*, /bin/cat, /bin/ls, /bin/sh ~/scripts/deploy.sh
Cmnd_Alias GW_CMD_1 = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient, /usr/bin/net, /sbin/iptables, /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig, /sbin/mii-tool, /bin/cat /var/log/*
##USER_Alias
User_Alias CHUJIADMINS = chuji001,chuji002,chuji003
User_Alias GWNETADMINS = net001
User_Alias CHUJI_KAIFA = %phpers
##Runas_Alias
Runas_Alias OP = root
#pri config
senior001 ALL = (OP) GY_CMD_1
manager001 ALL = (ALL) NOPASSWD:ALL
kaifamanager001 ALL = (ALL) ALL, /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root, !/usr/sbin/visudo, !/usr/bin/vi *sudoer*
seniorphpers001 ALL = (OP) GK_CMD_1
CHUJIADMINS ALL = (OP) CY_CMD_1
GWNETADMINS ALL = (OP) GW_CMD_1
CHUJI_KAIFA ALL = (OP) CK_CMD_1
注意:
1) 别名要大写
2) 命令路径要用全路径
3) 超过一行用“\”换行