实验案例

某公司新增了一台企业级服务器,已安装运行RHEL6操作系统,由系统运维部、软件开发部、技术服务部共同使用。由于用户数量众多,且使用时间不固定,要求针对账号和登录过程采取基本的安全措施。

 

需求描述

1.允许用户radmin使用su命令进行切换,其他用户一律禁止切换身份。

2.授权用户zhangsan管理所有员工的账号,但禁止其修改root用户的信息。

3.授权用户lisi能够执行/sbin/usr/sbin目录下的所有特权命令,不需要密码验证。

4.所有的susudo操作,必须在系统日志文件中进行记录。

5.禁止使用Ctrl+Alt+Del快捷键,只开放tt3tt5终端,为GRUB引导菜单设置密码。





1.限制使用su命令

(1)修改认证文件/etc/pam.d/su,启用pam_wheel.so认证模块。

wKiom1g1YBOBelfCAAACEudp91E073.png

wKiom1g1YBPwdTEQAAACNBwEFvQ408.png

去掉此行开头的#

 

(2)radmin用户加入到wheel组。

wKioL1g1YBPiEn48AAADRNOhllM444.png


(3)验证除了rootradmin以外,均不能使用su命令进行切换。

Linux系统安全及应用_第1张图片


补充:

1.切换用户时,使用的选项-等同于--login-l,表示切换用户后进入目标用户的登录Shell环境(切换到目标用户的宿主目录),若缺少此选项则仅切换身份、不切换用户环境。

2.使用su命令切换用户的操作将会记录到安全日志/var/log/secure文件中。

 

2.设置sudo授权

(1)授权用户zhangsan使用useradduserdelpasswdusermod命令,但禁止其执行passwd rootusermod * root操作。

wKiom1g1YBSgxF-vAAAB8oRDH-A421.png

/etc/sudoers文件的默认权限为440,所以需要执行:w!命令强制保存。

可以使用专门的visudo工具进行编辑。


wKiom1g1YBTxjnzvAAAGExcfnOI169.png

授权记录的基本格式

User    MACHINE=COMMANDS(用户    主机=命令)

具体含义:

User:授权的用户名,授权一个组可以采用%组名的形式。

MACHINE:使用此配置文件的主机名,可以方便多个主机间共用同一份sudoers文件。

COMMANDS:允许授权的用户通过sudo方式执行的特权命令,需要填写命令程序的完整路径,多个命令之间以,分隔。可以使用通配符*”,取反符号“!”。


