企业sudo权限规划详解 (实测一个堆命令搞定)

简述问题:

        随着公司的服务器愈来愈多,人员流动性也开始与日俱增,以往管理服务器的陈旧思想应当摒弃,公司须要有linux

更好更完善的权限体系,通过多轮沟通和协商,公司一致决定从新整理规划权限体系,主管明确指出权限存在的问ios

题,并须要解决以往的root权限泛滥问题.数据库

        我做为本次权限规划的发起人,我了解到了公司现状后,通过屡次与相关员工及领导沟通,确认了公司存在的vim

部分问题:  运维部基本入职离职流程中存在一些帐号问题: 如  离职不报备,系统权限不回收.帐号密码过于简单化安全

这样无疑给公司的服务器及数据安全形成了不小的隐患.所以下文将详解这次关于权限划分的方案.服务器

        公司有多个部门使用咱们提供的linux服务器以及开通的帐号:安全权限没有进行合理规划.,所以我提出更加网络

安全的帐号管理方式: sudo受权形式.架构

        优点: 它能够对帐号进行详细的权限分层划分,给服务器带来了更好的安全保障app

        公司有级别不一样的运维人员,咱们须要对其权限整理划分,根据职责能力咱们规划权限为  初级运维  中级运维运维

高级运维.他们拥有的权限分别为:

权限规划

运维部:

 级别 权限
 初级运维: 查看系统信息,查看网络状态: 
/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.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

 

开发部:

级别 权限
初级开发 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, 
/bin/sh ~/scripts/deploy.sh
开发经理 项目所在服务器的ALL权限,不能修改root密码
ALL,!/usr/bin/passwd root,/usr/bin/passwd [A-Za-z]*,!/usr/bin/passwd root

 

架构组:

级别 权限
架构工程师 普通用户的权限
不加入sudo列表

 

DBA组:

级别 权限
初级DBA 普通用户的权限
不加入sudo列
高级DBA 项目所在数据库服务器的ALL权限
ALL, /usr/bin/passwd [A-Za-z]* !/usr/bin/passwd root, !/usr/sbin/visudo,

 

网络组

级别 权限
初级网络 普通用户权限
不加入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个初级运维,2个高级运维,1个运维经理

开发组:3个初级开发人员,1个高级开发,1个开发经理

架构组:2个架构工程师(架构组不加入sudo)

DBA组:3个初级DBA(初级DBA不加入sudo),1个高级DBA

网络组:2个初级网管(初级DBA不加入sudo),1个高级网管

 

基础命令说明(后面不详细讲解了):

useradd yun1 && echo "123456" | password --stdin yun1   这个是建立yun1用户 而后 输出一个123456交给 passwd 而后passwd把这一串字符做为了 yun1 的密码

 

for n in `seq 21 25`;do useradd user$n;echo "user$n`echo user$n|md5sum|cut -c4-8`"|passwd --stdin user$n;done 这里用的for循环来建立用户帐号和密码:  seq 21 25  建立5个数字 n 就表明这5个数字  后面的建立用户接着 user$n  就是以user开头接n

而后 echo 输出yoghurt名的md5 使用cut 取出  4-8块的自字符交给 password --stdin  来为每位用户没配置不一样的密码,他们的密码都是用户名的md5值  详细请看下面的参考

 

开始建立用户:

useradd yun1 && echo "123456" | password --stdin yun1   ##基础建立方法

 

使用for循环来建立用户和密码3(参考)

for n in `seq 21 25`;do useradd user$n;echo "user$n`echo user$n|md5sum|cut -c4-8`"|passwd --stdin user$n;done ##批量建立用户方式  



