優化說明:
1 一.關閉selinux 2 二.更改為阿里yum源 3 三.提權dm用戶可以使用sudo 4 四.優化ssh遠程登錄配置 5 五.設置中文字符集 6 六.設置時間同步 7 七.歷史記錄數及登錄超時環境變量設置 8 八.調整linux描述符 9 九.定時清理郵件服務臨時目錄垃圾文件 10 十.鎖定關鍵系統文件,防止被提權篡改 11 十一.ssh限制ip登錄 12 十二.為grub菜單加密 13 十三.優化開機自啟服務 14 十四.內核優化 15 十四.更新系統到最新
一.關閉selinux
1 #修改配置文件可使配置文件生效,但必須要重啟系統,此步驟是sed快速修改方法,也可以通過vim編輯/etc/selinux/config來修改此文件. 2 sed -i '/^SELINUX/s/enforcing/disabled/g' /etc/selinux/config 3 4 檢查替換結果為disabled就表示成功了. 5 grep SELINUX=disabled /etc/selinux/config 6 SELINUX=disabled 7 8 #臨時關閉 9 setenforce 10 usage: setenforce [ Enforcing | Permissive | 1 | 0 ] 11 0表示Permissive,即給出警告,但不會阻止操作,相當於disabled. 12 1表示Enforcing,即表示SELinux為開啟狀態. 13 setenforce 0 #臨時將SELinux調為Permissive狀態. 14 getenforce #查看SELinux當前狀態.
二.更改為阿里yum源
1 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 2 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo 3 yum makecache
三.提權dm用戶可以使用sudo
1 備份/etc/sudoers文件 2 cp /etc/sudoers /etc/sudoers.2018-08-20.bak 3 4 sudo提權配置說明 5 用戶或組 機器=授權角色 可以執行的命令 6 user MACHINA= COMMANDS 7 dm ALL=(ALL) /usr/sbin/useradd,/usr/sbin/userdel 8 9 useradd dm 10 echo 123456|passwd --stdin dm 11 echo "dm ALL=(ALL) NOPASSWD: ALL" >>/etc/sudoers #結尾的ALL表示dm可擁有完全的系統管理權限,NOPASSSWD表示提權執行命令時不提示密碼; 12 grep dm /etc/sudoers 13 visudo -c &>/dev/null
四.優化ssh遠程登錄配置
1 備份/etc/ssh/sshd_conf 2 cp /etc/ssh/sshd_config /etc/ssh/sshd_config.2018-08-20.bak
3 不允許基於GSSAPI的用戶認證 4 sed -i 's/^GSSAPIAuthentication yes$/GSSAPIAuthentication no/' /etc/ssh/sshd_config
5 不允許sshd對遠程主機名進行反向解析 6 sed -i 's/#UseDNS yes/UseDNS no/' /etc/ssh/sshd_config
7 禁止root用戶登錄 8 sed -i 's%#PermitRootLogin yes%PermitRootLogin no%' /etc/ssh/sshd_config
9 不允許空密碼登錄 10 sed -i 's%#PermitEmptyPasswords no%PermitEmptyPasswords no%' /etc/ssh/sshd_config
11 systemctl restart sshd
五.設置中文字符集
1 localectl set-locale LANG=zh_CN.UTF-8 2 localectl status
六.設置時間同步
1 檢查是否安裝ntpdate 2 rpm -qa|grep ntpdate 3 ntpdate-4.2.6p5-28.el7.centos.x86_64 4 5 如果沒有安裝,則使用yum安裝 6 yum install -y ntpdate 7 8 添加計划任務,每5分鍾同步一次時間; 9 echo '#time sync by dm at 2018-8-20' >>/var/spool/cron/root 10 echo '*/5 * * * * /usr/sbin/ntpdate -u ntp.api.bz >/dev/null 2>&1' >>/var/spool/cron/root 11 crontab -l
七.歷史記錄數及登錄超時環境變量設置
1 設置閑置超時時間為300s 2 echo 'export TMOUT=300' >>/etc/profile 3 4 設置歷史記錄文件的命令數量為100 5 echo 'export HISTFILESIZE=100' >>/etc/profile 6 7 設置命令行的歷史記錄數量 8 echo 'export HISTSIZE=100' >>/etc/profile 9 10 格式化輸出歷史記錄(以年月日分時秒的格式輸出) 11 echo 'export HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S"' >>/etc/profile 12 13 source /etc/profile 14 tail -4 /etc/profile
八.調整linux描述符
1 文件描述符是由無符號整數表示的句柄,進程使用它來標識打開的文件.文件描述符與包括相關信息(如文件的打開模式,文件的位置類型,文件的初始類型等)的文件對象相關聯,這些信息被稱作文件的上下文.文件描述符的有效范圍是0到OPEN_MAX. 2 對於內核而言,所有打開的文件都是通過文件的描述符引用的.當打開一個現有文件或創建一個新文件時,內核向進程返回一個文件描述符,當讀或寫一個文件時,使用open或create返回的文件描述符標識該文件,並將其作為參數傳遞給read或write. 4 查看系統文件描述符設置的情況可以使用下面的命令,文件描述符大小默認是1024. 5 ulimit -n 6 對於高並發的業務Linux服務器來說,這個默認的設置值是不夠的,需要調整. 8 調整方法一: 9 調整系統文件描述符為65535 10 echo '* - nofile 65535' >>/etc/security/limits.conf 11 tail -l /etc/security/limits.conf 13 調整方法二: 14 直接把ulimit -SHn 65535命令加入/etc/rc.d/rc.local,用以設置每次開機啟動時配置生效,命令如下: 15 echo " ulimit -HSn 65535" >>/etc/rc.d/rc.local 16 echo " ulimit -s 65535" >>/etc/rc.d/rc.local
九.定時清理郵件服務臨時目錄垃圾文件
1 centos7默認是安裝了Postfix郵件服務的,因此郵件臨時存放地點的路徑為/var/spool/postfix/maildrop,為了防止目錄被垃圾文件填滿,導致系統額inode數量不夠用,需要定期清理. 2 定時清理的方法為:將清理命令寫成腳本,然后做成定時任務,每日凌晨0點執行一次.
#創建存放腳本的目錄 3 [ -d /server/scripts/shell ] && echo "directory already exists." || mkdir /server/scripts/shell -p
#編寫腳本文件 4 echo 'find /var/spool/postfix/maildrop/ -type f|xargs rm -f' >/server/scripts/shell/del_mail_file.sh
#查看 5 cat /server/scripts/shell/del_mail_file.sh
#加入計划任務 6 echo "00 00 * * * /bin/bash /server/scripts/shell/del_mail_file.sh >/dev/null &1" >>/var/spool/cron/root
7 crontab -l
十.鎖定關鍵系統文件,防止被提權篡改
1 要鎖定關鍵系統文件,必須對賬號密碼我那件及啟動文件加鎖,防止被篡改,加鎖命令如下: 2 chattr +i /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/inittab 3 lsattr /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/inittab 4 5 上鎖后,所有用戶都不能對文件進行修改刪除.如果需要修改,可以執行下面的命令解鎖后,再進行修改. 6 chattr -i /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/inittab 7 lsattr /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/inittab 8 9 如果想要更加安全,可以把chattr改名轉移,防止被黑客利用. 10 mv /usr/bin/chattr /usr/bin/dm1
十一.ssh限制ip登錄
方法一: 只允許指定用戶進行登錄(白名單): 在 /etc/ssh/sshd_config 配置文件中設置 AllowUsers 選項,(配置完成需要重啟 SSHD 服務)格式如下: AllowUsers root@192.168.1.1 # 允許 IP 192.168.1.1 登錄root 通過帳戶登錄系統。 只拒絕指定用戶進行登錄(黑名單): 在/etc/ssh/sshd_config配置文件中設置DenyUsers選項,(配置完成需要重啟SSHD服務)格式如下: DenyUsers root@192.168.1.10 #Linux系統賬戶 # 拒絕 IP 192.168.1.10 登錄root 通過帳戶登錄系統。 方法二: #允許192.168.200.0段的IP登錄 echo "sshd:192.168.200.0/24:allow" >>/etc/hosts.allow #禁止所有的其他IP段的IP登錄 echo "sshd:all:deny" >>/etc/hosts.deny hosts.allow 和hosts.deny 兩個文件同時設置規則的時候,hosts.allow 文件中的規則優先級高,按照此方法設置后服務器只允許 192.168.200.0/24這個段的 IP 地址的 ssh 登錄,其它的 IP 都會拒絕。 方法三: 允許192.168.100.10登錄ssh firewall-cmd --permanent --add-rich-rule 'rule family=ipv4 source address=192.168.100.10 service name=ssh accept' 拒絕192.168.200.0/24登錄ssh firewall-cmd --permanent --add-rich-rule 'rule family=ipv4 source address=192.168.200.0/24 service name=ssh reject' firewall-cmd --reload
十二.為grub菜單加密
1 為grub菜單加密的目的是防止他人修改grub進行內核等啟動設置,以及用單用戶模式啟動進行破解root密碼等操作,實際上此步驟可以在安裝系統的過程中設定. 2 安裝系統后的具體設定步驟如下:
設置密碼: 5 grub2-setpassword 6 7 查看設置的密碼: 8 cat /boot/grub2/user.cfg
#在/etc/grub.d/01_users文件中可以看到grub用戶名為root,然后通過grub2-setpassword來設置grub的密碼,密碼設置成功后會生成/boot/grub2/user.cfg文件,可以通過/boot/grub2/user.cfg文件查看設置的密碼,查看到的密碼為加密的密碼。
十三.優化開機自啟服務
十四.內核優化
Linux服務器內核參數優化,主要是指在Linux系統中針對業務服務應用而進行的系統內核參數調整,優化並無一定的標准.下面是生產環境下Linux常見的內核優化: cat >>/etc/sysctl.conf<<EOF #kernel_flag #關閉ipv6 net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1 # 避免放大攻擊 net.ipv4.icmp_echo_ignore_broadcasts = 1 # 開啟惡意icmp錯誤消息保護 net.ipv4.icmp_ignore_bogus_error_responses = 1 #關閉路由轉發 #net.ipv4.ip_forward = 0 #net.ipv4.conf.all.send_redirects = 0 #net.ipv4.conf.default.send_redirects = 0 #開啟反向路徑過濾 net.ipv4.conf.all.rp_filter = 1 net.ipv4.conf.default.rp_filter = 1 #處理無源路由的包 net.ipv4.conf.all.accept_source_route = 0 net.ipv4.conf.default.accept_source_route = 0 #關閉sysrq功能 kernel.sysrq = 0 #core文件名中添加pid作為擴展名 kernel.core_uses_pid = 1 # 開啟SYN洪水攻擊保護 net.ipv4.tcp_syncookies = 1 #修改消息隊列長度 kernel.msgmnb = 65536 kernel.msgmax = 65536 #設置最大內存共享段大小bytes kernel.shmmax = 68719476736 kernel.shmall = 4294967296 #timewait的數量,默認180000 net.ipv4.tcp_max_tw_buckets = 6000 net.ipv4.tcp_sack = 1 net.ipv4.tcp_window_scaling = 1 net.ipv4.tcp_rmem = 4096 87380 4194304 net.ipv4.tcp_wmem = 4096 16384 4194304 net.core.wmem_default = 8388608 net.core.rmem_default = 8388608 net.core.rmem_max = 16777216 net.core.wmem_max = 16777216 #每個網絡接口接收數據包的速率比內核處理這些包的速率快時,允許送到隊列的數據包的最大數目 net.core.netdev_max_backlog = 262144 #限制僅僅是為了防止簡單的DoS 攻擊 net.ipv4.tcp_max_orphans = 3276800 #未收到客戶端確認信息的連接請求的最大值 net.ipv4.tcp_max_syn_backlog = 262144 net.ipv4.tcp_timestamps = 0 #內核放棄建立連接之前發送SYNACK 包的數量 net.ipv4.tcp_synack_retries = 1 #內核放棄建立連接之前發送SYN 包的數量 net.ipv4.tcp_syn_retries = 1 #啟用timewait 快速回收 net.ipv4.tcp_tw_recycle = 1 #開啟重用。允許將TIME-WAIT sockets 重新用於新的TCP 連接 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_mem = 94500000 915000000 927000000 net.ipv4.tcp_fin_timeout = 1 #當keepalive 起用的時候,TCP 發送keepalive 消息的頻度。缺省是2 小時 net.ipv4.tcp_keepalive_time = 30 #允許系統打開的端口范圍 net.ipv4.ip_local_port_range = 1024 65000 #修改防火牆表大小,默認65536 #net.netfilter.nf_conntrack_max=655350 #net.netfilter.nf_conntrack_tcp_timeout_established=1200 # 確保無人能修改路由表 #net.ipv4.conf.all.accept_redirects = 0 #net.ipv4.conf.default.accept_redirects = 0 #net.ipv4.conf.all.secure_redirects = 0 #net.ipv4.conf.default.secure_redirects = 0 EOF /sbin/sysctl -p
十四.更新系統到最新
1 #更新補丁並升級系統版本 2 yum update -y 3 4 #只更新安全補丁,不升級系統版本 5 yum --security check-update #檢查是否有安全補丁 6 yum update --security #更新安全補丁