工作中发现不少同事喜欢使用root管理系统,没有专用的管理账号。用单一root账号管理既给系统带来了风险,也给用户管理、审计带来了不便,所以应该考虑为系统管理人员及使用人员建立各自的用户账号,并对权限做相应限制。当然针对root账号本身也需要做些设置,比如密码的复杂度、账号登陆限制(如ssh、终端登录)等。本文简单讨论下账号安全设置。其实除了针对账号本身安全,更应该重视管理人员的安全意识、操作规范。

    1)建立普通用户账号,建立管理组

   建立不同用户组,用于分配不同的权限,实现人员的分组管理并为系统管理人员及有需要的人员建立各自的用户账号,示例如下

   a. 建立管理组manager和开发组develop

        groupadd manager

        groupadd develop

   b. 建立用户jack harrytom

        useradd jack

        useradd harry

        useradd tom

   c. 为用户设置初始密码123456,并强制第一次登陆修改密码

        echo 123456|passwd --stdin jack

        echo 123456|passwd --stdin harry

        echo 123456|passwd --stdin tom

        chage -d 0 jack

        chage -d 0 harry

        chage -d 0 tom

   d. 添加用户到指定

      usermod -a -G manager jack

      usermod -a -G manager harry

      usermod -a -G develop tom

   建立管理员组manager和普通组develop,并添加用户jack、harry到manager组,添加tom到develop组,通过组控制、分配用户权限。

   2) 设置密码策略

主要是密码的复杂性、可靠性等密码最短位数、更新周期使用期限保密性(加密算法使用人员)等。主要login.defsRedhat开发的pam_cracklib.so模块控制。RHEL的密码策略在/etc/login.defs中设置,需要注意的是这些配置对root用户无效。如果/etc/shadow文件里有相同的选项,则以/etc/shadow里的设置为准pam_cracklib.so则主要控制密码复杂度。

         PASS_MAX_DAYS     30#设置密码最大使用30

         PASS_MIN_DAYS       3  #设置最少使用3天才可以修改密码,0表示不限制

         PASS_MIN_LEN        12#设置密码最短12位

         PASS_WARN_AGE      5  #设置过期前5开始提醒

         ENCRYPT_METHOD MD5 #设置使用MD5加密(DES/MD5/SHA256/SHA512等)

         LOGIN_RETRIES        3   #登录重试次数

         LOGIN_TIMEOUT      20  #登录过期时间(s)

   其它选项请用man login.defs查看

Linux账号安全的简单设置_Linux账号安全


     3PAM可插拔验证模块

          PAM(Plugable Authentication Module,可插拔验证模块)是由Sun提出的一种认证机制。管理员通过它可以灵活地根据需要给不同的服务配置不同的认证方式而无需更改服务程序,同时也便于向系统中添加新的认证手段。不少应用软件都可以与PAM进行集成,当然,操作系统的登录验证过程也可以通过对PAM进行配置来进行。如指定密码复杂性、指定用户试图登录的失败次数等,以下列出对这些账号的安全性配置。

            a. 指定密码复杂性

           修改/etc/pam.d/system-auth配置:

           限制密码最少有:2个大写字母,3个小写字母,3个数字,2个符号

           文件中有一行为:

            password requisite pam_cracklib.so try_first_pass retry=3

            在其后追加如下参数

            ucredit=-2 lcredit=-3 dcredit=-3 ocredit=-2

           b. 验证时若出现任何与pam_tally有关的错误则停止登录

            auth required pam_tally.so onerr=fail magic_root

           c. 账号验证过程中一旦发现连续5次输入密码错误,就通过pam_tally锁定此账号600

            account required pam_tally.so deny=5 lock_time=600 magic_root reset

Linux账号安全的简单设置_Linux账号安全_02

     4) 使用 sudo权限

sudo通过更严谨的管理,细化用户权限控制,包括授权主机访问、用户账号、使用命令等,sudo要求用户使用自己账号的密码执行授权使用的命令,从而避免直接将root用户账号的密码公开给普通用户。

    4.1 sudo特点

    1.限制指定用户在指定主机上运行某些命令。

    2.提供日志,记录用户使用sudo进行的操作,并在服务器日志保存记录

    3.允许系统管理员集中地管理用户的权限及使用这些权限时的服务器位置。

   4. 对root权限的使用时间有严格控制,通过sudo得到root权限后,用户可以在5分钟(默认)内使用此权限,时间超出后必须重新进行密码验证。

使用rpm -qa|grep sudo查看sudo的包是否有安装,没有下载安装

下载地址http://www.sudo.ws/

由于系统默认的/sbin和/usr/sbin下的命令其他用户有可执行权限,建议先使用

