#!/bin/bash############################################################ #### Script Name : security for Redhat7.0~7.6 #### By:Eren 2019-08-02 #### #############################################################创建系统运维用户chrootuser=chrootif ! id $user;thengroupadd -g 700 $useruseradd -g 700 -u 700 -m -G $user $userecho "chroot:1qaz@WSX" |chpasswdecho "user $user is created"fi#设置系统最小化开机启动项目systemctl stop firewalld.servicefor serv in ` systemctl list-unit-files | grep enabled|awk '{print $1}'`;do systemctl disable $serv ;donefor serv in autovt@.service crond.service getty@.service irqbalance.service kdump.service auditd.service microcode.service rsyslog.service sshd.service sysstat.service systemd-readahead-collect.service systemd-readahead-drop.service systemd-readahead-replay.service NetworkManager.service tuned.service lvm2-lvmetad.socket lvm2-lvmpolld.socket default.target multi-user.target runlevel2.target runlevel3.target runlevel4.target ;do systemctl enable $serv;done#设置单用户启动systemctl set-default multi-user.target#删除机器系统重启快捷键rm -f /usr/lib/systemd/system/ctrl-alt-del.target#设置NTP服务器cp /etc/chrony.conf /etc/chrony.conf.baksed -i 's/^server/#server/g' /etc/chrony.confsed -i '/#server 3/a\server 10.182.200.100' /etc/chrony.confecho "leapsecmode slew" >>/etc/chrony.confsystemctl restart chronydsystemctl enable chronyd#设置文件系统打开文件数##limitscat>>/etc/security/limits.conf<<EOF* soft nproc 20480* hard nproc 20480* hard nofile 20480* soft nofile 20480EOFsed -i "s/* soft nproc 4096/#* soft nproc 4096/g" /etc/security/limits.d/20-nproc.conf#设置系统目录权限chmod 400 /etc/crontabchmod 400 /etc/securetty#chmod 600 /boot/grub/grub.confchmod 644 /etc/hosts.allowchmod 644 /etc/hosts.denychmod 600 /etc/inittabchmod 644 /etc/login.defschmod 644 /etc/profilechmod 644 /etc/bashrcchmod 744 /usr/bin/consolehelper#设置系统密码策略#cp /etc/pam.d/system-auth-ac /etc/pam.d/system-auth-ac.bak#sed -i '/password requisite pam_pwquality.so.*$/s//& minlen=8 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1/' /etc/pam.d/system-auth-ac#sed -i '/password sufficient pam_unix.so.*$/s//& remeber=3/' /etc/pam.d/system-auth-ac#cp /etc/pam.d/password-auth-ac /etc/pam.d/password-auth-ac.bak#sed -i '/password requisite pam_pwquality.so.*$/s//& minlen=8 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1/' /etc/pam.d/password-auth-ac#sed -i '/password sufficient pam_unix.so.*$/s//& remeber=3/' /etc/pam.d/password-auth-ac/sbin/authconfig --passminlen=8 --update/sbin/authconfig --enablereqdigit --update/sbin/authconfig --enablereqlower --update/sbin/authconfig --enablerequpper --update/sbin/authconfig --enablereqother --update#设置系统账户有效时间cp /etc/login.defs /etc/login.defs.baksed -ie 's/PASS_MAX_DAYS\t99999/PASS_MAX_DAYS\t90/' /etc/login.defssed -ie 's/PASS_MIN_LEN\t5/PASS_MIN_LEN\t8/' /etc/login.defs#避免记录不存在用户的登录信息,避免用户误输入导致密码泄露echo "LOG_UNKFAIL_ENAB yes" >> /etc/login.defs#配置用户密码尝试次数为6次,超过6次后登录会话自动登出,避免自动连续暴力破解echo "LOGIN_RETRIES 6" >> /etc/login.defs#记录用户上次登录时间,用户登录时给予提示echo "LASTLOG_ENAB yes" >> /etc/login.defs#ssh访问时超出密码失败次数后锁定用户5分钟cp /etc/pam.d/login /etc/pam.d/login.baksed -i '/#%PAM/a\auth required pam_tally2.so deny=6 unlock_time=300' /etc/pam.d/logincp /etc/pam.d/sshd /etc/pam.d/sshd.baksed -i '/#%PAM/a\auth required pam_tally2.so deny=6 unlock_time=300' /etc/pam.d/sshd##sshdcp /etc/ssh/sshd_config /etc/ssh/sshd_config.baksed -i 's/^#PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_configsed -i '/#Banner none/a\Banner /etc/issue.net' /etc/ssh/sshd_configsed -i 's/^#UseDNS no/UseDNS no/' /etc/ssh/sshd_config#sed -i 's/^UsePAM yes/UsePAM no/' /etc/ssh/sshd_configsed -i 's/^#Port 22/Port 22/' /etc/ssh/sshd_configecho 'Authorized users only! All activity may be monitored and reported!'> /etc/motdcp /etc/issue /etc/issue_`date +\%Y\%m\%d`cp /etc/issue.net /etc/issue.net_`date +\%Y\%m\%d`echo 'Be sure you are authorized to access this system!' > /etc/issueecho 'Be sure you are authorized to access this system!' > /etc/issue.net#profileecho "export TMOUT=600" >> /etc/profileecho 'export HISTTIMEFORMAT="%F %T `whoami` " ' >>/etc/profilesed -i "s/export HISTFILESIZE=.*/export HISTFILESIZE=10000/g" /etc/profile#关闭SELINUXcp /etc/sysconfig/selinux /etc/sysconfig/selinux.baksed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config#kernel参数调优cat>>/etc/sysctl.conf<<EOFnet.ipv4.conf.all.arp_ignore = 0net.ipv4.conf.default.arp_ignore = 0net.ipv4.conf.all.arp_filter = 0net.ipv4.conf.default.arp_filter = 0net.ipv4.conf.all.rp_filter = 1net.ipv4.conf.all.log_martians =0net.ipv4.conf.default.log_martians = 0net.ipv4.conf.all.promote_secondaries = 0net.ipv4.ip_no_pmtu_disc = 1net.ipv4.conf.all.forwarding = 0net.ipv4.conf.default.forwarding = 0Net.ipv4.icmp_echo_ignore_broadcasts = 1net.ipv4.conf.all.accept_source_route = 0net.ipv4.conf.default.accept_source_route = 0net.ipv4.conf.all.accept_redirects = 0net.ipv4.conf.default.accept_redirects = 0net.ipv4.tcp_timestamps = 0net.ipv4.icmp_ignore_bogus_error_responses = 1net.ipv4.conf.all.proxy_arp = 0net.ipv4.conf.default.proxy_arp = 0net.ipv4.tcp_max_syn_backlog = 4096net.ipv4.tcp_syncookies = 1net.ipv4.tcp_fin_timeout = 60net.ipv4.ip_forward = 0net.ipv4.tcp_keepalive_time = 150net.ipv4.tcp_keepalive_probes = 5net.ipv4.tcp_keepalive_intvl = 6EOFsysctl -p &>/dev/null#rsyslogecho "*.err;auth.info /var/adm/messages" >>/etc/rsyslog.confsystemctl restart sshd.serviceecho "------ Modify is OK ------"
密码策略查看
[root@db ~]# ll /etc/pam.d/password-auth-ac-rw-r--r--. 1 root root 1033 5月 19 17:38 /etc/pam.d/password-auth-ac[root@db ~]# ll /etc/pam.d/system-auth-ac-rw-r--r--. 1 root root 1072 5月 19 17:38 /etc/pam.d/system-auth-ac[root@db ~]# cat /etc/pam.d/password-auth-ac#%PAM-1.0# This file is auto-generated.# User changes will be destroyed the next time authconfig is run.auth required pam_env.soauth required pam_faildelay.so delay=2000000auth sufficient pam_unix.so nullok try_first_passauth requisite pam_succeed_if.so uid >= 1000 quiet_successauth required pam_deny.soaccount required pam_unix.soaccount sufficient pam_localuser.soaccount sufficient pam_succeed_if.so uid < 1000 quietaccount required pam_permit.sopassword requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtokpassword required pam_deny.sosession optional pam_keyinit.so revokesession required pam_limits.so-session optional pam_systemd.sosession [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uidsession required pam_unix.so[root@db ~]# cat /etc/pam.d/system-auth-ac#%PAM-1.0# This file is auto-generated.# User changes will be destroyed the next time authconfig is run.auth required pam_env.soauth required pam_faildelay.so delay=2000000auth sufficient pam_fprintd.soauth sufficient pam_unix.so nullok try_first_passauth requisite pam_succeed_if.so uid >= 1000 quiet_successauth required pam_deny.soaccount required pam_unix.soaccount sufficient pam_localuser.soaccount sufficient pam_succeed_if.so uid < 1000 quietaccount required pam_permit.sopassword requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtokpassword required pam_deny.sosession optional pam_keyinit.so revokesession required pam_limits.so-session optional pam_systemd.sosession [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uidsession required pam_unix.so[root@db ~]#
修改示例:
#
cp /etc/pam.d/system-auth-ac /etc/pam.d/system-auth-ac.baksed -i '/password requisite pam_pwquality.so.*$/s//& minlen=8 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1/' /etc/pam.d/system-auth-acsed -i '/password sufficient pam_unix.so.*$/s//& remeber=3/' /etc/pam.d/system-auth-accp /etc/pam.d/password-auth-ac /etc/pam.d/password-auth-ac.baksed -i '/password requisite pam_pwquality.so.*$/s//& minlen=8 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1/' /etc/pam.d/password-auth-acsed -i '/password sufficient pam_unix.so.*$/s//& remeber=3/' /etc/pam.d/password-auth-ac
或
#
/sbin/authconfig —passminlen=8 —update
/sbin/authconfig —enablereqdigit —update
/sbin/authconfig —enablereqlower —update
/sbin/authconfig —enablerequpper —update
/sbin/authconfig —enablereqother —update
