携程事故,是偶然还是必然?老板,你公司的服务器权限需要重规划了!!
当前问题:
进入公司以后,发现一个比较严重的问题,那就是服务器上的管理人员太多,其中包括开发、运维、架构、DBA、产品、市场,在大家登陆使用Linux服务器的时候,不同岗位的员工水准不同,因此导致操作很不规范,基本上都是在使用root权限,导致的问题是:有时候文件莫名的丢失,以及服务器的安全存在很大的不稳定性和操作安全隐患,还查不出是谁干的,据调查企业服务器环境,50%的安全事故来源于内部,也就是员工的误操作导致。携程就是一个很好的例子,因此,权限集中管理迫在眉睫!!
项目需求:
超级用户root和密码掌握在少数人或唯一的管理员手里,同时多个系统管理员或相关有权限的人源,能够完成更多更复杂的自身职能相关的工作,又不至于越权操作导致系统安全隐患。
解决思路:
使用sudo 管理来代替
方案流程:
第一步:跟我的老大沟通,确定这个方案的可行性,然后把各部门的领导召集起来一起开个会议,因为很多事情是需要各部门领导的支持,包括:统计各个部门需要的权限需求。
第二步:请各个部门的领导归类各自部门需要登入Linux的权限:人员名单、职位、及负责的业务及权限。
第三步:以后的员工必须通过《员工Linux服务器管理权限审计表》来申请对应的权限,确定审批流程来规范化管理。
第四步:写好操作说明,对各部门的人员进行操作培训。
具体实施:
权限对应表
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* |
模拟创建用户角色
首先创建3个初级运维,1个高级运维,1个网络工程师,1个运维经理,密码统一是123456
[root@oldboy ~]# for user in chuji1 chuji2 chuji3 net1 senior1 manager1
> do
> useradd $user
> echo "123456"|passwd --stdin $user
> done
Changing password for user chuji1.
passwd: all authentication tokens updated successfully.
Changing password for user chuji2.
passwd: all authentication tokens updated successfully.
Changing password for user chuji3.
passwd: all authentication tokens updated successfully.
Changing password for user net1.
passwd: all authentication tokens updated successfully.
Changing password for user senior1.
passwd: all authentication tokens updated successfully.
Changing password for user manager1.
passwd: all authentication tokens updated successfully.
建立5个开发人员,属于phpers 组
[root@oldboy ~]# groupadd -g 999 phpers
[root@oldboy ~]# for n in `seq 5`
> do
> useradd -g phpers php$n
> echo "123456"|passwd --stdin php$n
> done
Changing password for user php1.
passwd: all authentication tokens updated successfully.
Changing password for user php2.
passwd: all authentication tokens updated successfully.
Changing password for user php3.
passwd: all authentication tokens updated successfully.
Changing password for user php4.
passwd: all authentication tokens updated successfully.
Changing password for user php5.
passwd: all authentication tokens updated successfully.
再添加一个开发经理和高级开发人员
[root@oldboy ~]# for user in kaifamanager1 seniorphpers
> do
> useradd $user
> echo "123456"|passwd --stdin $user
> done
Changing password for user kaifamanager1.
passwd: all authentication tokens updated successfully.
Changing password for user seniorphpers.
passwd: all authentication tokens updated successfully.
sudo配置文件
## Command Aliases
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/sfd
isk,/sbin/parted,/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/d
eploy.sh
Cmnd_Alias GW_CMD_1 = /sbin/route,/ifconfig,/bin/ping,/sbin/dhclient,/usr/bin/net,/sbin/iptables,/usr/shin/rfcom,/usr/bin/wvdial,/sb
in/iwconfig,/sbin/mii-tool,/bin/cat var/log/*
############User_Alias ####################
User_Alias CHUJIADMINS = chuji1,chuji2,chuji3
User_Alias GWNETADMINS = net1
User_Alias CHUJI_KAIFA = %phper
############Runas_Alias####################
Runas_Alias OP = root
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,!/usr/bin/vi *sudoer*
,/usr/bin/vim *sudoer*
seniorphpers ALL=(ALL) GK_CMD_1
CHUJIADMINS ALL=(OP) CY_CMD_1
"/etc/sudoers.tmp" 139L, 5671C written
我们查看一下是否生效
初级运维登录查看可以执行的命令
[root@oldboy ~]# tail -10 /etc/passwd
net1:x:905:905::/home/net1:/bin/bash
senior1:x:906:906::/home/senior1:/bin/bash
manager1:x:907:907::/home/manager1:/bin/bash
php1:x:908:999::/home/php1:/bin/bash
php2:x:909:999::/home/php2:/bin/bash
php3:x:910:999::/home/php3:/bin/bash
php4:x:911:999::/home/php4:/bin/bash
php5:x:912:999::/home/php5:/bin/bash
kaifamanager1:x:913:913::/home/kaifamanager1:/bin/bash
seniorphpers:x:914:914::/home/seniorphpers:/bin/bash
[root@oldboy ~]# su - chuji1
[chuji1@oldboy ~]$ sudo -l
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
[sudo] password for chuji1:
Matching Defaults entries for chuji1 on this host:
requiretty, !visiblepw, always_set_home, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS",
env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT
LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS
_XKB_CHARSET XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin, logfile=/var/log/sudo.log
User chuji1 may run the following commands on this host:
(root) /usr/bin/free, /usr/bin/iostat, /usr/bin/top, /bin/hostname, /sbin/ifconfig, /bin/nestat, /sbin/route
调试成功以后,通知各部门配置生效,并将操作文件添加到/etc/skel目录下,并指定权限与权限申请表,后期维护基本上就是走流程了。