目录
1 文档说明
1.1 文档简介
1.2 适用对象
1.3 生效范围
2 系统配置
2.1 安装
2.2 主机命名规范
2.3 磁盘管理
2.4 时间同步
2.5 服务的配置
2.6 命令时间戳记录与命令行提示符
2.7 ulimit设置
2.8 文件系统挂载选择设置
2.9 审计策略配置
2.10 日志配置
2.11 kdump配置
2.12 系统内核参数配置
2.13 crontab配置
3 安全配置
3.1 物理安全设置
3.2 口令策略设置
3.3 用户安全设置
3.4 系统登录安全设置
3.5 历史记录安全设置
3.6 系统敏感文件权限设置
3.7 CRON授权管理
3.8 高风险文件安全设置
3.9 SSHD安全配置
3.10 网络安全设置
3.11 SELINUX设置
3.12 防火墙设置
1 文档说明
1.1 文档简介
本规范为RedHat Linux操作系统的安装配置规范。
1.2 适用对象
本文档适用于Linux服务器系统管理员。
1.3 生效范围
2 系统配置
2.1安装
主要描述安装过程中的各项参数设置,该要求同时适用于手工安装和kickstart自动安装。
引导系统提示:选择“Installation”,正常安装系统
语言选择: 选择 EngLish
键盘布局:选择U.S. English
设置系统主机名:请参考章节“主机命名规范”进行系统主机名的设置
时区选择:深圳和上海地区统一选择“Asia/Shanghai”,海外分行应根据业务需求选择“Asia/Shanghai”或者当地时区,系统时钟使用UTC时间
root账户密码:密码复杂性配置要求,请参考“口令策略设置”
分区划分:请参考“磁盘管理”
软件包选择:操作系统安装的初始软件包选择建议如下
软件包名称 | 软件包说明 |
base(组) | 操作系统基础包 |
compat-libraries(组) | 操作系统兼容性库包,提供对老版本软件的支持 |
hardware-monitoring(组) | 硬件监控工具,提升系统定位能力 |
large-systems(组) | 大型系统工具集包,提供cgroup等管理工具 |
legacy-unix(组) | Unix兼容性包 |
performance(组) | 性能定位和监控工具,及时了解系统瓶颈 |
ftp | ftp客户端,环境维护管理员使用 |
telnet | telnet客户端,环境维护管理员使用 |
备注:软件包安装建议采用上述的最小安装方式,gcc/make等开发编译工具如非特殊需要,不应在生产系统中安装。若因生产需要,需要安装额外组件,请从规定的yum源服务器获取,不得通过其他途径安装。
2.2 主机命名规范
略
2.3 磁盘管理
磁盘配置要求:
在物理服务器上安装操作系统时,操作系统所在磁盘必须配置为RAID1的硬件磁盘阵列
物理机分区划分规范:
除/boot分区不能采用LVM外,其他所有分区都应采用LVM管理磁盘,另外应用程序如果使用LVM来管理,需要创建单独的VG,文件系统可按照下表来设置逻辑卷名称及相应空间(这里列出的为最低空间要求):
Mount Point | LV命名 | 最低配置(GB) | 备注 |
/boot | 1G | 必须是分区 | |
/ | /dev/mapper/VolGroup-lv_root | 50G | |
swap | /dev/mapper/VolGroup-lv_swap | 16G |
|
/tmp | /dev/mapper/VolGroup-lv_tmp | 10G | |
/var | /dev/mapper/VolGroup-lv_var | 30G | |
/var/crash | /dev/mapper/VolGroup-lv_var_crash | 50G | 用于存放vmcore |
/home | /dev/mapper/VolGroup-lv_home | 10G | |
/opt | /dev/mapper/VolGroup-lv_opt | 50G |
注:上述分区方案只用了RAID10操作系统硬盘,对于数据磁盘,需要根据应用情况进行规划。
对于内存大于50G的机器,/dev/mapper/VolGroup-lv_var_crash需要在业务上线前手工触发kernel panic来检测大小是否使用。
虚拟机分区划分规范:
除/boot分区不能采用LVM外,其他所有分区都应采用LVM管理磁盘,文件系统可按照下表来设置逻辑卷名称及相应空间(这里列出的为最低空间要求):
Mount Point | LV命名 | 最低配置(GB) | 备注 |
/boot | 1G | 必须是分区 | |
/ | /dev/mapper/VolGroup-lv_root | 10G | |
swap | /dev/mapper/VolGroup-lv_swap | 根据内存计算 | |
/tmp | /dev/mapper/VolGroup-lv_tmp | 5G | |
/var | /dev/mapper/VolGroup-lv_var | 10G | |
/var/crash | /dev/mapper/VolGroup-lv_var_crash | 等于内存大小 | 用于存放vmcore |
/home | /dev/mapper/VolGroup-lv_home | 5G | |
/opt | /dev/mapper/VolGroup-lv_opt | 10G |
swap的大小按照如下规则:
内存小于等于2G,swap为内存的3倍
内存大于2G,小于等于8G,swap为内存的2倍
内存大于8G,swap大小为16G(MAX)
如果有应用对于swap又特殊要求,按照应用的要求划分。
2.4 时间同步
时钟同步建议采用如下规范:
操作系统应开启时间同步服务,以进行时间同步,配置方法如下:
在RedHat Enterprise Linux Server 6上:
(1)添加时钟同步服务器,在/etc/ntp.conf文件中增加如下配置:
server xx.xx.xx.xx prefer
(2)启动ntp服务:
# service ntpd restart
(3)添加ntp服务到系统启动进程:
# chkconfig ntpd on
在RedHat Enterprise Linux Server 7上:
(1)加时钟同步服务器,在/etc/chrony.conf文件中增加如下配置:
server xx.xx.xx.xx prefer
(2)启动chronyd服务:
# systemctl start chronyd.service
(3)添加chronyd服务到系统启动进程:
# systemctl enable chronyd.service
时间同步最大阀值应设置为500秒,服务器与时间服务器的时间误差超过500秒时应停止同步,在RedHat Enterprise Linux Server 6上ntpd服务将自动退出,在RedHat Enterprise Linux Server 7上chronyd服务将忽略跳过,配置方法如下:
在RedHat Enterprise Linux Server 6上:
在配置文件/etc/ntp.conf首行添加如下内容:
tinker panic 500
在RedHat Enterprise Linux Server 7上:
在配置文件/etc/chrony.conf中添加如下内容:
maxchange 500 0 -1
时钟同步模式须采用微调模式,并禁止时间服务在服务启动或者重启时自动同步时间,配置方法如下:
在RedHat Enterprise Linux Server 6上:
在配置文件/etc/sysconfig/ntpd中的OPTIONS中添加 -x 选项,删除 -g 选项:
OPTIONS="-x -u ntp:ntp -p /var/run/ntpd.pid"
在RedHat Enterprise Linux Server 7上:
RHEL7上chrony默认已经开启微调模式,默认值是83333.333 ppm (one twelfth),即每秒同步 1/12 秒,在RHEL6上微调模式同步1秒需要2000秒的时间,即每秒同步0.5ms,需保证所有RHEL版本时间服务的微调模式一致,在RHEL7上需将微调模式的频率修改为500 ppm,即1/2000秒,配置如下:
注释或者删除配置文件/etc/chrony.conf中的如下内容:
#makestep 10 3
在配置文件/etc/chrony.conf中添加如下内容:
maxslewrate 500
以上所有修改之后,需要重新启动ntpd或者chronyd服务器,操作如下:
在RedHat Enterprise Linux Server 6上:
# service ntpd restart
在RedHat Enterprise Linux Server 7上:
# systemctl restart chronyd.service
服务器第一次与时间服务器进行时间同步需采用手动同步的方式,在同步之前需要检查与时间服务器的误差范围,若误差范围较大(超过预设500s),需要评估时间调整后对操作系统和业务的影响,检查方法如下:
# ntpdate -q <NTP Server IP地址>
手动同步方法如下:
# ntpdate <NTP Server IP地址>
注:手动同步时间时需要先停止时间服务,同步完成后才开启时间服务。
2.5 服务的配置
为提高系统的稳定性,减少系统网络配置上的安全漏洞,如非特殊需要,建议关闭以下系统服务:
服务名称 | 服务描述 |
cups | 打印服务 |
postfix | 邮件服务 |
pcscd | smart卡登录服务 |
smartd | 磁盘监控服务,对于做过RAID的磁盘无效 |
alsasound | 声卡服务 |
iscsitarget | iscsi target服务 |
smb | 与windows互访问的文件服务 |
acpid | acpi高级电源管理服务 |
cpuspeed | Cpu节能工具 |
iptables | ipv4防火墙服务 |
ip6tables | ipv6防火墙服务 |
firewall | 防火墙服务(RHEL7上才有的) |
备注:上述网络服务可通过下列命令停止并关闭:
在RedHat Enterprise Linux Server 5和6上:
# service
stop # chkconfig off 例如:
# service postfix stop
#chkconfig postfix off
在RedHat Enterprise Linux Server 7上:
# systemctl stop
# systemctl disable
例如:
# systemctl stop postfix.service
# systemctl disable postfix.service
建议打开以下系统服务:
服务名称 | 服务描述 |
kdump | 内存转储服务 |
cron | 定时服务 |
auditd | 审计服务 |
rsyslog | 日志服务 |
sysstat | 系统监控 |
sshd | 安全shell服务 |
irqbalance | 中断平衡服务(低时延应用需要关闭) |
network | 网络服务 |
2.6 命令时间戳记录与命令行提示符
在命令行提示符中显示时间戳,在/etc/profile.d目录中添加ps1.sh脚本(不建议直接修改/etc/bashrc文件),内容如下(脚本内容可从/etc/bashrc文件中复制):
#!/bin/bash
# are we an interactive shell?
if [ "$PS1" ]; then
if [ -z "$PROMPT_COMMAND" ]; then
case $TERM in
xterm*)
if [ -e /etc/sysconfig/bash-prompt-xterm ]; then
PROMPT_COMMAND=/etc/sysconfig/bash-prompt-xterm
else
PROMPT_COMMAND='printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"'
fi
;;
screen)
if [ -e /etc/sysconfig/bash-prompt-screen ]; then
PROMPT_COMMAND=/etc/sysconfig/bash-prompt-screen
else
PROMPT_COMMAND='printf "\033]0;%s@%s:%s\033\\" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"'
fi
;;
*)
[ -e /etc/sysconfig/bash-prompt-default ] && PROMPT_COMMAND=/etc/sysconfig/bash-prompt-default
;;
esac
fi
# Turn on checkwinsize
shopt -s checkwinsize
[ "$PS1" = "\\s-\\v\\\$ " ] && PS1="[\u@\h \W]<$(date +'%Y%m%d') \t>\\$ "
fi
复制
2.7 ulimit设置
不恰当的limit设置会导致系统或者应用程序运行出现错误,应对/etc/security/limits.conf配置文件中的参数进行设置,并将/etc/security/limits.d/90-nproc.conf配置文件中的以下行注释:
#* soft nproc 1024
配置文件/etc/security/limits.conf中主要参数的说明及配置值如下所示:
应用程序core大小设置,为防止大量的core文件占用系统,建议应用程序core大小限制为100M以下,在配置文件中增加如下两行:
* soft core 102400
* hard core 102400
单个程序打开的最大文件句柄数,不应设置过小,建议设置为5000:
* soft nofile 5000
* hard nofile 5000
对于需要较多的文件句柄数的应用,例如Web服务器,可以根据应用需要设置合适的值,但需要指定应用用户,例如针对test用户:
test soft nofile 65535
test hard nofile 65535
单个程序创建的最大线程数,一般建议设置为5000:
* soft nproc 5000
* hard nproc 5000
对于需要较多线程数的应用,例如Web服务器,可以根据应用需要设置合适的值,但需要指定应用用户,例如针对test用户:
test soft nproc 65535
test hard nproc 65535
其他ulimit参数除非有特需要求,不应修改,例如: data/stack程序数据段和堆栈段大小,rss程序驻留在系统中占有内存最大值,memlock/locks内存锁大小和文件锁个数。
2.8 文件系统挂载选择设置
修改文件系统默认选项,提升文件系统稳定性和安全性。安装后应做如下修改:
对/tmp和/var分区增加nodev,nosuid选项
对/home分区增加nosuid选项
针对ext3、ext4分区,增加errors=panic选项,避免文件系统亚健康
例如,针对/home分区的配置,可编辑/etc/fstab, 然后进行如下修改:
/dev/vg/lv_home /home ext4 defaults,nosuid,errors=panic 0 0
2.9 审计策略配置
开启audit审计功能,可以监控指定用户或目录,缺省会监控root的所有登录和操作。
添加规则到 /etc/audit/audit.rules(RHEL7为/etc/audit/rules.d/audit.rules) 文件中,实现监控所有用户的登录行为,包含用户所有操作,以及shell脚本中的命令
-a exit,always -F arch=b64 -S execve -k exec
-a exit,always -F arch=b32 -S execve -k exec
添加后使用ausearch -k exec来列出用户操作的记录。
添加规则到 /etc/audit/audit.rules(RHEL7为/etc/audit/rules.d/audit.rules) 文件中,实现对重点配置文件的监控(根据实际应用额外添加文件列表)
-w /etc/crontab -p wa -k crontab
-w /etc/hosts -p wa -k hosts
-w /etc/hosts.allow -p wa -k hosts-allow
-w /etc/hosts.deny -p wa -k hosts-deny
-w /etc/fstab -p wa -k fstab
-w /etc/passwd -p wa -k passwd
-w /etc/shadow -p wa -k shadow
-w /etc/group -p wa -k group
-w /etc/gshadow -p wa -k gshadow
-w /etc/ntp.conf -p wa -k ntp (RHEL7为-w /etc/chrony.conf -p wa -k ntp)
-w /etc/sysctl.conf -p wa -k sysctl
-w /etc/security/limits.conf -p wa -k limits
-w /boot/grub/grub.conf -p wa -k grub (RHEL7为-w /boot/grub2/grub.cfg -p wa -k grub)
-w /etc/ssh/sshd_config -p wa -k ssh
-w /etc/udev/rules.d/ -p wa -k udev
-w /etc/profile -p wa -k profile
-w /etc/kdump.conf -p wa -k kdump
-w /etc/lvm/lvm.conf -p wa -k lvm
-w /etc/login.defs -p wa -k login-defs
-w /etc/rsyslog.conf -p wa -k rsyslog
-w /etc/sysconfig/i18n -p wa -k i18n (RHEL7为-w /etc/locale.conf -p wa -k i18n)
-w /etc/sysconfig/network -p wa -k network
-w /etc/multipath.conf -p wa -k multipath
添加后使用ausearch -k
来列出对应文件的修改记录,如ausearch -k multipath 。配置audit日志,audit日志文件自动保存在/var/log/audit/目录中。
每个log文件超过50M时进行轮换,保持最后4个log,可以通过/etc/audit/auditd.conf进行配置,修改如下选项:
num_logs = 4 #个数
max_log_file = 50 # 大小(MB)
默认情况下,审计日志为每20条flush一次,为了防止由于大量后台脚本运行产生的审计日志在频繁flush到磁盘,导致磁盘使用率过高(特别是没有cache直接落盘的RAID卡),所以需要修改flush模式为NONE。可以通过编辑audit配置文件/etc/audit/auditd.conf进行配置,修改如下选项:
flush = NONE
启动审计服务:
# service auditd start
# chkconfig auditd on
2.10 日志配置
系统缺省已经开启syslog/rsyslog服务,禁止关闭。系统syslog/rsyslog服务会将所有系统日志自动记录到/var/log/messages文件中,系统日志永久保留。
在/etc/rsyslog.d/目录添加filter.conf文件来实现日志过滤,文件内容如下:
:msg, ereregex, "(bin|sbin|sa)\/(ping|top|mpstat|iostat|iotop|vmstat|sar|sadc|sh)\"" ~
:msg, ereregex, "(sbin|udev)\/(fstab_import|udisks-part-id|path_id|edd_id|scsi_id)\"" ~
启动日志服务服务:
在RedHat Enterprise Linux Server 6上:
# service rsyslog start #若更改了配置文件则使用restart替换start
# chkconfig rsyslog on
在RedHat Enterprise Linux Server 7上:
# systemctl start rsyslog.service #若更改了配置文件则使用restart替换start
# systemctl enable rsyslog.service
# systemctl start systemd-journald.service #若更改了配置文件则使用restart替换start
2.11 kdump配置
系统应开启kdump服务,以便在服务器系统崩溃时能够加载捕获内核,将系统内核崩溃前的内存镜像保存并进行转储,以定位内核崩溃的原因并改进。
默认kdump保存路径为/var/crash,如非特殊不可修改。
配置kdump服务需要提前在grub内核引导项中设置crashkernel=xxM参数,xx值通过下表来计算:
内存大小 | Crashkernel值 |
<2GB | 128MB |
2GB-6GB | 256MB |
6GB-8GB | 512MB |
>8GB | 768MB |
配置完crashkernel后需要重启系统才可生效,然后开启kdump服务的命令如下:
在RedHat Enterprise Linux Server 6上:
# service kdump start
# chkconfig kdump on
在RedHat Enterprise Linux Server 7上:
# systemctl start kdump.service
# systemctl enable kdump.service
配置完kdump服务后,需要使用以下的命令来触发kernel panic检测kdump服务是否配置正确:
# echo c > /proc/sysrq-trigger # 该命令会导致系统crash,切莫在生产环境使用!!
若kdump提示out-of-memory错误,可根据情况增大crashkernel的值。
2.12 系统内核参数配置
编号 | 默认值(如非特殊需要,不应修改) | 说明 |
1 | vm.min_free_kbytes = 16384 | 最小内存水平线,free内存低于此值,系统会强制回收内存。建议最大设置不要超过:64000 KB。应使用默认值。 最小值:128K, 最大值:65536K |
2 | vm.vfs_cache_pressure = 100 | vfs层cache保留倾向,> 100表示系统尝试多回收vfs cache,< 100表示系统尽量多保留vfs cache。 |
3 | vm.dirty_ratio = 40 | Page cache达到40% total memory(含swap)时,系统尝试将cache回写到磁盘,回收内存。 |
4 | vm.page-cluster = 3 | 每次写入swap的最小页面数, 默认是2的3次方=8个页面。 |
5 | (需要根据内存大小使用计算公式来计算,例如8G内存:) fs.file-max = 838860 | kernel允许的最大文件句柄数。系统启动时根据内存自动调节,打开一个文件大概需要1k,总数不应超过系统内存的10%:计算公式为: Max(N, NR_FILE) N=(mempages * 4)/10 NR_FILE=4096 例如内存为8G的设置为(8*1024*1024/4)*4/10=838860 |
6 | kernel.shmmax | 共享内存的最大值,系统启动时根据内存自动调节,如非特殊需要,不应修改。此值最大设置为物理内存的90%。 |
7 | kernel.shmmni = 4096 | 共享内存的最小值,系统默认值为4096,如非特殊需要,不应修改。 |
8 | kernel.core_uses_pid = 0(默认为1) kernel.core_pattern = corefile/core-%e | 应用程序core文件的命名设置,为防止应用程序生成大量core文件占用系统空间,应用程序core文件应设置为仅生成一个。其中core_pattern的路径可修改为其他路径。默认路径为应用用户家目录,且没有完全开启,如需完全开启,只需在应用用户家目录下创建corefile目录即可(但需注意home目录空间比应用程序所用内存要大)。 |
9 | kernel.sysrq = 1 | 系统hung住时,可以使用Alt+Sysrq+c来收集vmcore |
注:以上设置选项在/etc/sysctl.conf中修改,执行: sysctl -p 生效。
2.13 crontab配置
默认cron任务的输出会以邮件的方式发送给管理员,由于系统默认已经关闭邮件服务,所以邮件会发送失败,最后会被扔在/var/spool/postfix/maildrop目录下,最后的结果是导致/var目录使用率逐渐增大。
正规的crontab写法需要将cron作业的输出重定向到指定的输出文件中,为了防止cron作业写法不正规导致不必要的问题,我们可以修改crontab配置文件,关闭邮件发送,编辑文件/etc/crontab,修改如下选项:
MAILTO=""
另外用户在使用crontab -e命令创建自定义cron job时,需要在第一行添加MAILTO="",示例如下:
MAILTO=""
* * * * * /bin/sh ********.sh &> /dev/null
3 安全配置
3.1 物理安全设置
1.应禁止使用usb存储设备,防止物理usb设备引入木马文件。
# echo "install usb-storage /bin/true" >> /etc/modprobe.d/usb-storage.conf
2.必须增加grub密码,避免用户通过grub直接修改操作系统引导,增加系统物理安全性:
在RedHat Enterprise Linux Server 6上:
执行grub-md5-crypt命令,根据提示输入要设置的密码,此时会得到一串加密过的密码密文。
在/etc/grub.conf文件的splashimage开头的下一行,增加一行“password --md5 ******”,其中“******”为使用命令grub-md5-crypt2产生的密码密文。
在RedHat Enterprise Linux Server 7上:
执行grub2-mkpasswd-pbkdf2命令,根据提示输入要设置的密码,此时会得到一串加密过的密码密文。
在/etc/grub.d/40_custom文件的最后,增加
set superusers="grubuser"
password_pbkdf2 grubuser grub.pbkdf2.sha512*******
其中“grub.pbkdf2.sha512*******”为使用命令grub2-mkpasswd-pbkdf2产生的密码密文。
3.必须禁止Control+Alt+Delete直接重启服务器:
在RedHat Enterprise Linux Server 6上:
# sed -i 's/^start on control-alt-delete/#start on control-alt-delete/g' /etc/init/control-alt-delete.conf
在RedHat Enterprise Linux Server 7上:
systemctl mask ctrl-alt-del.target
4.禁止交互式启动:
在RedHat Enterprise Linux Server 6上:
# sed -i 's/^ PROMPT=yes/ PROMPT=no/g' /etc/sysconfig/init
3.2 口令策略设置
1.口令复杂度规定
密码复杂性配置应满足如下要求
密码长度至少为12位,且含有如下字符类型中的四种:
英语大写字母 A, B, C, … Z
英语小写字母 a, b, c, … z
西方阿拉伯数字 0, 1, 2, … 9
非字母数字字符,如标点符号,@, #, $, %, &, *等
在RedHat Enterprise Linux Server 6上:
# sed -i "s/^\(password[[:space:]]*requisite[[:space:]]*pam_cracklib.so\).*/\1 try_first_pass retry=6 minlen=12 dcredit=-1 ucredit=-1 ocredit=-1 lcredit=-1 enforce_for_root/g" /etc/pam.d/system-auth-ac
在RedHat Enterprise Linux Server 7上:
# sed -i "s/^\(password[[:space:]]*requisite[[:space:]]*pam_pwquality.so\).*/\1 try_first_pass local_users_only retry=6 minlen=12 dcredit=-1 ucredit=-1 ocredit=-1 lcredit=-1 enforce_for_root authtok_type=/g" /etc/pam.d/system-auth-ac
密码历史为3次,是指修改口令时禁止使用最近3次已使用过的密码口令(己使用过的口令会被保存在 /etc/security/opasswd 下面)。
在RedHat Enterprise Linux Server 6上:
# sed -i '/^password[[:space:]]\{1,\}requisite[[:space:]]\{1,\}pam_cracklib.so/a\password required pam_pwhistory.so use_authtok remember=3 enforce_for_root' /etc/pam.d/system-auth-ac
在RedHat Enterprise Linux Server 7上:
# sed -i '/^password[[:space:]]\{1,\}requisite[[:space:]]\{1,\}pam_pwquality.so/a\password required pam_pwhistory.so use_authtok remember=3 enforce_for_root' /etc/pam.d/system-auth-ac
2. 口令有效期规定
用户应满足如下用户口令策略,修改/etc/login.defs文件,修改如下参数的值:
PASS_MAX_DAYS 9999 (最长期限9999天)
PASS_MIN_DAYS 0 (最短期限0天)
PASS_MIN_LEN 12 (最少12个字符)
PASS_WARN_AGE 7 (提前7天提示密码修改)
3.3 用户安全设置
1.系统应禁止除root用户之外UID为0的用户
系统中每一个用户都被分配一个用户ID号,ID 号为 0 是为 root 保留的,UID 号 1-499 是为系统其它预定义的帐号保留的,UID为0拥有系统的最高特权,为了系统安全需要封存root账号,
检查方法:
# awk -F: '($3 == 0) { print $1 }' /etc/passwd
返回值包括“root”以外的条目,则应修正。
2.sudo设置
1.如非特殊需要,应用管理员需要以应用账号登陆,需要使用特权指令时,使用sudo权限。使用以下方法来配置sudo权限:
# visudo
例如:赋予test用户使用fdisk命令的权限,在visudo命令打开的配置文件最后添加:
#创建alias PRIVUSERS 然后添加 sudo 用户test,这样可以使多个用户有相同的权限
User_Alias PRIVUSERS = test
#创建 alias PRIVSERVICES 这样便于以后可以添加多个命令
Cmnd_Alias PRIVSERVICES = /sbin/fdisk
#指定之前创建的alias给指定的用户/用户组
PRIVUSERS ALL=(ALL) PRIVSERVICES
sudo使用方法:
以test用户在运行命令前加sudo,然后输入test用户的密码(非root密码)
oracle$ sudo /sbin/fdisk -l
3.4 系统登录安全设置
1.账号登录
连续6次输错密码禁用一段时间,建议配置成300秒
在RedHat Enterprise Linux Server 6和7上:
# sed -i '/auth[[:space:]]*required[[:space:]]*pam_env.so/a\auth required pam_tally2.so onerr=fail deny=6 unlock_time=300 even_deny_root root_unlock_time=300' /etc/pam.d/system-auth-ac
# sed -i '/account[[:space:]]*required[[:space:]]*pam_unix.so/i\account required pam_tally2.so' /etc/pam.d/system-auth-ac
# sed -i '/auth[[:space:]]*required[[:space:]]*pam_env.so/a\auth required pam_tally2.so onerr=fail deny=6 unlock_time=300 even_deny_root root_unlock_time=300' /etc/pam.d/password-auth-ac
# sed -i '/account[[:space:]]*required[[:space:]]*pam_unix.so/i\account required pam_tally2.so' /etc/pam.d/password-auth-ac
复制
查看用户输入错误密码的次数
[root@rhel7 ~]# pam_tally2 -u root
Login Failures Latest failure From
root 0
复制
如果用户被禁用,可以通过如下命令清除
[root@rhel7 ~]# pam_tally2 -u root --reset
Login Failures Latest failure From
root 8 04/25/17 01:26:29 tty1
复制
2.禁止非root用户使用登录shell。
使用下面命令列出系统中当前所有的帐户(包括root,系统帐户和用户帐户)的名称,uid以及登陆shell。
# awk -F: '{print $1 ":" $3 ":" $7}' /etc/passwd
root:0:/bin/bash
bin:1:/sbin/nologin
daemon:2:/sbin/nologin
复制
第二列数字大于1小于500的帐号就是系统帐号。
使用下面命令强制锁定并且设置系统帐号的登陆shell为nologin(禁止登陆)
usermod -L
usermod -s /sbin/nologin
复制
3.5 历史记录安全设置
开户历史命令时间戳
# echo 'export HISTTIMEFORMAT="%F %T"' >> /etc/profile
配置系统超时自动退出,建议配置成7200秒
# echo "export TMOUT=7200" >> /etc/profile
配置命令历史命令条数为5000
# echo "export HISTSIZE=5000 " >> /etc/profile
配置命令历史记录条数为50000
# echo "export HISTFILESIZE=50000 " >> /etc/profile
对历史记录应用如下规则
目录拼写错误自动修正
将跨多行的一条命令记录到一条历史命令中
退出shell时将历史命令附加到HISTFILE变量指定的文件中,而不是重写这个文件
每执行完一条命令后,将命令加入到历史文件中(建议记录到日志文件中,记录时间,命令项,执行用户)
忽略重复的命令
不记录无危害的命令到文件中
echo "shopt -s cdspell" >>/etc/profile
echo "shopt -s cmdhist" >> /etc/profile
echo "shopt -s histappend" >> /etc/profile
echo "export PROMPT_COMMAND='history -a'" >> /etc/profile
echo 'HISTCONTROL="ignoredups“' >> /etc/profile
echo 'export HISTIGNORE=\"&:ls:[bf]g:ps:history:exit\"' >> /etc/profile
3.6 系统敏感文件权限设置
# chmod 400 /etc/crontab (缺省是644)
# chmod 400 /etc/securetty (缺省是600)
# chmod 600 /boot/grub/grub.conf (缺省是600)
# chmod 600 /boot/grub2/grub.cfg (缺省是644)(仅针对RHEL7)
# chmod 600 /etc/inittab (缺省是644)
# chmod 600 /etc/login.defs (缺省是644)
其他目录权限设定
权限限定 | 目录项 | 缺省值 |
取消other用户rwx权限 | /var/log/boot.log* | 644 |
/var/log/cron* | 600 | |
/var/log/dmesg | 644 | |
/var/log/ksyms* | n/a | |
/var/log/httpd/* | 644 | |
/var/log/maillog* | 600 | |
/var/log/messages* | 600 | |
/var/log/news/* | n/a | |
/var/log/pgsql | n/a | |
/var/log/rpmpkgs* | n/a | |
/var/log/samba/* | 644 | |
/var/log/sa/* | 644 | |
/var/log/scrollkeeper.log | n/a | |
/var/log/secure* | 600 | |
/var/log/spooler* | 600 | |
/var/log/squid/* | n/a | |
/var/log/vbox/* | n/a | |
/var/log/utmp | n/a | |
/var/log/boot.log* | 644 | |
/var/log/cron* | 600 | |
/var/log/maillog* | 600 | |
/var/log/messages* | 600 | |
/var/log/pgsql | n/a | |
/var/log/secure* | 600 | |
/var/log/spooler* | 600 | |
取消other用户的rx权限 | /var/log/httpd/ | 644 |
/var/log/samba/ | 644 | |
/var/log/squid/ | n/a | |
/var/log/sa/ | 644 | |
取消同组用户的w权限 | /var/log/gdm/ | n/a |
/var/log/httpd/ | 644 | |
/var/log/news/ | n/a | |
/var/log/samba/ | 644 | |
/var/log/squid/ | n/a | |
/var/log/sa/ | 644 | |
/var/log/vbox/ | n/a | |
同组用户取消rx权限 | /var/log/httpd/ | 644 |
/var/log/vbox/samba/ | n/a | |
/var/log/vbox/sa/ | n/a |
去掉所有非suid程序的other可写属性

Home目录属性设定

3.7 CRON授权管理
除root和特定运行维护的账号拥有CRON权限外,其他账号不应具有该权限。
配置方法:将允许拥有CRON权限的账号加入到/etc/cron.allow配置文件中。
3.8 高风险文件安全设置
rcp,rsh,rlogin等远程拷贝和登录命令会使用rshost相关文件,这些命令存在较高风险,应禁止使用,并在实际使用中用scp, ssh等命令替代。其相关配置文件应该删除。
删除命令如下:
# rm /root/.rhosts /root/.shosts /etc/hosts.equiv /etc/shosts.equiv
3.9 SSHD安全配置
对于安全和性能的要求需要修改sshd的默认配置。
以下灰色字体代表默认选项,未做修改。
加重字体代表所作修改。
设定项 | 说明 | 设置值 |
Port | 强制使用22号端口 | 22 |
LogLevel | 记录所有信息,包括info信息 | 不用改 |
PasswordAuthentication | 允许密码认证 | yes |
MaxAuthTries | 最大重试次数从6次修改为3次 | 6 |
PermitRootLogin no | 禁止root用户ssh远程登录 | No |
PermitEmptyPasswords | 当使用密码认证时,是否允许空密码,设置成不允许 | no |
StrictModes | 在用户登录前,是否检查用户文件和目录的属主和权限 | yes |
Protocol | 使用版本为2的ssh协议 | 2 |
UseDNS | 是否使用DNS | no |
3.10 网络安全设置
设备的conf/all属性与conf/interface属性的相互影响规则请参考https://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt
MAX: 取conf/all与conf/interface两者中最大值.
OR: conf/all与conf/interface两者中一个为真时即生效
编号 | 设置值 | 说明 | 缺省值 | 规则 |
1 | net.ipv4.conf.all.arp_ignore = 0 net.ipv4.conf.default.arp_ignore = 0 | 不允许ignore arp(只有LVS时才需要此选项) | 0 | Max |
2 | net.ipv4.conf.all.arp_filter = 0 net.ipv4.conf.default.arp_filter = 0 | 不允许ignore arp filter(只有LVS时才需要此选项) | 0 | OR |
3 | net.ipv4.conf.all.rp_filter = 0 net.ipv4.conf.default.rp_filter = 0 | 不开启rp_filter(防止ip欺骗) | Rhel6 0 Rhel7 1 RHEL6和RHEL7 net.ipv4.conf.default.rp_filter = 1 | MAX |
4 | net.ipv4.conf.all.log_martians =0 net.ipv4.conf.default.log_martians = 0 | 不记录探测包,源路由包,重定向包 | 0 | OR |
5 | net.ipv4.conf.all.promote_secondaries = 1 net.ipv4.conf.default.promote_secondaries = 1 | 禁止删除primary ip,当secondary ip地址与primary ip地址属于同一个网段时,删除primary ip地址时也会删除secondary ip地址 | Rhel6 0 Rhel7 1 | n/a |
6 | net.ipv4.ip_no_pmtu_disc = 1 | 禁用ip path mtu discover | 0 | n/a |
7 | net.ipv4.conf.all.forwarding = 0 net.ipv4.conf.default.forwarding = 0 | 禁用ip转发 | 0 | n/a |
8 | net.ipv4.icmp_echo_ignore_broadcasts = 1 | 禁止响应目的地为广播地址类型为echo的icmp包。 | 1 | n/a |
9 | net.ipv4.conf.all.accept_source_route = 0 net.ipv4.conf.default.accept_source_route = 0 | 禁用源地址路由 | 0 | AND |
10 | net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.default.accept_redirects = 0 | 拒绝路由重定向包 | 1 | 当interface的forwarding是enabled时AND, 当interface的forwarding是disabled时OR, |
11 | net.ipv4.conf.all.secure_redirects = 0 net.ipv4.conf.default.secure_redirects = 0 | 也不允许网关发送的路由重定向包 | 1 | OR |
12 | net.ipv4.tcp_timestamps = 1 | 开启tcp时间戳选项 | 1 | n/a |
13 | net.ipv4.icmp_ignore_bogus_error_responses = 1 | 某些路由器忽略RFC1122规定的包,发送假的错误消息给源主机,导致源主机记录大量错误信息到日志中 | 1 | OR |
14 | net.ipv4.conf.all.proxy_arp = 0 net.ipv4.conf.default.proxy_arp = 0 | 关闭arp代理 | 0 | OR |
15 | net.core.somaxconn = 1024 net.ipv4.tcp_max_syn_backlog = 8192 | 最大的syn包队列设置,加大tcp会话等待数 对于需要支撑高并发的业务服务器,可以根据压力测试情况,将该值增大。 | net.core.somaxconn=128 Net.ipv4.tcp_max_syn_backlog = 1024 | n/a |
16 | net.ipv4.tcp_syncookies = 1 | 防止客户端使用syn包打开半链接进行拒绝攻击, | 1 | n/a |
17 | net.ipv4.tcp_fin_timeout = 60 | 本端关闭的链接从FIN_WAIT_2到TIME_WAIT状态设置为60 | 60 | n/a |
18 | net.ipv4.ip_forward = 0 | 禁止IP转发 | 0 | n/a |
19 | net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.default.send_redirects = 0 | 禁止发送重定向报文 | 1 | OR |
20 | net.ipv4.tcp_keepalive_time = 150 net.ipv4.tcp_keepalive_probes = 5 net.ipv4.tcp_keepalive_intvl = 6 | TCP keepalive设置 | 7200 9 75 | n/a |
注:以上设置选项在/etc/sysctl.conf中修改,执行: sysctl -p 生效
3.11 SELINUX设置
为了更方便的管理系统及应用程序服务,如非特殊需要,建议关闭系统的SELinux服务,操作步骤如下:
建议关闭
在RedHat Enterprise Linux Server 6上:
# chkconfig iptables
在RedHat Enterprise Linux Server 7上:
# systemctl disable firewalld
本内容由社区会员上传,相关版权归原作者所有,点击阅读原文可下载原word文档 觉得本文有用,请转发、点赞或点击在看,让更多同行看到
资料/文章推荐:
欢迎关注社区以下 “系统运维”技术主题 ,将会不断更新优质资料、文章。地址:
http://www.talkwithtrend.com/Topic/112795
长按二维码关注公众号
*本公众号所发布内容仅代表作者观点,不代表社区立场;封面图片由版权数据库授权使用