前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux实践(1) - sudo 权限规划

Linux实践(1) - sudo 权限规划

原创
作者头像
懒人的小脑
修改2019-01-09 10:30:49
2.2K0
修改2019-01-09 10:30:49
举报

问题背景

为了保障企业信息安全,使用 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/*

人员设定

  1. 运维:3位初级运维,2位高级运维,1位运维经理
  2. 开发:3位初级开发,1位高级开发,1位开发经理
  3. 架构:2位架构,架构组不加入 sudo
  4. DBA:2位初级 DBA(初级不加入 sudo),1位高级 DBA
  5. 网络:3位初级网管(初级不加入 sudo),1位高级网管

Step by Step

STEP1:创建用户和用户组

备份文件/etc/{passwd,shadow,group}文件,然后创建用户脚本

代码语言:shell
复制
#! /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位数字作为用户的密码。

STEP2:编辑 sudo 文件

配置用户组别名

代码语言:javascript
复制
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

配置命令别名

代码语言:javascript
复制
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/*

用户组能获得到的权限

代码语言:txt
复制
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

用户组权限对应关系

代码语言:javascript
复制
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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题背景
    • 权限规划
      • 人员设定
      • Step by Step
        • STEP1:创建用户和用户组
          • STEP2:编辑 sudo 文件
          相关产品与服务
          访问管理
          访问管理(Cloud Access Management,CAM)可以帮助您安全、便捷地管理对腾讯云服务和资源的访问。您可以使用CAM创建子用户、用户组和角色,并通过策略控制其访问范围。CAM支持用户和角色SSO能力,您可以根据具体管理场景针对性设置企业内用户和腾讯云的互通能力。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档