用户管理生产环境实践案例

关于用户管理的命令回顾:
visudo

1. 关于用户管理命令的回顾

<1> useradd命令

useradd 
-g:指定组 
-u:指定uid 
-c:注释 
-s: 指定用户登入后所使用的shell。 
-d: 指定用户登入时的起始目录 
-G: 指定用户所属的附加群组(也就是多群组) 
-M: 不要自动建立用户的登入目录 
-D: 变更预设值(不太理解) 
-e:指定账户的有效期限

<2> 其他命令

  • userdel

  • usermod

  • groupadd

  • groupdel

  • passwd

  • chage

  • su

  • sudo

  • visudo

  • groups

  • id

  • w,whoami,last

2. 正文

<1> 问题现状

      当公司里的服务器有几十甚至超过上百台,并且能操作服务器的人员很多(开发+运维+架构+DBA),当大家登陆使用Linux服务器时,不同职位的员工水平不同,导致操作不符合规范,不同部门的人员的服务器权限没有明确的规范,经常导致文件丢失,这样导致服务器的安全存在很大问题。为了解决以上问题,单个用户管理权限过大现状,现提出针对Linux服务器用户权限集中管理的解决方案。

<2> 需求分析

      生产环境中,我们既希望root密码掌握在少数人手中,又希望多个服务器系统管理员或者相关职能的人,能够完成更多与自身职能相关的服务器工作,又不导致越权操作导致服务器安全隐患。

      在此就需要sudo管理来和su来一起完成生产环境服务器对用户的管理需求。

<3> 实现方针

      生产环境中,应该针对不同部门(开发部门,运维部门,DBA,网络部门等)的不同职能的工作人员(项目经理,开发主管,运维主管,架构师,DBA,网络工程师,开发工程师,运维工程师等),分等级的分配服务器的权限,尽量使对应人员的服务器权限最小化。

      这样即减少了服务器安全隐患,又让不同部门不同职能的工作人员提升工作效率,提升项目进度。

<4>. 实施过程

(1)信息收集

      1.1 各部门收集汇总不同职能的工作人员所需要的服务器权限,并有各部门负责人审核对应员工的服务器权限需求。并且整理成表格如下,之后针对此表格举行会议进行终审。

      举例的表格如下:

姓名 价格 jiage shuliang
张三 php中级开发 旅游业务开发 上传文件到Nginx
王五 开发经理 **项目负责 ALL,但不能修改密码

      1.2审核通过后,运维部门根据表格进行相关人员的测试服务器权限配置,也就visudo来进行配置。配置完成后运维部门负责人进行审核并交由测试部门测试,汇报相关结果。测试环境没有出现问题后,配置正式服务器环境,并进一步交由测试部门测试并给出结果。相关人员服务器权限存入数据库并备份。

      1.3方案实施后,新入员工须通过《员工服务器管理权限申请表》来申请对应的权限,并将结果记录进数据库。相关人员的服务器权限变动须提交部门负责人审批,并将结果实时记录进入数据库。

      1.4运维部门针对服务器权限写出文档,并对相关人员进行培训。

权限分配审核结果的权限分配举例(不同公司根据不同业务讨论给出,这里不罗列给出):

zhineng master
初级运维 /usr/bin/free,/usr/bin/iostat,/usr/bin/top,/bin/hostname,/sbin/ifconfig…
高级运维 /usr/bin/free,/usr/bin/iostat,/usr/bin/top,/bin/hostname,/sbin/ifconfig,/bin/mount,/usr/bin/yum,/bin/umount
运维经理 ALL
开发 /sbin/service,/sbin/chkconfig,tail /app/log*,grep /app/log*,/bin/cat,/bin/ls
(2)模拟用户测试

测试建立3个初级运维,1个高级运维,1个网络工程师,1个运维经理,方便起见,密码统一设置为111111

for user in junSa001 junSa002 junSa003 senSa001 net001 saManager001do    useradd $user    echo "111111"|passwd --stdin $userdone

之后建立5个开发人员,属于phpers组

groupadd -g 666 phpersfor n in `seq 5`do    useradd -g phpers php00$n    echo "111111"|passwd --stdin php00$ndone

(以下所有配置写入visudo)定义各个部门各个职能可执行的命令组:

