资源描述
1 企业生产环境用户权限集中管理项目方案案例
1.1问题现状
当前我们公司里服务器上百台,各个服务器上的管理人员很多(开发+运维+架构+DBA+产品+市场),在大家登录使用Linux服务器时,不同职能的员工水平不同,因此导致操作很不规范,root权限泛滥(几乎大多数人员都有root权限),经常导致文件等莫名其妙的丢失,老手和新手员工对服务器的熟知度也不同,这样使得公司服务器安全存在很大的不稳定性,及操作安全隐患,据调查企业服务器环境,50%以上的安全问题都来自内部,而不是外部。为了解决以上问题,单个用户管理权限过大现状,现提出针对Linux服务器用户权限集中管理的解决方案。
1.2项目需求
我们既希望超级用户root密码掌握在少数或唯一的管理员手中,又希望多个系统管理员或相关有权限的人员,能够完成更多更复杂的自身职能相关的工作,又不至于越权操作导致系统安全隐患。
那么,如何解决多个系统管理员都能管理系统而又不让超级权限泛滥的需求呢?这就需要sudo管理来代替或结合su 命令来完成这样的苛刻且必要的企业服务器用户管理需求。
1.3 具体实现
针对公司里不同的部门,根据员工的具体工作职能(例如:开发,运维,数据库管理员),分等级,分层次的实现对Linux服务器管理的权限最小化、规范化。这样既减少了运维管理成本,消除了安全隐患,又提高了工作效率,实现了高质量的、快速化的完成项目进度,以及日常系统维护。
1.4 实施方案
说明:实施方案一般是由积极主动发现问题的运维人员提出的问题,然后写好方案,在召集大家讨论可行性,最后确定方案,实施部署,最后后期总结维护。
思想:在提出问题之前,一定要想到如何解决,一并发出来解决方案。
到此为止:你应该是已经写完了权限规划文档。
1.4.1 信息采集(含整个方案流程)
1 召集相关各部门领导通过会议讨论或是与各组领导沟通确定权限管理方案的可行性。需要支持的人员:运维经理、CTO支持、各部门组的领导。我们作为运维人员,拿着类似老师这个项目方案,给大家讲解这个文档,通过会议形式做演讲,慷慨激昂的演说,取得大佬们的支持和认可,才是项目能够得以最终实施的前提,当然,即使不实施,那么,你的能力也得到了锻炼,老大对你的积极主动思考网站架构问题也会是另眼看待的。
2 确定方案可行性后,会议负责人汇总、提交、审核所有相关员工对Linux服务器的权限需求。取得大佬们支持后,通过发邮件或者联系相关人员取得需要的相关员工权限信息。比如说,请各个部门经理整理归类本部门需要登录Linux权限的人员名单、职位、及负责的业务及权限,如果说不清权限细节,就说负责的业务细节,这样运维人员就可以确定需要啥权限了。
3按照需要执行的Linux命令程序及公司业务服务来规划权限和人员对应配置,主要是运维人员根据上面收集的人员名单,需要的业务及权限角色,对应账号配置权限,实际就是配置sudo配置文件。
4权限方案一旦实施后,所有员工必须通过《员工Linux服务器管理权限申请表》来申请对应的权限,确定审批流程,规范化管理。这里实施后把主权限申请流程很重要,否则,大家不听话,方案实施玩也会泡汤的。
5写操作说明,对各部门人员进行操作讲解。Sudo执行命令,涉及到PATH变量问题,运维提前处理好。
人员名单
职位
负责的业务
对应服务器权限
张三
开发经理
blog业务
要求all但是不能切换到root。
1.4.2收集员工职能和对应权限
此过程是召集大家开会确定,或者请各组领导安排人员进行统计汇总,人员及对应的工作职责,交给运维人员,由运维人员优化职位所对应的系统权限。
1.运维组
级别
权限
初级运维a,b,c,d
查看系统个信息,查看网络状态
/usr/bin/free,/usr/bin/iostat,/usr/bin/top,/bin/hostname,/sbin/ifconfig,/bin/netstat,/sbin/route
高级运维 d,e,f
查看系统信息,查看和修改网络配置,进程管理,软件包安装,存储管理
/usr/bin/free,/usr/bin/iostat,/usr/bin/top,/bin/hostname,/sbin/ifconfig,/bin/nestat,/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/unmount
运维经理
超级用户所有权限(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,!/bin/su,!/usr/bin/vi *sudoer*,/usr/bin/vim *sudoer*
3.架构组
级别
权限
架构工程师
普通用户权限
不加人sudo 列表
4.DBA组
级别
权限
初级DBA
普通用户权限
不加入sudo列表
高级DBA
项目所在数据库服务器的all权限
ALL,/usr/bin/passwd [A-Za-z]*,!/usr/bin/passwd root,!/usr/sbin/visudo,!/bin/su,!/usr/bin/vi *sudoer*,/usr/bin/vim *sudoer*
5.网络工程师
级别
权限
初级网络
普通用户权限
不加入sudo列表
高级网络
项目所在数据库服务器的all权限
ALL,/usr/bin/passwd [A-Za-z]*,!/usr/bin/passwd root,!/usr/sbin/visudo,!/bin/su,!/usr/bin/vi *sudoer*,/usr/bin/vim *sudoer*
1.5 模拟创建用户角色
首先创建3个初级运维,1个高级运维,1个网络工程师,1个运维经理,密码统一是123456
建立5个开发人员,属于phpers 组
再添加一个开发经理和高级开发人员
sudo配置文件
## Command Aliases by jianghao
Cmnd_Alias CY_CMD_1 = /usr/bin/free,/usr/bin/iostat,/usr/bin/top,/bin/hostname,/sbin/ifconfig,/bin/nestat,/sbin/route
Cmnd_Alias GY_CMD_1 = /usr/bin/free,/usr/bin/iostat,/usr/bin/top,/bin/hostname,/sbin/ifconfig,/bin/nestat,/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/pa
rted,/sbin/partprobe,/bin/mount,/bin/unmount
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,/bin/sh ~/scripts/deploy.
sh
Cmnd_Alias GW_CMD_1 = /sbin/route,/ifconfig,/bin/ping,/sbin/dhclient,/usr/bin/net,/sbin/iptables,/usr/shin/rfcom,/usr/bin/wvdial,/sbin/iwc
onfig,/sbin/mii-tool,/bin/cat var/log/*
#################################################################################
##User_Alias by janghao
User_Alias CHUJIADMINS = chuji001,chuji0022,chuji003
User_Alias GWNETADMINS = net1
User_Alias CHUJI_KAIFA = %phper
#################################################################################
##Runas_Alias by jianghao
Runas_Alias OP = root
#pri config
senior1 ALL=(OP) GY_CMD_1
manager1 ALL=(ALL) NOPASSWD:ALL
kaifamanager1 ALL=(ALL) ALL,/usr/bin/passwd [A-Za-z]*,!/usr/bin/passwd root,!/usr/sbin/visudo,!/bin/su,!/bin/vi *sudoer*,!/usr/bin/v
im *sudoer*
seniorphpers ALL=(ALL) 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)用 “\”换行
我们查看一下是否生效
1.6、成功后发邮件周知所有人权限配置生效。并附带操作说明,有必要的话,培训讲解。
1.7制定权限申请流程及申请表。
见单独文档
1.8后期维护
不是特别紧急的需求,一律走申请流程。服务器多了,可以通过分发软件批量分发/etc/sudoers(注意权限和语法检查)。除了权限上的控制,在账户有效时间上也进行了限制,现在线上多数用户的权限为永久权限可以使用以下方式进行时间上的控制,这样才能让安全最大化。/home/anca,/home/zuma,所有的程序都在账户目录下面。启动的时候也是通过这个账户。也可以不设置密码,禁止密码登录。
授权ALL在进行排除有时会让我们防不胜防,这种先开后关的策略并不是好的策略。使用白名单机制。
Sudo配置注意事项
1) 命令别名下的成员必须是文件或目录的绝对路径。
2) 别名名称是包含大写字母、数字、下划线,如果是字母都要大写。
3) 一个别名下有多个成员,成员与成员之间,通过半角”,” 号分隔;成员必须是有效实际存在的。
4) 别名成员受别名类型 Host_Alias、User_Alias、Runas_Alias、Cmnd_Alias制约,定义什么类型的别名,就要有什么类型的成员相匹配。
5) 别名规则是每行算一个规则,如果一个别名规则一行容不下时,可以通过”\”来续行。
6) 指定切换的用户要用()括号括起来。如果省略括号,则默认root用户;如果括号里是ALL,则代表能切换到所有用户;
7) 如果不需要密码直接运行命令的,应该加NOPASSWD:参数。
8) 禁止某类程序或命令执行,要在命令动作前面加上”!”号,并且放在允许执行命令的后面。
9) 用户组前面必须加%号。
2.企业项目案例2-用户行为日志审计管理方案
配置sudo命令用户行为日志审计
说明:所谓sudo命令日志审计,并不记录普通用户的普通操作。而是记录那些执行sudo命令的用户的操作。
生产环境日志审计解决方案:
所谓日志审计,就是记录所有系统及相关用户行为的信息,并且可以自动分析、处理、展示(包括文本或者录像)
法1)通过环境变量命令及syslog服务进行日志审计(信息太大,不推荐)。
法2)sudo配合syslog服务,进行日志审计(信息较少,效果不错)。
法3)在bash解释器程序里嵌入一个监视器,让所有被审计的系统用户使用修改过的增加了监视器的特殊bash程序作为解释程序。
法4):齐治的堡垒机:商业产品
本文主要讲解的是sudo日志审计:专门使用sudo命令的系统用户来记录其执行的命令相关信息。
1、 安装sudo命令,syslog服务
[root@jianghao ~]# rpm -qa|egrep "sudo|syslog"
sudo-1.8.6p3-12.el6.x86_64
rsyslog-5.8.10-8.el6.x86_64
如果没有安装则执行下面的命令安装:
[root@jianghao ~]# rpm -qa|egrep "sudo|syslog"
2、 配置/etc/sudoers
增加配置”Defaults logfile=/var/log/sudo.log”到/etc/sudoers中,注意:不包括引号。
[root@jianghao ~]# echo "Defaults logfile=/var/log/sudo.log">>/etc/sudoers
[root@jianghao ~]# tail -1 /etc/sudoers
Defaults logfile=/var/log/sudo.log
[root@jianghao ~]# visudo –c #——>检查sudoers文件语法
etc/sudoers: parsed OK
提示:下面的3、4可以不执行,直接切换到普通操作,然后查看/var/log/sudo.log有无操作。
3、 配置系统日志文件/etc/rsyslog.conf
增加配置”local2.debug /var/log/sudo.log”到/etc/rsyslog.conf中
[root@jianghao ~]# echo "local2.debug /var/log/sudo.log">>/etc/rsyslog.conf
[root@jianghao ~]# tail -1 /etc/rsyslog.conf
local2.debug /var/log/sudo.log
4、 重启syslog内核日志记录器
[root@jianghao ~]# /etc/init.d/rsyslog restart
此时,会自动建立一个/var/log/sudo.log文件(日志中配置的名字)并且文件权限为600,所有者和组均为root(如果看不见日志文件,就退出重新登录看看)。
5、 测试sudo日志审计结果
jianghao用户拥有sudo权限,chuji001没有/usr/bin/sudo权限。
[jianghao@jianghao ~]$ sudo su –
[chuji001@jianghao ~]$ sudo su -
日志集中管理(了解):
1、 rsync+inotify或定时任务+rsync,推到日志管理服务器上,10.0.0.7_2.sudo.log
2、 rsyslog服务来处理
[root@ljianghao ~]# echo "10.0.2.164 logserver">>/etc/hosts
[root@ljianghao ~]# echo "*.info @logserver">>/etc/rsyslog.conf
3、日志收集解决方案:scribe,flume,stom,logstash
展开阅读全文