(2)授权lisi用户使用/sbin/*/usr/sbin/*命令,添加NOPASSWD,以取消验证。

wKioL1g1YBTTQcn9AAACgvf5dDc191.png


(3)添加Defaults logfile配置行,以启用sudo日志。

wKioL1g1YBSB-r1QAAACM4cnziU272.png

注意:通过sudo方式执行的操作并不记录,若要启用sudo日志记录,应在/etc/sudoers文件中增加Defaults logfile设置。

 

(4)分别以zhangsanlisi用户登录,验证授权的sudo 操作,并查看日志。

验证用户zhangsan权限

wKiom1g1YBWSMWyBAAACvkzbVBg826.png

wKiom1g1YBWwIzmWAAADXhQJbWs318.png

wKioL1g1YCjThcCUAAAG0RrgHCw625.png


验证用户lisi权限

wKiom1g1YCmz8PuQAAAG0qFHL0A624.png


查看sudo日志

Linux系统安全及应用_第2张图片


3.限制引导及登录过程

1)禁止ctrl+alt+del快捷键(防止主机以外重启)

wKiom1g1YCmi7365AAACwQ03XFg406.png

注销如下两个行:

wKioL1g1YCnhLvvOAAAERlTUi7g227.png

重启或执行"init q"生效

注意:

5.0系统需要修改/etc/inittab文件

# Trap CTRL-ALT-DELETE
# ca::ctrlaltdel:/sbin/shutdown -t3 -r now    #注销该行

7.0系统需要删除"/usr/lib/systemd/system/ctrl-alt-del.target"配置文件,该文件是同目录下"reboot.target"的软链接。

 

2禁用tty1tty2tty4tty6这四个终端

wKiom1g1YCrgbLCwAAACec0gQ3E909.png

wKioL1g1YCqBy9o1AAACEmjs31M727.png

wKiom1g1YCqRyBwqAAACM0iHiBs810.png

wKioL1g1YCqAQljQAAAB6qvU454668.png

控制tty终端开启数量的配置文件有两个


控制终端配置文件:

/etc/init/tty.conf//控制tty终端的开启

/etc/init/start-ttys.conf//控制tty终端的开启数量、设备文件

/etc/sysconfig/init//控制tty终端的开启数量、终端颜色


wKioL1g1YCrjPLdSAAABhfBbrXs953.png

重新读取文件,以更新配置,可以不用重新启动系统。


(3)grub.conf文件中的第一个title行之前添加密码配置。

wKiom1g1YDuBOzqlAAAEzVulisw652.png

grub-md5-crypt可以生成经过MD5算法加密的密码字符串,安全性更好。


wKioL1g1YDujtDB7AAACKGai4iQ227.png


wKiom1g1YDzzG-DAAAAEozqV4s0993.png

将密码配置项添加到第一个title之前

注意:为GRUB设置密码时,--md5...部分可以替换为明文的密码字符串,但是按选型稍差。

 

4)重启后进入到GRUB菜单界面,验证直接按e键已无法编辑引导参数。



知识点补充:

1.文件锁定

chattr +i 文件名       //锁定文件

chattr -i 文件名       //解锁文件

lsattr 文件名          //查看文件状态 

例如:

wKiom1g1YDzimxj9AAAHn9PC8fA889.png

锁定账号配置文件,就不能再添加、更改账号。


2.密码有效期

wKioL1g1YD3S-BQbAAACDgFQ3-M985.png

wKiom1g1YD2Q33qoAAABZOu3ORo748.png

修改配置文件/etc/login.defs,可以将密码有效期设为30天(适用于将要新建的用户)。

其他配置行,例如:

PASS_MIN_DAYS    0    #新建用户密码最短使用天数
PASS_WARN_AGE    7    #新建用户密码到期提前提醒天数

wKioL1g1YD2xx9phAAAB6UQHXBM559.png

使用chage命令设置已有账号密码的有效期为30天


wKiom1g1YD3AyRhHAAACBCZVPDc423.png

设置用户下次登录时必须更改密码(适用于批量创建的用户)

其他选项,例如:

#-m:设置密码最短使用天数
#-E:设置账号过期日期,例如"-E 2018-07-11"
#-W:设置到期提前提醒天数

3.历史命令

Bash终端环境中,历史命令的记录条数由变量HISTSIZE控制,默认为1000条。

wKioL1g1YFbxeikOAAACIl4NRn4195.png

命令:export HISTSIZE=历史命令条数            //适用于当前用户

Linux系统安全及应用_第3张图片

历史命令条数为15


wKioL1g1YD7yAl7pAAAB9Si7mQc210.png

wKiom1g1YD6zgbm2AAABHxZfS_4631.png

修改配置文件/etc/profile,可以影响系统中的所有用户//适用于新登陆的用户


wKioL1g1YFfi3CvwAAAB__mDn9E361.png

wKiom1g1YFeRj61mAAACMAbmowI106.png

当用户退出已登录的bash环境后,自动清空历史纪录。


4.闲置超时

wKioL1g1YFey3kwVAAACCjpNyGo306.png

命令:设置超时时间,指定时间没有任何输入就自动注销        //适用于当前用户


wKiom1g1YFiAicYHAAAB96ZRmGQ926.png

wKioL1g1YFixm3yQAAABXg44RYQ629.png

修改配置文件/etc/profile,可以影响所有用户//适用于所有用户

 

注意:闲置超时由变量TMOUT来控制的,默认单位为秒。

  必要时可以执行unset TMOUT取消TMOUT变量设置。

 

5.sudo命令--提升执行权限

典型的sudo配置记录中,每一行对应一个用户或组的sudo授权配置。特殊情况:

(1)wheel组的用户不需要验证密码即可执行任何命令,可以执行:

Vim /etc/sudoers

wKiom1g1YFiC_AnUAAADCkfG89w933.png

用户radmin属于wheel组,所以可执行任何命令。

 

(2)当使用相同授权的用户较多时,或者授权的命令较多时,可以采用集中定义的别名。

例如:

wKioL1g1YFixUYpIAAAHeVioMCA085.png

含义:允许用户fjcjerrytom在主机smtppop中执行rpmyum命令

注意:User_AliasHost_AliasCmnd_Alias为关键字

  OPERATORS(用户)、MAILSVRS(主机)、PKGTOOLS(命令)分别定义为别名,必须大写。

 

6.禁止root用户登录

linux系统中,login程序会读取/etc/securetty文件,以决定允许root用户从哪些终端登录系统。若要禁止root用户从指定终端登录,从该文件中注释掉对应的行即可。例如:

wKioL1g1YFjjaoAXAAACBNmmcRs113.png

wKiom1g1YGjglJ_pAAABKfu8TAo589.png

禁止root用户从tty5tty6终端登录

 

7.禁止普通用户

wKioL1g1YGjRDk9PAAAB90l0VnI595.png

只需要建立/etc/nologin文件即可,login程序会检查/etc/nologin文件是否存在,如果存在则拒绝普通用户登录系统(root用户不受限制)。


8.弱口令探测(john  the ripper

1)下载并安装

wKiom1g1YGmArz5yAAAGa95W5_c362.png

注意编译所在的路径

John the Ripper的官方网站是http://www.openwall.com/john/

 

查看是否安装成功

wKioL1g1YGnBWqSbAAAMN3awyik547.png

在子目录run/生成john程序

 

2)检测弱口令

wKioL1g1YGmh8ZzyAAADpslTSck508.png


检测结果,可以按ctrl+c强制终止

wKiom1g1YGnyEWqAAAARgrbZpa8885.png


结合选项--show查看破解出的账户列表

wKiom1g1YGnwc1JKAAAFN12jV0Q543.png


9.远程弱口令检测

hydra


10.网络扫描NMAP

(1)安装NMAP

wKioL1g1YGqTdZFlAAAHhDEDGWE972.png


(2)扫描语法及类型

nmap    [扫描类型]    [选项]    扫描目标


注意:扫描目标可以是主机名、IP地址、或网络地址等,多个目标用空格分隔;

  常用的选项有  -p:指定扫描的端口

-n:禁用方向DNS解析(加快扫描速度)

 

常用的扫描类型


-sSTCP SYN扫描(半开):只向目标发出SYN数据包,如果收到SYN/ACK响应包就认为目标端口正在监听,并立即断开连接;否则认为目标端口并未开放。

-sTTCP 连接扫描(全开):这是一个完整的TCP扫描方式,用来建立一个TCP连接,如果成功则认为目标端口正在监听,否则认为目标端口并为开放。

-sFTCP FIN扫描:开放的端口会忽略这种数据包,关闭的端口会回应RST数据包。

-sUUDP扫描:探测目标主机提供了哪些UDP服务。

-sPICMP扫描:类似于ping检测,快速判断目标主机是否存活,不做其他扫描。

-P0,跳过ping检测:这种方式认为所有的目标主机是存活的,当对方不响应ICMP请求时,使用这种方式可以避免因无法ping通而放弃扫描。


11.错误密码登录限制

修改/etc/pam.d/system-auth配置文件,添加如下行:

#连续输错10次密码,账号锁定5分钟
#防止口令暴力破解
auth        required      pam_tally.so onerr=fail deny=10 unlock_time=300


12.密码复杂度策略

修改/etc/pam.d/system-auth配置文件,添加如下行:

#至少8位,包含大小写字母和数字
password requisite pam_cracklib.so difok=3 minlen=8 ucredit=-1 lcredit=-1 dcredit=-1


12.SNMP团体字

snmp团体字默认配置的是public,修改/etc/snmp/snmpd.conf ,修改如下行:

#将public修改为自定的团体字即可
com2sec notConfigUser  default       public


14.SSH服务

修改/etc/ssh/sshd_config,修改如下行:

PermitRootLogin no    #禁止root ssh直接登录
Protocol 2            #设置版本为2
MaxAuthTries 3        #设置密码错误次数,默认为6


15.root登录源地址限制

修改/etc/ssh/sshd.conf设置PermitRootLogin no,限制了root不能ssh本地或远程登录,如果只允许从某个网段或IP地址使用root远程登录,采用如下方法:

(1)修改/etc/pam.d/sshd,低版本系统为/etc/pam.d/sshd.rpmsave,增加如下行:

account    required     pam_access.so      #加载模块

(2)修改/etc/security/access.conf,文件末尾添加:

+ : root : 172.16.244.11 172.16.248.0/24
+ : ALL  : cron crond :0 tty1 tty2 tty3 tty4 tty5 tty6
- : root : sshd : ALL
+ : root : ALL
+ : ALL  : 172.16.0.0/16
# 第一个字段:权限(permission),使用“+”表示授予权限,用“-”表示禁止权限。
# 第二个字段:用户(user),定义了用户、组以及用“@”表示的在不同主机上的同名用户和同一主机上不同名用户。
# 第三个字段:访问发起方(origins),定义了发起访问的主机名称、域名称、终端名称。


16.关闭不必要的服务

who -r    #查看当前运行级别
chkconfig --list <服务名>   #查看所有服务的状态
chkconfig --level  <服务名> on|off|reset    #设置服务在对应级别下是否开机启动

17.忽略其他主机的ICMP报文

修改/etc/sysctl.conf ,增加如下行:

net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.icmp_echo_ignore_all = 1