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

关于用户管理的命令回顾:
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 20:48
下一篇 2016-10-18 21:50

相关推荐

  • Acheng学习宣言

    我是Acheng,我参加了马哥Linux运维网络班,从2016年9月开始我将跟随马哥学习Linux技术。我的学习宣言是:再努力也不为过!朝着活学活用,做到做精的方向努力吧! 

    Linux干货 2016-10-25
  • until 练习题

    一、用until实现下列作业 1、每隔3秒钟到系统上获取已经登录的用户的信息;如果发现用户hacker登录,则将登录时间和主机记录于日志/var/log/login.log中,并提示该用户退出系统。   2、随机生成10以内的数字,实现猜字游戏,提示比较大或小,相等则退出 3、编写脚本,求100以内所有正整数之和   4、编写脚本,通过p…

    Linux干货 2016-08-17
  • 一周作业体会

    1、描述计算机的组成及其功能 CPU+控制器+RAM+输入设备+输出设备 2、按系列罗列Linux的发行版,并描述不同发行版之间的联系与区别 答:最主流的发行版主要有: Debian/Slackware/Redhat,我们日常最常使用的操作系统大多是上述发行版的二次再发行版,例如:基于Debian的二次发行版Ubuntu和Knopix,基于Slac…

    Linux干货 2016-10-31
  • 文件查找命令之find

    文件查找命令一共有两种,locate 和find ,那么他们在用法和功能上面有什么区别呢?     locate:查找速度快,模糊查找,遍历整个文件系统的目录到数据库中,然后在去数据库中查找,依赖于事先创建好的索引库,该数据库属于系统自动创建,定期自动更新,也可手动跟新,更新命令updatedb,更新数据库需要遍历整个根文件系统…

    Linux干货 2016-08-16
  • Python函数式编程指南(三):迭代器

    这一篇我们将讨论迭代器。迭代器并不是函数式编程特有的东西,但它仍然是函数式编程的一个重要的组成部分,或者说是一个重要的工具。 转载请注明原作者和原文地址:) 3. 迭代器 3.1. 迭代器(Iterator)概述 迭代器是访问集合内元素的一种方式。迭代器对象从集合的第一个元素开始访问,直到所有的元素都被访问一遍后结束。 迭代器不能回退,只能往前进行迭代。这并…

    Linux干货 2015-03-11
  • linux软链接与硬链接的区别

    硬链接:相于当给文件增加了一个新名 在添加链接时会增加链接数,其inode结点数不会增加 支持绝对路径与相对路径 硬链接不能对目录来创建 不能跨分区来创建链接 硬链接链接到文件被删除时,依旧可以通过链接文件来访问被删文件的数据 软链接:可以支持对目录来创建链接 (注,当你用rm -rf 删除目录的时候,目录不会删除,但目录中的内容会被删除,并且会删除源文件)…

    Linux干货 2013-07-15