Linux 服务器用户权限管理改造方案与实施项目
Linux 服务器用户权限管理改造方案与实施项目
- 在了解公司业务流程后,提出权限整改方案改进公司超级权限root泛滥的现状。
- 我首先撰写方案后,给boss看,取得boss的支持后,召集大家开会讨论。
- 讨论确定可行后,由我负责推进实施。
- 实施后结果,公司的服务器权限管理更加的清晰了。
- 制订账号权限申请流程及权限申请表格。
具体内容
1 问题现状
当前我们公司服务器上百台,各个服务器上的管理人员很多(开发+运维+架构+DBA+产品+市场),在大家登陆使用LInux服务器的时,不同职能的员工水平不同,因此导致操作很不规范,root权限泛滥(几乎大部分人员都有root权限),经常导致文件等莫名其妙的丢失,老手和新手员工对服务器的熟知度也不同,这样使得公司服务器安全存在很打的不稳定性、及操作安全隐患,据调查企业服务器环境,50%以上的安全问题都来自于内部,而不是外部。为了解决以上问题,单个用户管理权限过大现状,现提出针对Linux服务器用户权限集中管理的解决方案。
2 项目需求
我们既希望超级用户root密码掌握在少数或者唯一的管理员手中,又希望多个系统管理员或相关有权限的人员,能够完成更多更复杂的自身职能的工作,又不至于越权操作导致系统安全隐患。
那么,如何解决多个系统管理员都能管理系统而又不让超级权限泛滥的需求呢?这就需要sudo管理替代或结合su命令来完成这样的苛刻且必要的企业服务器用户管理需求。
3 具体实现
针对公司里不同部门,根据员工的具体职能(例如:开发,运维,数据库管理员),分等级、分层次的实现对Linux服务器管理的权限的最小化、规划化。这样既减少了运维管理成本,消除了安全隐患,有提高了工作效率,实现了高质量的、快速化的完成项目进度,以及日常系统维护。
4 实施方案
说明:实施方案一样是由积极主动发现问题的运维人员提出问题,然后写好方案,在召集大家讨论可行性,最后确定方案,实施部署,最后后期维护。
思想:在提出问题前,一定要想到如何解决,一并发出解决方案。
到此为止:你应该已经写完了权限规划方案。
4.1 信息采集(含整改方案流程)
1.1 召集相关各部门领导通过会议讨论或是与各组领导沟通确定权限管理方案的可行性。需要支持的人员:运维经理、CTO支持、各部门组的领导。我们作为运维人员,拿着类似老师这个项目方案,给大家讲解这个文档,通过会议形式做演讲,慷慨激昂的演说,取得大佬们的支持和认可,才是项目能够得以最终实施的前提,当然,即使不实施,那么,你的能力也得到了锻炼,老大对你的积极主动思考网站架构问题也会另眼相看。
1.2 确定方案可行性后,会议负责人汇总、提交、审核所有相关员工对Linux服务器的权限的需求。
取得大佬们支持后,通过发邮件或者联系相关人员取得需要的相关人员的权限信息。比如说,请各个部门经理整理归类本部门需要登录Linux权限的人员名单、职位、及负责的业务及权限,如果说不清楚权限细节,就说负责的业务细节,这样就可以确定需要啥权限了。
1.3 按照需要执行的Linux 命令程序及公司业务服务来规划权限和人员对于配置。
主要运维人员根据上面收集的人员名单,需要的业务及权限角色,对应账号配置权限,实际就是配置sudo配置文件。
1.4 权限方案一旦实施后,所有员工必须通过《员工Linux服务器管理权限申请表》来申请对应的权限,确定审批流程,规范化管理。这里实施后把握住权限申请流程很重要,否则,大家不听话,方案实施玩就会泡汤的。
1.5 写操作说明,对各部门进行操作讲解。sudu执行命令,涉及PATH变量问题,运维提取处理好。
4.2 收集员工职能和对应权限
次过程召集大家开会确定,或者请各组领导安排人员进行统计汇总,人员及对应的工作职责,交给运维人员,由运维人员优化职能对应的系统权限。
1)运维组:
级别 | 权限 |
初级运维 a,b,c,d |
查看系统信息,查看网络状态 |
/usr/bin/free,/usr/bin/iostat,/usr/bin/top,/bin/hostnaem,/sbin/ifconfig, /bin/netstat,/sbin/route |
|
高级运维 | 查看系统信息,查看和修改网络配置,进程管理,软件包管理,存储管理 |
/usr/bin/free,/usr/bin/iostat,/usr/bin/top,/bin/hostnaem,/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 |
|
运维经理 | 超级用户所有权限 |
ALL |
2)开发组:
级别 | 权限 |
初级开发 |
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 |
|
开发经理 | 项目所在服务器的ALL权限,不能修改root密码 |
ALL,/usr/bin/passwd [A-Za-z]*,!/usr/bin/passwd root,!/usr/sbin/visudo,!/usr/bin/vi *suduers* |
权限分配:普通用户的权限,对应服务的查看日志的权限,重启对应服务的权限
大公司:项目负责制的规定。
3)架构组:
级别 | 权限 |
架构工程师 | 普通用户的权限 |
不加入sudo列表 |
4)DBA组:
级别 | 权限 |
初级DBA | 普通用户的权限 |
不加入sudo列表 | |
高级DBA | 项目所在服务器的ALL权限,不能修改root密码 |
ALL,/usr/bin/passwd [A-Za-z]*,!/usr/bin/passwd root,!/usr/sbin/visudo,!/usr/bin/vi *suduers* |
5)网络组:
级别 | 权限 |
初级网络 | 普通用户的权限 |
不加入sudo列表 | |
高级网络 | 项目所在服务器的ALL权限 |
/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/* |
5. 模拟用户创建角色
建立3个初级运维,一个高级运维,一个网络工程师,一个运维经理,密码统一123
for user in chuji001 chuji002 net001 senior001 manager001 do useradd $user echo "123"|passwd --stdin $user done
建立5个开发人员,属于phpers组
groupadd -g 999 phpers for n in `seq 5` do useradd -g phpers php00$n echo "123"|passwd --stdin php00$n done for user in kaifamanager001 seniorphpers do useradd $user echo "123"|passwd --stdin $user done
visudo 编辑文件
##Cmnd_Alias by gaogzhen##2018.12.03
Cmnd_Alias CY_CMD_1 = usr/bin/free,/usr/bin/iostat,/usr/bin/top,/bin/hostnaem,/sbin/ifconfig,/bin/netstat,/sbin/route
Cmnd_Alias GY_CMD_1 = /usr/bin/free,/usr/bin/iostat,/usr/bin/top,/bin/hostnaem,/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/grep /app/log*,/bin/cat,/bin/ls
Cmnd_Alias GK_CMD_1 = /sbin/service,/sbin/chkconfig,/usr/bin/tail /app/log*,/bin/grep /app/log*,/bin/cat,/bin/ls
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 by gaogzhen##2018.12.03
User_Alias CHUJIADINS = chuji001,chuji002,chuji003
User_Alias GWNETADINS = net001
User_Alias CHUJI_KAIFA = %phpers
##Runas_Alias by gaogzhen##2018.12.03
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 *suduers*
seniorphpers ALL=(OP) GK_CMD_1
CHUJIADINS ALL=(OP) CY_CMD_1
GWNETADINS ALL=(OP) GW_CMD_1
CHUJI_KAIFA ALL=(OP) CK_CMD_1
5. 实战调试测试
6.成功后发邮件通知所有人权限配置生效。并附带操作说明。
有必要的话,培训讲解
7.制订权限申请流程及申请表
见单独文档
8.后期维护:不是特别紧急的需要,一律走申请流程
服务器多了,可以通过封软件批量分发/etc/sudoers(主要权限和语法检查)。
出来权限上的控制,在账户有效时间上也进行限制,现在线上多少用户的权限位永久权限可以使用以下方式进行时间上的控制。这样才能让安全最大化。http://oldboy.blog.51cto.com/2561410/1289144
/home/anca,/home/zuma,所有的程序都在账户目录下面。启动的时候也是通过这个账户。也可以不设置密码,禁止密码登录
提升:授权ALL在进行排除有时让我们防不胜防,,这种先开后管的策略并不是好的策略。
白名单机制
8.sudo配置注意事项
a)命令别名下的成员必须是文件或者目录的绝对路径
b)别名名称是包含大写字母、数字、下划线,大写字母必须大写
c)一个别名下有多个成员,成员与成员之间,通过“,”号分隔;成员必须是有效实际存在的。
d)成员别名受别名类别Host_alias、User_Alias、Runas_Alias、Cmnd_Alias、制约,定义什么类型的别名,就要有什么类型的成员相配。
e)别名规则是每行算一个规则,过一个一个别名规则一行容不下时,可以通过“\”反斜杠来换行
f)指定切换的用户要用()括号括起来。如果省略括号,则默认为root用户:
g)如果不需要密码直接运行命令的,应该加NOPASSWD:参数
h)禁止某类程序或者命令执行,要在命令动作前面加上“!”号,并且放在运行命令的后面
i)用户组前面必须加%号