SUDO安全委派和安全模块

sudo更换身份

   su  切换身份   使用su 切换身份必须首先直到被切换成用户的密码   如: su root  就必须要知道root的密码 这种机制安全性不高,容易泄露管理员密码

   1. sudo能够授权指定用户在指定主机上执行某些命令

   2. sudo 可以提供日志,记录每个用户使用sudo操作

   3. sudo 为系统管理员提供配置文件,允许系统管理员集中的管理用户的使用权限和使用的主机

   4. sudo 使用时间戳文件来完成类似"检票"系统,默认存活期为5分钟

   5. 使用sudo授权后普通用户就可以执行默认不能执行的操作 相当于提升普通用户的执行权限

 

sudo配置

  配置文件:/etc/sudoers(不建议使用),    /etc/sudoers.d/

  时间戳文件:/var/db/sudo

  日志文件:/var/log/secure

  配置文件支持使用通配符glob: 

      ?:任意单一字符 

      * :匹配任意长度字符 

     [wxc]:匹配其中一个字符 

     [!wxc]:除了这三个字符的其它字符 

     \x : 转义   

    [[alpha]] :字母 示例: /bin/ls [[alpha]]* 

   配置文件规则有两类:

      1、别名定义:不是必须的 

      2、授权规则:必须的 

授权规则格式

   root              ALL=(ALL)               ALL

   yxh             192.168.30.7=(root)    /bin/mount      /dev/cdrom  /mnt/     

   执行格式 :   sudo  mount    /dev/cdrom   /mnt/     执行命令的时候必须和授权规则中写的命令保持完全一致 sudo  mount    /dev/cdrom   /mnt 执行失败  因为缺少最后的/

 

sudo命令

  ls -l /usr/bin/sudo 

  sudo –i –u wang 切换身份 

  sudo [-u user] COMMAND 

     -V 显示版本信息等配置信息 

    -u user  默认为root 

    -l,ll 列出用户在主机上可用的和被禁止的命令 

    -v 再延长密码有效期限5分钟,更新时间戳 

    -k 清除时间戳(1970-01-01),下次需要重新输密码 

    -K 与-k类似,还要删除时间戳文件 

    -b 在后台执行指令 

    -p 改变询问密码的提示符号     示例:-p ”password on %h for user %p:"   

    user1 ALL=(user2)  ALL           第一个ALL表示所有主机  第二个ALL表示所有权限      表示user2有的权限全都赋给user1

    user2可以在终端执行               sudo  -u  user1   cat /etc/shadow             如果没有指定-u选项,默认代表root用户

 

sudo别名和示例 

   Users和runas: 

       username 

       #uid 

      %group_name 

     %#gid 

      user_alias|runas_alias 

   host:

        ip或hostname 

        network(/netmask) 

        host_alias 

  command: 

        command name 

        directory 

        sudoedit 

        Cmnd_Alias

   别名有四种类型:User_Alias,   Runas_Alias,   Host_Alias ,Cmnd_Alias

   别名格式:[A-Z]([A-Z][0-9]_)*

   别名定义: Alias_Type NAME1 = item1, item2, item3 : NAME2 = item4, item5 

  示例1

    User_Alias NETADMIN= netuser1,netuser2

    Cmnd_Alias NETCMD = /usr/sbin/ip

    NETADMIN ALL=(root) NETCMD

示例2

     User_Alias SYSADER=wang,mage,%admins

     User_Alias DISKADER=tom

     Host_Alias SERS=www.magedu.com,172.16.0.0/24

     Runas_Alias OP=root

     Cmnd_Alias SYDCMD=/bin/chown,/bin/chmod

     Cmnd_Alias DSKCMD=/sbin/parted,/sbin/fdisk

     SYSADER SERS= SYDCMD,DSKCMD

     DISKADER ALL=(OP) DSKCMD 

 

示例3 排除特定场景

     user1     192.168.175.136,192.168.175.138=(root)       /usr/sbin/,    !/usr/sbin/useradd 

     user1     ALL=(ALL) /bin/cat /var/log/messages*

     安全隐患    sudo cat  /var/og/messages   /etc/passwd

     user1      ALL=(ALL) /bin/cat /var/log/messages*,        !/bin/cat /var/log/messages*   *  

     

