【RedHat Linux 操作系统安装配置规范】

目录

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

    # chkconfigoff

    例如:

    # 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 rootLogin           Failures Latest failure     Fromroot                0   

如果用户被禁用,可以通过如下命令清除

[root@rhel7 ~]# pam_tally2 -u root --resetLogin           Failures Latest failure     Fromroot                8    04/25/17 01:26:29  tty1

2.禁止非root用户使用登录shell。

  • 使用下面命令列出系统中当前所有的帐户(包括root,系统帐户和用户帐户)的名称,uid以及登陆shell。

# awk -F: '{print $1 ":" $3 ":" $7}' /etc/passwdroot:0:/bin/bashbin:1:/sbin/nologindaemon:2:/sbin/nologin
  • 第二列数字大于1小于500的帐号就是系统帐号。

    使用下面命令强制锁定并且设置系统帐号的登陆shell为nologin(禁止登陆)

usermod -Lusermod -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

取消同组用户的rx权限

/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服务,操作步骤如下:

图片

3.12 防火墙设置

建议关闭

  • 在RedHat Enterprise Linux Server 6上:

    # chkconfig iptables

  • 在RedHat Enterprise Linux Server 7上:

    # systemctl disable firewalld

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值