##Cmnd_Alias 初级运维命令组
Cmnd_Alias JY_CMD_1 = /usr/bin/free,/usr/bin/iostat,/usr/bin/top,/bin/hostname,/sbin/ifconfig

##Cmnd_Alias 高级运维命令组
Cmnd_Alias SY_CMD_1 = /usr/bin/free,/usr/bin/iostat,/usr/bin/top,/bin/hostname,/sbin/ifconfig,/bin/mount,/usr/bin/yum,/bin/umount

##Cmnd_Alias 开发命令组
Cmnd_Alias KF_CMD_1 = /sbin/service,/sbin/chkconfig,tail /app/log*,grep /app/log*,/bin/cat,/bin/ls

之后给用户组定义别名:

##User_Alias 
User_Alias CHUJIADMINS = junSa001 junSa002 junSa003
User_Alias GWNETADMINS = net001

##phpers组
User_Alias CHUJI_KAIFA = %phpers

定义OPERATOR,执行root的权限命令

##Runas_AliasRunas_Alias OP = root

接下来就是主配置了:

CHUJIADMIS   ALL=(OP)  JY_CMD_1 
GWNETADMINS  ALL=(OP)  SY_CMD_1
CHUJI_KAIFA  ALL=(OP)  KF_CMD_1 
kaifaManager ALL=(ALL) ALL,!/usr/bin/passwd,!/usr/sbin/visudo,!/usr/bin/vi *sudoer*##....

切换到junSa001用户,执行sudo -l命令,可以看到junSa001用户可以执行的命令:

User chuji001 may run the following commands on this host:(root) /usr/bin/free, /usr/bin/iostat, /usr/bin/top, /bin/hostname, /sbin/ifconfig,/bin/netstat, /sbin/route

测试发现,执行sudo useradd,则没有权限执行命令:

[chuji001@localhost ~]$ sudo useradd kkkk
Sorry, user chuji001 is not allowed to execute '/usr/sbin/useradd kkkk' as root on localhost.localdomain.

原创文章,作者:21期王逸凡,如若转载,请注明出处:http://www.178linux.com/52798

(5)
21期王逸凡21期王逸凡
上一篇 2016-10-18
下一篇 2016-10-18

相关推荐

  • 文件处理工具

    Linux的哲学思想之一是一切皆文件,所有系统中有许多文本文件。因此Linux有许多关于文本处理的命令。 cat命令 连接文件并打印到标准输出设备上,cat经常用来显示文件内容。 语法 cat [OPTION]… [FILE]… 常用选项 -A, –show-all #显示所有控制符 -b, –num…

    Linux干货 2016-08-08
  • 马哥教育网络班21期+第9周课程练习

    1、写一个脚本,判断当前系统上所有用户的shell是否为可登录shell(即用户的shell不是/sbin/nologin);分别这两类用户的个数;通过字符串比较来实现; #!/bin/bash # declare -i nologuser=0 declare -i loguser=0 while read&…

    Linux干货 2016-09-05
  • python装饰器

    装饰器本质是一个装饰器函数,在不改变一个函数的函数体本身的情况下,实现函数体本身外其他的功能 1.实现一个装饰器 def  logger(fn):                         #装饰器函数必须只能传入一个参数,那就是被装饰函数     print(‘in’)     def wrapper(*args,**kwar…

    Linux干货 2017-10-23
  • 文件共享服务之NFS

    文件共享服务之NFS 文件共享服务之NFS 一、什么是NFS及NFS的工作流程 二、NFS发展及问题 三、NFS简单部署 一、什么是NFS及NFS的工作流程 NFS(Network File System,网络文件系统)  NFS是借助于RPC来实现功能的 RPC:(Remote  Procedure  Call  p…

    Linux干货 2016-04-19
  • SED基本用法和在文本中的使用

    sed命令行格式为: sed [-nefri] ‘command’ 输入文本/文件 常用选项: -n∶取消默认的输出,使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的资料一般都会被列出到屏幕上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来 -e∶进行多项编辑,…

    Linux干货 2017-05-05
  • yum使用及编译安装

    前端程序包管理器     CentOS:yum,dnf     YUM:Yellowdog update Modifier     URL:ftp:// . . .     文件服务器:  …

    Linux干货 2016-08-24