携程事故,是偶然还是必然?老板,你公司的服务器权限需要重规划了!!

当前问题:

    进入公司以后,发现一个比较严重的问题,那就是服务器上的管理人员太多,其中包括开发、运维、架构、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目录下,并指定权限与权限申请表,后期维护基本上就是走流程了。