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

简述问题:

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

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

题,并需要解决以往的root权限泛滥问题.

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

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

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

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

安全的账号管理方式: sudo授权形式.

优势: 它可以对账号进行详细的权限分层划分,给服务器带来了更好的安全保障

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

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

权限规划

运维部:

 级别 权限
 初级运维: 查看系统信息,查看网络状态: 
/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 net1 
useradd yunwei1 && echo ‘123456‘ | passwd --stdin yunwei1 
useradd gaojiyunwei1 && echo ‘123456‘ | passwd --stdin gaojiyunwei1 
useradd kaifa1 && echo ‘123456‘ | passwd --stdin kaifa1 
groupadd net 
groupadd kaifa 
groupadd yunwei 
groupadd gaojiyunwei 
usermod -g yunwei yunwei1 
usermod -g gaojiyunwei gaojiyunwei1 
usermod -g net net1 
usermod -g kaifa kaifa1 
cat >>/etc/sudoers <<eof 
User_Alias NET = %net 
User_Alias KAIFA = %kaifa 
User_Alias YUNWEI = %yunwei 
User_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_CMD 
KAIFA ALL=(KAIFA) KAIFA_CMD 
YUNWEI ALL=(YUNWEI) YUNWEI_CMD 
GAOJIYUNWEI ALL=(GAOJIYUNWEI) GAOJIYUNWEI_CMD 
eof

正常模板参考链接:

https://www.cnblogs.com/superlinux/p/1324d19f9d54eaac83247081c8362ee6.html

原文地址:https://www.cnblogs.com/huanglinxin/p/9154852.html

时间: 2024-12-22 08:12:42

Linux运维--企业sudo权限规划详解 (实测一个堆命令搞定)的相关文章

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

简述问题: 随着公司的服务器越来越多,人员流动性也开始与日俱增,以往管理服务器的陈旧思想应当摒弃,公司需要有 更好更完善的权限体系,经过多轮沟通和协商,公司一致决定重新整理规划权限体系,主管明确指出权限存在的问 题,并需要解决以往的root权限泛滥问题. 我作为本次权限规划的发起人,我了解到了公司现状后,经过多次与相关员工及领导沟通,确认了公司存在的 部分问题:  运维部基本入职离职流程中存在一些账号问题: 如  离职不报备,系统权限不回收.账号密码过于简单化 这样无疑给公司的服务器及数据安全造

运维自动化之Cobbler系统安装详解

原文链接 参考文档 参考文档SA们现在都知道运维自动化的重要性,尤其是对于在服务器数量按几百台.几千台增加的公司而言,单单是装系统,如果不通过自动化来完成,根本是不可想象的. 运维自动化安装方面,早期一般使用人工配置pxe+dhcp+tftp配合kickstart,现在开源工具就多了,如cobbler,OpenQRM和Spacewalk.本文重点介绍Cobbler. Cobbler介绍 Cobbler是一个快速网络安装linux的服务,而且在经过调整也可以支持网络安装windows.该工具使用p

2、自动化运维之SaltStack远程执行详解

SaltStack远程执行详解 ●目标(Targeting) ●模块(Module) ●返回(Returnners) 混合模式-C 选项 主机名设置参照: redis-node1-redis03-idc04-soa.example.com(电商) 1.1模块介绍 [[email protected] salt]# salt '*' service.available sshd linux-node1.zhurui.com: True linux-node2.zhurui.com: True 服务

运维监控平台之zabbix详解2

1.Zabbix架构 zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案.zabbix能监视各种网络参数,保证服务器系统的安全运营:并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题. Zabbix的运行架构如下图所示: 2.组件 zabbix由以下几个组件部分构成: 1).Zabbix Server:负责接收agent发送的报告信息的核心组件,所有配置,统计数据及操作数据均由其组织进行: 2).Database Storage:专用于存储所有

运维自动化之Saltstack使用详解

概要 saltstack是基于Python开发的C/S架构的一款批量管理工具,底层采用动态的连接总线(ZeroMQ消息队列pub/sub方式通信),使用ssl证书签发的方式进行认证管理,使其可以用于编配, 远程执行, 配置管理等等.部署轻松,在几分钟内可运行起来,扩展性好,很容易管理上万台服务器,速度够快,服务器之间秒级通讯.号称世界上最快的消息队列ZeroMQ使得saltstack非常快速的管理大量服务器,采用RSA Key方式确认身份,传输采用AES加密,安全性也非常有保障. Saltsta

web运维第一篇:nginx配置文件详解笔记

#定义Nginx运行的用户和用户组 user www www; #nginx进程数,建议设置为等于CPU总核心数. worker_processes 8; #全局错误日志定义类型,[ debug | info | notice | warn | error | crit ] error_log /var/log/nginx/error.log info; #进程文件 pid /var/run/nginx.pid; #一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(系统的值

运维监控平台之zabbix详解1

本来是想一篇文章介绍完的,写着写着发现篇幅太长,所以决定还是分两篇来介绍,本次软件所用的版本信息如下(基于LNMP环境),操作系统centos6.7 nginx-1.6.3.tar.gz php-5.6.24.tar.gz mysql-5.5.49-linux2.6-x86_64.tar.gz zabbix-3.0.4.tar.gz (zabbix-3以上版本之支持php5.4以上环境) LNMP环境搭建不再这里说明了,如果不懂的看本人之前写的nginx+php,这里简单介绍下php编译 [[e

学习python自动化运维之模块域名解析方法详解

1.MX #!/usr/bin/env python import dns.resolver domain = raw_input('please input an domain: ') MX = dns.resolver.query(domain, 'MX') for i in MX: print 'MX preference =', i.preference, 'mail exchanger =', i.exchange 2.NS #/usr/bin/env python import dn

Linux运维 第四阶段 (二) MySQL命令、数据类型、变量

一.修改密码的三种方式: 1.#mysqladmin  -u  USERNAME -h  HOSTNAME  -p password  'new_password'  (输入旧密码设置新密码) -u (--user) -p (--password) -h (--host) 例:#mysqladmin  -u  root -h  localhost  -p password  'redhat' 2.>SET  PASSWORD  FOR  'USERNAME'@'HOST'=PASSWORD('n