为了保障企业信息安全,使用 sudo 授权形式管理用户,对安全权限进行合理规划,针对不同的使用人群进行分层设定相应的使用权限。
运维
级别 | 权限 |
---|---|
初级运维工程师 | 查看系统信息和网络状态 /usr/bin/{free,iostat,uptime,hostname,netstat} /usr/sbin/{ifconfig,route} |
高级运维工程师 | 查看系统信息、查看和修改网络配置、进程管理、软件包管理、存储管理 /usr/bin/{free,iostat,uptime,hostname,netstat,free,top,htop,kill,killall,rpm,yum,mount} /usr/sbin/{ifconfig,route,iptables,fdisk,sdisk,parted,partprobe} /etc/init.d/network、 /bin/{nice,kill,rpm,mount,unmount} |
运维经理 | 超级用户所有权限 ALL |
开发
级别 | 权限 |
---|---|
初级开发工程师 | root 的查看权限以及对应服务查看日志的权限 /usr/bin/tail/app/log* /bin/grep/app/log* /bin/{cat,ls} |
高级开发工程师 | root的查看权限,对应服务查看日志的权限,重启对应服务的权限 /sbin/{service,chkconfig} tail /app/log* grep /app/log* /bin/{cat,ls,sh} ~/scripts/deploy.sh |
开发经理 | 项目所在服务器的 ALL 权限,不能修改 root 密码 ALL,!/usr/bin/passwd root,/usr/bin/passwd[A-Za-z]* |
架构
级别 | 权限 |
---|---|
架构师 | 普通用户权限 不加入sudo列表 |
DBA
级别 | 权限 |
---|---|
初级 DBA | 普通用户权限 不加入 sudo 列表 |
高级 DBA | 项目所在服务器的 ALL 权限 ALL,/usr/bin/passwd[A-Za-z]* !/usr/bin/psswd root,!/usr/bin/visudo |
网络
级别 | 权限 |
---|---|
初级网络工程师 | 普通用户权限 不加入 sudo 列表 |
高级网络工程师 | 项目所在服务器的 ALL 权限 /sbin/{route,ifconfig,dhclient,iptables,rfcomm,wvdial,iwconfig,mii-tool} /bin/{ping,cat} /usr/bin/net /var/log/* |
备份文件/etc/{passwd,shadow,group}文件,然后创建用户脚本
#! /bin/bash
groupadd junior_ops -g 1100
groupadd senior_ops -g 1110
groupadd manager_ops -g 1120
groupadd junior_dev -g 1200
groupadd senior_dev -g 1210
groupadd manager_dev -g 1220
groupadd arch -g 1300
groupadd dba_junior -g 1400
groupadd dba_senior -g 1410
groupadd net_junior -g 1500
groupadd net_senior -g 1510
for n in `seq 1 3`;do
useradd ops_junior$n -g 1100;
echo "`echo ops_junior$n|md5sum|cut -c4-8`"|passwd --stdin ops_junior$n >> /dev/null && echo "ops_junior$n success! ";
done
for n in `seq 1 2`;do
useradd ops_senior$n -g 1110;
echo "`echo ops_senior$n|md5sum|cut -c4-8`"|passwd --stdin ops_senior$n >> /dev/null && echo "ops_senior$n success!";
done
useradd ops_manager -g 1120 && echo manager | passwd --stdin ops_manager >> /dev/null && echo "ops_manager success!"
for n in `seq 1 3`;do
useradd dev_junior$n -g 1200;
echo "`echo dev_junior$n|md5sum|cut -c4-8`"|passwd --stdin dev_junior$n >> /dev/null && echo "dev_junior$n success!";
done
useradd dev_senior1 -g 1210 && echo 123456 | passwd --stdin dev_senior1 >> /dev/null && echo "dev_senior1 successs!"
useradd dev_manager -g 1220 && echo manager | passwd --stdin dev_manager >> /dev/null && echo "dev_manager successs!"
for n in `seq 1 2`;do
useradd arch$n -g 1300;
echo "`echo arch$n|md5sum|cut -c4-8`"|passwd --stdin arch$n >> /dev/null && echo "arch$n success!";
done
for n in `seq 1 2`;do
useradd dba_junior$n -g 1400;
echo "`echo dba_junior$n|md5sum|cut -c4-8`"|passwd --stdin dba_junior$n >> /dev/null && echo "dba_junior$n success!";
done
useradd dba_senior1 -g 1410 && echo 123456 | passwd --stdin dba_senior1 >> /dev/null && echo "dba_senior1 success!"
for n in `seq 1 3`;do
useradd net_junior$n -g 1500;
echo "`echo net_junior$n|md5sum|cut -c4-8`"|passwd --stdin net_junior$n >> /dev/null && echo "net_junior$n success!";
done
useradd net_senior1 -g 1510 && echo 123456 | passwd --stdin net_senior1 >> /dev/null && echo "net_senior1 success!"
创建用户密码使用了两种方法,一种是指定静态密码,另外一种是根据用户名生成 md5值,然后取md5值得第4位至第8位共5位数字作为用户的密码。
配置用户组别名
User_Alias JUNIOROPS=%junior_ops
User_Alias SENIOROPS=%senior_ops
User_Alias MANAGEROPS=%manager_ops
User_Alias JUNIORDEV=%junior_dev
User_Alias SENIORDEV=%senior_dev
User_Alias MANAGERDEV=%manager_dev
User_Alias ARCH=%arch
User_Alias JUNIORDBA=%dba_junior
User_Alias SENIORDBA=%dba_senior
User_Alias JUNIORNET=%net_junior
User_Alias SENIORNET=%net_senior
配置命令别名
Cmnd_Alias JUN_OPS_CMD = /bin/hostname,/sbin/ifconfig,/bin/netstat,/sbin/route,/sbin/ip,/bin/ping,/usr/bin/sar,/usr/bin/free, /usr/bin/vmstat,/usr/bin/mpstat,/usr/bin/iostat,/usr/sbin/iotop
,/usr/bin/top,/bin/ps
Cmnd_Alias SEN_OPS_CMD = /bin/hostname,/sbin/ifconfig,/bin/netstat,/sbin/route,/sbin/ip,/usr/bin/sar,/usr/bin/free,/usr/bin/vmstat,/usr/bin/mpstat,/usr/bin/iostat,/usr/sbin/iotop,/usr/bin/top,/bin/ps,/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 MAN_OPS_CMD = ALL
Cmnd_Alias JUN_DEV_CMD = /usr/bin/tail /app/log*,/bin/grep /app/log*,/bin/cat,/bin/ls
Cmnd_Alias SEN_DEV_CMD = /sbin/service,/sbin/chkconfig,/usr/bin/tail /app/log*,/bin/grep /app/log*,/bin/cat,/bin/ls, /bin/sh ~/scripts/deploy.sh
Cmnd_Alias MAN_DEV_CMD = ALL,!/usr/bin/passwd root,!/usr/sbin/visudo,!/usr/bin/vim /etc/sudoers
Cmnd_Alias ARCH_CMD = /usr/bin/uname
Cmnd_Alias JUN_DBA_CMD = /usr/bin/uname
Cmnd_Alias SEN_DBA_CMD = ALL,!/usr/bin/passwd root,!/usr/sbin/visudo,!/usr/bin/vim /etc/sudoers
Cmnd_Alias JUN_NET_CMD = /usr/bin/uname
Cmnd_Alias SEN_NET_CMD = /sbin/route,/sbin/ifconfig,/bin/ping,/sbin/dhclient,/usr/bin/net,/sbin/ip,/sbin/iptables,/usr/bin/rfcomm,/usr/bin/wvdial,/sbin/iwconfig,/sbin/mii-tool,/bin/cat /var/log/*,/usr/bin/vim /etc/sysconfig/network-scripts/*
用户组能获得到的权限
Runas_Alias JUNIOROPS = root
Runas_Alias SENIOROPS = root
Runas_Alias MANAGEROPS = root
Runas_Alias JUNIORDEV = root
Runas_Alias SENIORDEV = root
Runas_Alias MANAGERDEV = root
Runas_Alias ARCH = root
Runas_Alias JUNIORDBA = root
Runas_Alias SENIORDBA = root
Runas_Alias JUNIORNET = root
Runas_Alias SENIORNET = root
用户组权限对应关系
JUNIOROPS ALL=(JUNIOROPS) JUN_OPS_CMD
SENIOROPS ALL=(SENIOROPS) SEN_OPS_CMD
MANAGEROPS ALL=(MANAGEROPS) MAN_OPS_CMD
JUNIORDEV ALL=(JUNIORDEV) JUN_DEV_CMD
SENIORDEV ALL=(SENIORDEV) SEN_DEV_CMD
MANAGERDEV ALL=(MANAGERDEV) MAN_DEV_CMD
ARCH ALL=(ARCH) ARCH_CMD
JUNIORDBA ALL=(JUNIORDBA) JUN_DBA_CMD
SENIORDBA ALL=(SENIORDBA) SEN_DBA_CMD
JUNIORNET ALL=(JUNIORNET) JUN_NET_CMD
SENIORNET ALL=(SENIORNET) SEN_NET_CMD
参考链接
http://blog.51cto.com/ilctc/2095784
https://blog.csdn.net/xiegh2014/article/details/52634030
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。