linux系统安全-2
4、常规安全配置
4.1 重要目录和文件权限
- 操作目的
- 合理配置重要目录和文件的权限,增强安全性
- 检查方法
- 使用命令“ls -l” 查看目录和文件的权限设置情况
- 加固方法
- 对于重要目录,建议执行如下类似操作:
- #chmod -R 750 /etc/rc.d/init.d/*
- 这样只有root可读、写和执行这个目录下的脚本。
4.2 umask值
- 操作目的
- 设置默认的umask值,增强安全性
- 检查方法
- 使用命令“umask”查看默认的umask值是否为027
- 加固方法
- 使用命令“vi /etc/profile”修改配置文件,添加行“umask 027”,即新创建的文件赋一个统一的默认的权限,即创建文件的属主有读、写、执行权限,同组的用户只有有读和执行权限,其他用户无任何权限,使用命令“umask 027”应用设置
4.3 Bash历史命令
- 操作目的
- 设置Bash保留历史命令的条数
- 检查方法
- 使用命令“cat /etc/profile|grep HISTSIZE=”和“cat /etc/profile|grep HISTFILESIZE=”查看保留历史命令的条数
- 加固方法
- 使用命令“vi /etc/profile”修改配置文件,修改HISTSIZE=5和HISTFILESIZE=5即保留最新执行的5条命令
4.4 登录超时
- 操作目的
- 设置系统登录后,连接超时时间,增强安全性
- 检查方法
- 使用命令“cat /etc/profile|grep TMOUT”查看TMOUT是否被设置
- 加固方法
- 使用命令“vi /etc/profiel”修改配置文件,添加“TMOUT=”行开头的注释,设置为“TMOUT=180”,即超时时间为3分钟
4.5 root路径
- 危害
- 如果在path设置中包含当前目录“.”的话,会有一定的安全隐患。比如说我们在某个目录下查看当前目录下的文件时会使用ls命令,如果恶意用户在当前目录创建一个名为ls的bash脚本,当path设置中包含当前目录“.”时,我们执行ls命令时会执行当前目录下的ls脚本,这样可能会有意想不到的效果,如果脚本带有恶意行为的话,会导致一定的安全问题。因此root用户环境变量path中不应该包含当前目录“.”。
- 操作目的
- 检查系统root用户环境变量path设置中是否包含“.”
- 检查方法
- root用户环境变量path中不应该包含当前目录“.”
- 以root用户身份执行如下命令:
- #echo $PATH
- /usr/local/sbin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:.
- 加固方法
- 使用命令“vi /erc/profile”,修改echo $PATH后面的路径
5、账户安全
5.1 禁用无用账号
- 操作目的
- 减少系统无用账号,降低风险
- 检查方法
- 使用命令“cat /etc/passwd”查看口令文件,与系统管理员确认不必要的账号
- FTP等服务的账号,如果不需要登录系统,shell应该/sbin/nologin
- 加固方法
- 使用命令“passwd -l <用户名>”锁定不必要的账号
5.2 账号策略
- 操作目的
- 防止口令暴力破解,降低风险
- 检查方法
- 使用命令“cat /etc/pam.d/system-auth”查看配置文件
- 加固方法
- 设置连续输错10次密码,账号锁定5分钟
- 使用命令“vi /etc/pam.d/system-auth”修改配置文件,添加auth required pam_tally.so onerr=fail deny=10 unlock_time=300
5.3 检查特殊账号
- 操作目的
- 查看空口令和root权限的账号
- 检查方法
- 使用命令“awk -F:'($2=="")' /etc/shadow”查看空口令账号
- 使用命令“awk -F:'($3==0)' /etc/passwd”查看UID为0的账号
- 加固方法
- 使用命令“passwd <用户名>”为空口令账号设定密码
- UID为0的账号应该只有root,设置UID方法:
- usermod -u UID <用户名>
5.4 口令周期策略
- 操作目的
- 加强口令的复杂度等,降低被猜解的可能性
- 检查方法
- 使用命令“cat /etc/login.defs|grep PASS”和“cat /etc/pam.d/system-auth”查看密码策略设置
- 加固方法
- 使用命令“vi /etc/login.defs”修改配置文件
- PASS_MAX_DAYS 90 #新建用户的密码最长使用天数
- PASS_MIN_DAYS 0 #新建用户的密码最短使用天数
- PASS_WARN_AGE 7 #新建用户的密码到期提前提醒天数
- 使用chage命令修改用户设置,例如
- chage -m 0 -M 30 -E 2000-01-01 -W 7 <用户名>
- 表示:将此用户的密码最长使用天数设置为30,最短使用天数设为0,账号2000年1月1日过期,过期前7天里警告用户
- 使用命令“vi /etc/login.defs”修改配置文件
5.5 口令复杂度策略
- 操作目的
- 加强口令的复杂度等,降低被猜解的可能性
- 检查方法
- 使用命令“cat /etc/pam.d/system-auth |grep pam_cracklib.so”查看密码复杂度策略设置
- 加固方法
- 建议在/etc/pam.d/system-auth 文件中配置:
- password requisite pam_cracklib.so difok=3 minlen=8 ucredit=-1|credit=-1 dcredit=-1
- 至少8位,包含一位大写字母,一位小写字母和一位数字
5.6 限制root远程登录
- 操作目的
- 限制root远程telnet登录
- 检查方法
- 使用命令“cat /etc/securetty |grep CONSOLE”查看是否禁止root远程登录
- 加固方法
- vi编辑/etc/securetty文件,配置:CONSOLE=/dev/tty01
5.7 限制用户su
- 操作目的
- 检查是否使用PAM认证模块禁止wheel组之外的用户su为root
- 检查方法
- 使用命令“cat /etc/pam.d/su|grep pam_wheel.so”查看配置文件,确认是否有相关限制
- 加固方法
- 编辑su文件(vi /etc/pam.d/su),在文件的开头添加相应配置
5.8 检查Grub/Lilo密码
- 操作目的
- 查看系统引导管理器是否设置密码
- 检查方法
- 使用命令“cat /etc/grub.conf|grep password”查看grub是否设置密码
- 使用命令“cat /etc/lilo.conf|grep password”查看lilo是否设置密码
- 加固方法
- vi编辑/etc/grub.conf
- splashimage这个参数下一行添加:password 密码
- 如果需要md5加密,可以添加一行:password --md5 密码
- vi编辑/etc/lilo.conf
- password=密码
5.9 SNMP团体字
- 操作目的
- 如果打开了SNMP协议,snmp团体字设置不能使用默认的团体字
- 检查方法
- 查看配置文件cat /etc/snmp/snmpd.conf
- 加固方法
- vi编辑/etc/snmp/snmpd.conf文件
- 应禁止使用public、private默认团体字,使用用户自定义的团体字,例如将以下设置中的public替换为用户自定义的团体字:
- com2sec notConfigUser default public
- 另外,如果不需SNMP服务的话,建议禁用
5.10 弱口令审计
- 操作目的
- 检查系统弱口令
- 检查方法
- 使用第三方工具来检查当前系统中存在的弱口令账号,这里我们使用John工具。
- 方法1 使用用户名的各种变体来尝试爆破弱口令
- #john /etc/shadow --single
- 方法2 指定密码字典使用内部常见弱口令进行有针对性的审计
- #john /etc/shadow --wordlist=pass.dic
- 加固方法
- 使用“passwd 用户名”命令为用户设置复制密码
6、服务进程
6.1 linux系统的服务/进程
- 系统守护进程(服务)
- 服务就是运行在网络服务器上监听用户请求的进程
- 服务是通过端口号来区分的
- 常见的服务及其对应的端口
- ftp:21
- ssh:22
- telnet:23
- smtp:25
- ssl:443
- http(www):80
- pop3:110
6.2 linux系统的服务/进程
- 系统守护进程(服务)
- 在UNIX/linux系统中,服务是一般通过inetd进程或启动脚本来启动。
- 通过inetd来启动的服务可以通过在/etc/inetd.conf文件进行注释来禁用。
- 通过启动脚本启动的服务可以通过改变脚本名称的方式禁用。
- pstree命令以树状图的方式展示进程之间的关系
- ps命令可以显示每个进程的pid\cpu\内存等
6.3 检查ssh服务
- 操作目的
- 对ssh服务进行安全检查
- 检查方法
- 使用命令“cat /etc/ssh/sshd_config”查看配置文件
- 加固方法
- 使用命令“vi /etc/ssh/sshd_config”编辑配置文件
- (1)不允许root直接登录——设置“PermitRootLogin”的值为no
- (2)修改ssh使用的协议版本——设置“Protocol”的版本为2
- (3)修改允许密码错误次数(默认为6次)——设置“MaxAuthTries”的值为3
- 使用命令“vi /etc/ssh/sshd_config”编辑配置文件
6.4 TCP Wrapper
- 操作目的
- 使用TCP Wrapper对libwrap库支持的程序做访问控制
- 检查方法
- 使用命令“cat /etc/hosts.allow”和“cat /etc/hosts.deny”查看配置
- 加固方法
- 使用命令“vi /etc/hosts.allow”和“vi /etc/hosts.deny”修改配置
- vi /etc/hosts.allow
- 按“i”进入编辑模式
- 加入:sshd:IP地址
- vi /etc/hosts.deny
- 按“i”进入编辑模式
- 加入:sshd:ALL
- (该配置为仅允许特定IP地址访问SSH)
6.5 NFS共享
- 操作目的
- 查看NFS共享
- 检查方法
- 使用“exportfs”查看NFS输出的共享目录
- 加固方法
- 使用命令“vi /etc/exports”编辑配置文件,删除不必要的共享
6.6 Syslogd认证相关记录
- 操作目的
- 查看所有日志记录
- 检查方法
- #cat /etc/rsyslog.conf | grep authpriv
- 查看是否有authpriv.* /var/log/secure
- 加固方法
- 添加相关日志的记录:
- 将authpriv设备的任何级别的信息记录到/var/log/secure文件中
6.7 Syslogd日志设置
- 操作目的
- 查看所有日志记录
- 检查方法
- 使用命令“cat /etc/rsyslog.conf”查看rsyslogd的配置
- 系统日志(默认) /var/log/messages
- cron日志(默认) /var/log/cron
- 安全日志(默认) /var/log/secure
- 加固方法
- 添加相关日志的记录
6.8 限制Ctrl+Alt+Del命令
- 操作目的
- 防止误使用Ctrl+Alt+Del重启系统
- 检查方法
- 使用命令“cat /etc/inittab|grep ctrlaltdel”查看输入行是否被注释
- 加固方法
- 先使用命令“vi /etc/inittab”编辑配置文件,在行开头添加注释符号“#”
- #ca::ctrlaltdel:/sbin/shutdown -t3 -r now,再使用命令“init q”应用设置
6.9 服务/进程安全
- 关闭不必要的服务:
- (1)使用命令“who -r”查看当前init级别
- (2)使用命令“chkconfig -list <服务名>” 查看所有服务的状态
- (3)使用命令“chkconfig -level <init级别> <服务名> on|off|reset”设置服务在各init级别下开机是否启动