运维组:5个初级运维,2个高级运维,1个运维经理
for n in `seq 21 25`;do useradd chuyun$n;echo "user$n`echo user$n|md5sum|cut -c4-8`"|passwd --stdin user$n;done   #建立5个初级运维,密码是md5的4-8位
-----------------------------------------------------
for n in `seq 1 5`;do useradd chuji$n;echo "123456" | passwd --stdin chuji$n;done  #推荐用这个建立帐户和密码,建立了 5个初级运维帐户并配置了密码
for n in `seq 1 2`;do useradd gaoji$n;echo "123456" | passwd --stdin gaoji$n;done  #建立高级运维的用户和密码
useradd jingli && echo 123456 | passwd --stdin jingli     ## 建立经理的帐号和密码
for n in `seq 1 2`;do useradd jiagou$n;echo "123456" | passwd --stdin jiagou$n;done #建立2个架构师 帐号和密码
for n in `seq 1 3`;do useradd chujidba$n;echo "123456" | passwd --stdin chujidba$n;done #建立初级dba 帐号和密码
useradd gaojidba && echo 123456 | passwd --stdin gaojidba    ##建立高级dba帐号和密码
for n in `seq 1 2`;do useradd wangguan$n;echo "123456" | passwd --stdin wangguan$n;done    ## 建立初级网管
useradd superwangguan1 && echo 123456 | passwd --stdin superwangguan   ## 建立高级网管
useradd jingli && echo 123456 | passwd --stdin jingli    #建立运维经理
-----------------------------------------------------

开发组:3个初级开发人员,1个高级开发,1个开发经理
for n in `seq 1 5`;do useradd chuji$n;echo "123456" | passwd --stdin chuji$n;done
架构组:2个架构工程师(架构组不加入sudo)
DBA组:3个初级DBA(初级DBA不加入sudo),1个高级DBA
网络组:2个初级网管(初级DBA不加入sudo),1个高级网管

 

与本次权限规划无关======批量删除用户方式:

参考:

批量建立用户,建立随机密码
for n in `seq 21 25`;do useradd user$n;echo "user$n`echo user$n|md5sum|cut -c4-8`"|passwd --stdin user$n;done  #取用户的md5 的 4-8位字符做为密码.
以上密码怎么看?   ---- 经过 echo user$ 的用户名来查看 md5值.上面截取的就是 md5值得 4-8位那么准确获取密码的方法就是(user$   $是赋值的) 如是user21
echo user21|md5sum|cut -c4-8  # 这种方式比较麻烦 咱们能够字节使用批量建立用户指定密码.以下

批量建立用户,建立指定密码
 for n in `seq 1 5`;do useradd chen$n;echo "123456" | passwd --stdin chen$n;done

批量删除用户:
for n in `seq 21 25`;do userdel -r user$n;done    ## 尾部的user$中 user 就是你的用户名前缀  21-25 是后缀. 批量建立用户删除用户都有这个

 

开始建立相关用户:
运维组:5个初级运维,2个高级运维,1个运维经理
开发组:3个初级开发人员,1个高级开发,1个开发经理
for n in `seq 1 5`;do useradd chuji$n;echo "123456" | passwd --stdin chuji$n;done
架构组:2个架构工程师(架构组不加入sudo)
DBA组:3个初级DBA(初级DBA不加入sudo),1个高级DBA
网络组:2个初级网管(初级DBA不加入sudo),1个高级网管

下列命令直接复制粘贴便可完成建立

for n in `seq 1 5`;do useradd chujiyunwei$n;echo "123456" | passwd --stdin chujiyunwei$n;done
for n in `seq 1 2`;do useradd gaojiyunwei$n;echo "123456" | passwd --stdin gaojiyunwei$n;done
useradd yunweijingli && echo 123456 | passwd --stdin yunweijingli

for n in `seq 1 3`;do useradd chujikaifa$n;echo "123456" | passwd --stdin chujikaifa$n;done
useradd gaojikaifa && echo 123456 | passwd --stdin gaojikaifa
useradd kaifajingli && echo 123456 | passwd --stdin kaifajingli

for n in `seq 1 2`;do useradd jiagou$n;echo "123456" | passwd --stdin jiagou$n;done
for n in `seq 1 3`;do useradd chujidba$n;echo "123456" | passwd --stdin chujidba$n;done
useradd gaojidba && echo 123456 | passwd --stdin gaojidba
for n in `seq 1 2`;do useradd wangguan$n;echo "123456" | passwd --stdin wangguan$n;done
useradd gaojiwangguan1 && echo 123456 | passwd --stdin gaojiwangguan1

