zoukankan      html  css  js  c++  java
  • 权限安全:sudo

    sudo的应用场景

    有100台主机,自己管理不过来,其中一个运维做用户管理,另一个运维做网络管理,如果谁出了错误我们都可以定位到是谁做了,这样可以追究责任。我们不可能把root账户给这两个人,那么我们就需要一种机制,让两个用户在发挥其特定的职能的时候暂时变身为root,拥有root的权限,但是处理完事情之后就打回原型,这有点像suid的感觉。

    也就是说不需要正式切换到root的身份,在执行特定的命令的时候,只需要暂时用root权限去执行某个程序。这样也是有漏洞的,但也有人可以冒充tom用户,比如说当tom去厕所了,他邻桌的同学不怀好心,用tom的电脑在服务器上创了一个用户,所以sudo还有这样一种机制就是,当你执行root给你规定的命令的时候还要再次提交一次密码,确定tom是tom本人不是别人冒充的,密码会缓存5分钟,也就是说当你使用sudo使用命令时要输入密码,这 个密码在五分钟之内不用重复输入,使用sudo –k可以清除这个缓存,清除缓存之后再使用sudo时不管有没有到5分钟都要重新输入密码。

    如果让三个用户都能使用useradd命令,一个个的设置不方便,sudo配置文件还支持别名。所谓的别名就是比如我们把用户管理的命令定义到一个组里面,等到引用这些命令的时候,我们可以直接写上别名,不用那么麻烦的把管理类的命令都写上。

    sudo基础

    sudo的正确定义是:某一个用户能够以另外一个用户的身份通过哪些主机执行什么命令、

    sudo的配置文件是/etc/sudoers 

    专用的配置文件的 命令:visudo(可检查语法错误)

    语法:谁,在哪些主机上,以什么人的身份,运行什么命令

    语法

    语法:who which_hosts=(runas) command
    who:谁
    which_hosts:在哪些主机上
    runas:以谁的身份
    command执行什么命令

    用户别名:User_Alias USERDOMIN = 用户名|%组名|主机名:

    主机别名:Host_Alias HOSTS = 主机名|IP|目标用户别名:

    目标用户别名:Runas_Alias USER=用户名|%组名|

    命令别名:Cmnd_Alias COMD = 命令绝对路径|其它别名

    练习

    举个例子,让hadoop用户能够使用root才能使用的useradd和usermod这两个命令.

    [root@zhanghe ~]$ visudo
    hadoop ALL=(root) /usr/sbin/useradd,/usr/sbin/usermod   #在最后一行添加

    [root@zhanghe ~]useradd hadoop;echo "cba-123" | passwd --stdin hadoop

    [root@zhanghe ~]# su - hadoop

    [hadoop@zhanghe ~]$ sudo useradd user1   #执行成功,第一次使用会让你输入密码

    [hadoop@zhanghe ~]$sudo  –k

    [hadoop@ zhanghe ~]$ sudo  –l   #列出自己可以通过sudo执行哪些命令。

    让用户不用输入密码在配置文件命令的前面加上NOPASSWD:即可,如下:

    hadoop ALL=(root) NOPASSWD: /usr/sbin/useradd,/usr/sbin/usermod

    再举个例子,让zhanghe用户拥有root的全部权限

    zhanghe     ALL=(ALL)       ALL  

    权限规划示例

    运维部门

    级别权限
    初级运维: 查看系统信息,查看网络状态: /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/*
  • 相关阅读:
    java I/O系统之File流
    java 泛型详解
    MariaDB xtrabackup物理备份与还原
    如何解决脚本运行失败,Maven构建结果是成功的状态,与实际不符
    Fillder安装,如何解决证书无法导出
    安全自动化实施方案
    数据格式XML、JSON详解
    接口测试基础
    如何生成Junit报告
    Java连接Oracle
  • 原文地址:https://www.cnblogs.com/yizhangheka/p/11869150.html
Copyright © 2011-2022 走看看