chmod o-x /sbin/* /usr/sbin/*取消,然后让授权用户均通过sudo执行命令

#注意可能会出现其他问题比如登录时显示出错,可通过以下命令修复

chmod o+x /sbin/consoletype

或者以普通用户安装软件执行如果有调用路径则可能没有权限(待观察),建议将一些重要的命令先取消其它用户的x权限,如shutdow、halt、init等

 4.2 sudo的配置

a.直接修改文件/etc/sudoers(不进行语法检测风险较大)

b.使用特定修改命令visudo (修改后会检测语法,有错误会提示,建议使用)visudo默认的是使用vi里打开配置文件,用vi来修改文件。我们可以在编译时使用--with-editor=path指定编辑器来修改(path为指定编辑器路径)。

 /etc/sudoers文件中需要配置的实例形如:

 User_Alias Host_Alias=(Runas_Alias) Cmnd_Alias

1).User_Alias可以是单个或多个用户,系统组(以%标识),网络组(以+标识),(系统组常用,如%manager,即表示授权系统中manager组用户)

2).Runas_Alias 表示以这个模板定义的用户身份执行,可以是单个或多个用户,系统组(以%标识),网络组(以+标识),ID号(以#开头标识)

3).Host_Alias 表示允许该模板定义的主机执行,可以使用主机名、IP、网段

4).Cmnd_Alias 定义命令模板别名,可以是

a.命令,使用全路径

b.目录,使用全路径以/结尾

c.其他模板,允许嵌套、通配符

4.2.1 开启单独日志:

visudo添加

Defaults logfile="/var/log/sudo"

编辑/etc/rsyslog.conf,添加:

local2.debug/var/log/sudo

4.2.2 配置sudo文件

     使用命令visudo添加如下参数

       Host_Alias     WEBSERVERS = 192.168.1.0/24,172.16.1.1

       Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient, /usr/bin/net, /sbin/iptables

       Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum

       Cmnd_Alias SERVICES = /sbin/service, /sbin/chkconfig

       Cmnd_Alias STORAGE = /sbin/fdisk, /sbin/sfdisk, /sbin/parted, /sbin/partprobe, /bin/mount, /bin/umount

       Cmnd_Alias DELEGATING = /usr/sbin/visudo, /bin/chown, /bin/chmod, /bin/chgrp

       Cmnd_Alias PROCESSES = /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall

       Cmnd_Alias DRIVERS = /sbin/modprobe

       Cmnd_Alias ALLOW=NETWORKING,SERVICES,PROCESSES,STORAGE,SOFTWARE,DELEGATING,DRIVERS

   Cmnd_Alias DENY=!/bin/bash, !/usr/bin/passwd root, !/usr/sbin/usermod -* root, !/sbin/shutdown, !/usr/bin/halt, !/sbin/init, !/usr/bin/chattr (如果有其他命令需要禁止,照例添加即可)

       %manager  ALL =  /bin/su, NOPASSWD:ALLOW,DENY

       %developWEBSERVERS = NETWORKING,DENY

定义Host_Alias、Cmnd_Alias模板其中DENY模板命令分别表示不允许使用sudo -i切换到root,不允许使用sudo修改root密码,不允许使用sudo添加用户到root组,不允许使用sudo执行shutdown命令,不允许执行halt命令,不允许使用sudo执行init命令,不允许使用sudo执行chattr(也可以考虑都去掉!然后在下面引用的时候使用!DENY建议使用因为这样话使用sudo -l看不到被禁用的命令)。注意%manager定义中/bin/su命令,这意味着manager组可以使用su切换到root且需要登录账户的密码验证如果放在最后则切换不需要使用密码。

Linux账号安全的简单设置_Linux账号安全_03

       确定账号已配置好、sudo权限设置好后再加,否则去掉i属性才能更改

       chmod 600 /etc/passwd

       chmod 600 /etc/gshadow

       chmod 600 /etc/groups

       chmod 600 /etc/gshadow

       chmod 600 /etc/sudoers

       chattr +i /etc/sudoers


       4.3 sudo基本操作

       sudo -l[l] [-AknS] [-g groupname|#gid] [-p prompt] [-U user name] [-u user name|#uid] [-g groupname|#gid] [command]

       sudo的常用选项

       sudo command 以root身份执行command命令

         sudo -bcommand  在后台执行指定的命令

         sudo -h 列出使用方法

         sudo -l 列出当前用户可以执行的命令只有在sudoers里的用户才能使用该选项。

         sudo -u username#uid command以指定用户的身份执行命令后面的用户是除root以外的用户名uid

         sudo -e file 不是执行命令,而是修改文件,相当于命令sudoedit

Linux账号安全的简单设置_Linux账号安全_04



三、LDAP集中认证

  随着系统平台的不断扩大,应用服务器也随之迅速增长,系统管理的难度、复杂度也越来越高,针对用户账号管理,后期应该考虑构建集中的身份验证系统这样既可以减少管理成本,也可以增强账号管理的安全性、减小系统管理、维护的复杂度。但集中管理,须注意认证服务器的安全性,因为如果一个授权账号被攻破或者泄露,那么所有授权该账号登陆的服务器都会被。这个以后讨论...

   全文脚本见附件,基于RHEL 6.2 x64测试....