总计用户:
yunweijingli    #(建立运维经理 useradd gaojiwangguan1 && echo 123456 | passwd --stdin gaojiwangguan1)
gaojiyunwei1 gaojiyunwei2    (#建立高级运维: (for n in `seq 1 2`;do useradd gaojiyunwei$n;echo "123456" | passwd --stdin gaojiyunwei$n;done))
chujiyunwei1 chujiyunwei2 chujiyunwei3 chujiyunwei5 chujiyunwei5  #建立处及运维: (for n in `seq 1 5`;do useradd chujiyunwei$n;echo "123456" | passwd --stdin chujiyunwei$n;done)

kaifajinlgi     ##(建立开发经理 useradd kaifajingli && echo 123456 | passwd --stdin kaifajingli)
gaojikaifa1     ##(建立高级开发 useradd gaojikaifa && echo 123456 | passwd --stdin gaojikaifa)
chujikaifa1 chujikaifa2 chujikaifa3  ##建立初级开发 ( for n in `seq 1 3`;do useradd chujikaifa$n;echo "123456" | passwd --stdin chujikaifa$n;done )

jiagoushi1 jiagoushi2   ##(建立架构师 for n in `seq 1 2`;do useradd jiagoushi$n;echo "123456" | passwd --stdin jiagoushi$n;done)

dba1
dba2     ##(建立架构师 for n in `seq 1 2`;do useradd dba$n;echo "123456" | passwd --stdin dba$n;done)
dba3

gaojidba    #建立高级DBA useradd DBA && echo 123456 | passwd --stdin DBA

wangguan1    
wangguan2 ##(建立网管 for n in `seq 1 2`;do useradd wangguan$n;echo "123456" | passwd --stdin wangguan$n;done)

gaojiwanguan #建立高级网管 useradd gaojiwangguan && echo 123456 | passwd --stdin wangjiwangguan

 

用户权限规划:

高级运维:    %gaojiyunwei
初级运维:    %yunwei
开发:    %kaifa
网络组:    %net

#配置命令:
User_Alias NET = %net
User_Alias KAIFA = %kaifa
User_Alias YUNWEI = %yunwei
User_Alias GAOJIYUNWEI = %gaojiyunwei

-----------------------
#建立用户
useradd net1 && echo '123456' | passwd --stdin net1
useradd yunwei1 && echo '123456' | passwd --stdin yunwei1
useradd gaojiyunwei1 && echo '123456' | passwd --stdin gaojiyunwei1
useradd kaifa1 && echo '123456' | passwd --stdin kaifa1

建立组: (groupadd)
groupadd net
groupadd kaifa
groupadd yunwei
groupadd gaojiyunwei  

加入组:(usermod -g 组 用户)
usermod -g yunwei yunwei1        
usermod -g gaojiyunwei gaojiyunwei1
usermod -g net net1
usermod -g kaifa kaifa1

 

用户别名分类:

User_Alias NET = %net
User_Alias KAIFA = %kaifa
User_Alias YUNWEI = %yunwei
User_Alias GAOJIYUNWEI = %gaojiyunwei

 

命令别名管理

#网络工程师命令别名组
Cmnd_Alias NET_CMD = /bin/vi, /bin/ping, /bin/traceroute, /sbin/route, /bin/netstat, /bin/ps

#开发命令别名组
Cmnd_Alias KAIFA_CMD = /bin/grep, /usr/bin/vim, /bin/vi, /usr/bin/tail, /usr/bin/wc, /bin/ps

#运维命令别名组
Cmnd_Alias YUNWEI_CMD = /bin/chmod, /usr/bin/chattr, /usr/sbin/useradd, /usr/sbin/groupadd, /bin/touch, /bin/mkdir, /usr/bin/passwd[A-Za-z], !/usr/bin/passwd root

#高级运维命令别名组
Cmnd_Alias GAOJIYUNWEI_CMD = /bin/chmod, /usr/bin/chattr, /usr/sbin/useradd, /usr/sbin/groupadd, /bin/touch, /bin/mkdir, /usr/bin/passwd[A-Za-z], /usr/sbin/usermod, /usr/sbin/userdel

 

权限管理

#能获取到的权限
Runas_Alias NET  = root
Runas_Alias KAIFA  = root
Runas_Alias YUNWEI = root
Runas_Alias GAOJIYUNWEI = root

 

#对应关系
#权限分组
User_Alias NET = %net
User_Alias KAIFA = %kaifa
User_Alias YUNWEI = %yunwei
User_Alias GAOJIYUNWEI = %gaojiyunwei

#网络工程师命令别名组
Cmnd_Alias NET_CMD = /bin/vi, /bin/ping, /bin/traceroute, /sbin/route, /bin/netstat, /bin/ps

#开发命令别名组
Cmnd_Alias KAIFA_CMD = /bin/grep, /usr/bin/vim, /bin/vi, /usr/bin/tail, /usr/bin/wc, /bin/ps

#运维命令别名组
Cmnd_Alias YUNWEI_CMD = /bin/chmod, /usr/bin/chattr, /usr/sbin/useradd, /usr/sbin/groupadd, /bin/touch, /bin/mkdir, /usr/bin/passwd[A-Za-z], !/usr/bin/passwd root

#高级运维命令别名组
Cmnd_Alias GAOJIYUNWEI_CMD = /bin/chmod, /usr/bin/chattr, /usr/sbin/useradd, /usr/sbin/groupadd, /bin/touch, /bin/mkdir, /usr/bin/passwd[A-Za-z], /usr/sbin/usermod, /usr/sbin/userdel

#能获取到的权限
Runas_Alias NET  = root
Runas_Alias KAIFA  = root
Runas_Alias YUNWEI = root
Runas_Alias GAOJIYUNWEI = root

#Runas_Alias OP = root

#对应关系
NET     ALL=(NET)       NET_CMD
KAIFA   ALL=(KAIFA)     KAIFA_CMD
YUNWEI  ALL=(YUNWEI)    YUNWEI_CMD
GAOJIYUNWEI     ALL=(GAOJIYUNWEI)       GAOJIYUNWEI_CMD

 

一个脚本所有搞定权限(实测无问题,权限所有搞定 sudo -l 查看得到的权限)

 

useradd net1 && echo '123456' | passwd --stdin net1useradd yunwei1 && echo '123456' | passwd --stdin yunwei1useradd gaojiyunwei1 && echo '123456' | passwd --stdin gaojiyunwei1useradd kaifa1 && echo '123456' | passwd --stdin kaifa1groupadd netgroupadd kaifagroupadd yunweigroupadd gaojiyunwei  usermod -g yunwei yunwei1         usermod -g gaojiyunwei gaojiyunwei1usermod -g net net1usermod -g kaifa kaifa1cat >>/etc/sudoers <<eofUser_Alias NET = %netUser_Alias KAIFA = %kaifaUser_Alias YUNWEI = %yunweiUser_Alias GAOJIYUNWEI = %gaojiyunwei##network--Cmnd_Alias NET_CMD = /bin/vi, /bin/ping, /bin/traceroute, /sbin/route, /bin/netstat, /bin/ps##kaifamingling--Cmnd_Alias KAIFA_CMD = /bin/grep, /usr/bin/vim, /bin/vi, /usr/bin/tail, /usr/bin/wc, /bin/ps##yunweimingling--Cmnd_Alias YUNWEI_CMD = /bin/chmod, /usr/bin/chattr, /usr/sbin/useradd, /usr/sbin/groupadd, /bin/touch, /bin/mkdir, /usr/bin/passwd[A-Za-z], !/usr/bin/passwd root##gaojiyunweimingling--Cmnd_Alias GAOJIYUNWEI_CMD = /bin/chmod, /usr/bin/chattr, /usr/sbin/useradd, /usr/sbin/groupadd, /bin/touch, /bin/mkdir, /usr/bin/passwd[A-Za-z], /usr/sbin/usermod, /usr/sbin/userdel##quanxian-- Runas_Alias NET  = root Runas_Alias KAIFA  = root Runas_Alias YUNWEI = root Runas_Alias GAOJIYUNWEI = root##Runas_Alias OP = root#guanxi--NET     ALL=(NET)       NET_CMDKAIFA   ALL=(KAIFA)     KAIFA_CMDYUNWEI  ALL=(YUNWEI)    YUNWEI_CMDGAOJIYUNWEI     ALL=(GAOJIYUNWEI)       GAOJIYUNWEI_CMDeof
相关文章
相关标签/搜索