TCP_Wrappers介绍

   工作在第四层(传输层)的TCP协议   实现简单的防火墙功能

   对有状态连接的特定服务进行安全检测并实现访问控制

   以库文件形式实现   某进程是否接受libwrap的控制取决于发起此进程的程序在编译时是否针对 libwrap进行编译的  

   判断服务程序是否能够由tcp_wrapper进行访问控制的方法:不是所有服务都支持TCP_Wrappers

       ldd  /PATH/TO/PROGRAM     |   grep  libwrap.so 

       strings PATH/TO/PROGRAM  |   grep libwrap.so 

   配置文件:/etc/hosts.allow, /etc/hosts.deny 

  检查顺序:hosts.allow,hosts.deny(默认允许)   注意:一旦前面规则匹配,直接生效,将不再继续

  基本语法:  daemon_list@host: client_list  [ :options :option… ]  

  单个应用程序的二进制文件名,而非服务名.

  例如vsftpd    以逗号或空格分隔的应用程序文件名列表 如:sshd,vsftpd 

  ALL表示所有接受tcp_wrapper控制的服务程序

  主机有多个IP,可用@hostIP来实现控制 如: in.telnetd@192.168.0.254 

  EXCEPT用法:   

    示例:vsftpd: 172.16.   EXCEPT 172.16.100.0/24    EXCEPT 172.16.100.1 

 

PAM认证机制 

      使得系统管理员可以灵活地根据需要给不同的服务配置不同的认证方式而无需更改服务程序

     一种认证框架,自身不做认证 

     PAM 是关注如何为服务验证用户的 API,通过提供一些动态链接库和一套统 一的API,将系统提供的服务和该服务的认证方式分开

     PAM相关文件

          模块文件目录:/lib64/security/*.so 

          环境相关的设置:/etc/security/

          主配置文件:  /etc/pam.conf     默认不存在

          为每种应用模块提供一个专用的配置文件:/etc/pam.d/APP_NAME

          注意:如/etc/pam.d存在 /etc/pam.conf  将失效 

    PAM认证一般遵循这样的顺序:Service(服务)→PAM(配置文件)→pam_*.so

    PAM认证首先要确定那一项服务,然后加载相应的PAM的配置文件(位于 /etc/pam.d下),最后调用认证文件(位于/lib/security下)进行安全认证 

    PAM认证过程:

        1.使用者执行/usr/bin/passwd 程序,并输入密码

        2.passwd开始调用PAM模块,PAM模块会搜寻passwd程序的PAM相关设置文件, 这个设置文件一般是在/etc/pam.d/里边的与程序同名的文件,即PAM会搜寻

           /etc/pam.d/passwd此设置文件

       3.经由/etc/pam.d/passwd设定文件的数据,取用PAM所提供的相关模块来进行验证

       4.将验证结果回传给passwd这个程序,而passwd这个程序会根据PAM回传的结果决定下一个动作(重新输入密码或者通过验证)

   通用配置文件/etc/pam.conf格式   

           application  type  control    module-path     arguments

   专用配置文件/etc/pam.d/* 格式 

                              type   control   module-path     arguments 

   服务名(application) telnet、login、ftp等

  服务名字“OTHER”代表所有没有在该文件中明确配置 的其它服务

  模块类型(module-type)

        control  PAM库该如何处理与该服务相关的PAM模块的成功或失败情况

        module-path 用来指明本模块对应的程序文件的路径名

        Arguments  用来传递给该模块的参数 

        Auth 账号的认证和授权

        Account 与账号管理相关的非认证类的功能,如:用来限制/允许用户对某个服务的访问时间,当前有效的系统资源(最多可以有多少个用户),限制用户的位置(例如:root用户只能从控制台登录)

       Password 用户修改密码时密码复杂度检查机制等功能

       Session 用户获取到服务之前或使用服务完成之后需要进行一些附加的操作, 如:记录打开/关闭数据的信息,监视目录等

       -type 表示因为缺失而不能加载的模块将不记录到系统日志,对于那些不总是 安装在系统上的模块有用 

 

 module-path: 模块路径

      相对路径:  /lib64/security目录下的模块可使用相对路径 如:pam_shells.so、pam_limits.so

      绝对路径:  模块通过读取配置文件完成用户对系统资源的使用控制 /etc/security/*.conf

      注意:  修改PAM配置文件将马上生效

      建议:编辑pam规则时,保持至少打开一个root会话,以防止root身份验证错误

      Arguments 用来传递给该模块的参数

 

PAM模块示例 

  模块:pam_shells 

  功能:检查有效shell

  man pam_shells

  示例:不允许使用/bin/csh的用户本地登录

   vim /etc/pam.d/login     

         auth required pam_shells.so 

   vim /etc/shells   

          去掉 /bin/csh

   useradd –s /bin/csh testuser

   testuser将不可登录

   tail    /var/log/secure 

示例:pam_limits.so 

   限制用户最多打开的文件数和运行进程数

     /etc/pam.d/system-auth 

     session     required      pam_limits.so

     vim /etc/security/limits.conf     

          apache   –    nofile 10240     apache用户可打开10240个文件

          student  hard   nproc   20     student用户不能运行超过20个进程 

     

posted @ 2018-05-23 08:56  不懂123  阅读(252)  评论(0编辑  收藏  举报