一.關閉selinux
- #修改配置文件可使配置文件生效,但必須要重啟系統,此步驟是sed快速修改方法,也可以通過vim編輯/etc/selinux/config來修改此文件.
- sed -i ‘/^SELINUX/s/enforcing/disabled/g’ /etc/selinux/config
- 檢查替換結果為disabled就表示成功了.
- grep SELINUX=disabled /etc/selinux/config
- SELINUX=disabled
- #臨時關閉
- setenforce
- usage: setenforce [ Enforcing | Permissive | 1 | 0 ]
- 0 表示Permissive,即給出警告,但不會阻止操作,相當於disabled.
- 1 表示Enforcing, 即表示SELinux為開啟狀態.
- setenforce 0 #臨時將SELinux調為Permissive狀態.
- getenforce #查看SELinux當前狀態.
二.更改為阿裏yum源
- mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
- wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
- yum makecache
三.提權dm用戶可以使用sudo
- 備份/etc/sudoers文件
- cp /etc/sudoers /etc/sudoers.2018-08-20.bak
- sudo提權配置說明
- 用戶或組 機器=授權角色 可以執行的命令
- user MACHINA= COMMANDS
- dm ALL=(ALL) /usr/sbin/useradd,/usr/sbin/userdel
- useradd dm
- echo 123456 | passwd –stdin dm
- echo “dm ALL=(ALL) NOPASSWD: ALL” >>/etc/sudoers #結尾的ALL表示dm可擁有完全的系統管理權限,NOPASSSWD表示提權執行命令時不提示密碼;
- grep dm /etc/sudoers
- visudo -c &>/dev/null
四.優化ssh遠程登錄配置
- 備份/etc/ssh/sshd_conf
- cp /etc/ssh/sshd_config /etc/ssh/sshd_config.2018-08-20.bak
- 不允許基於GSSAPI的用戶認證
- sed -i ‘s/^GSSAPIAuthentication yes$/GSSAPIAuthentication no/’ /etc/ssh/sshd_config
- 不允許sshd對遠程主機名進行反向解析
- sed -i ‘s/#UseDNS yes/UseDNS no/’ /etc/ssh/sshd_config
- 禁止root用戶登錄
- sed -i ‘s%#PermitRootLogin yes%PermitRootLogin no%’ /etc/ssh/sshd_config
- 不允許空密碼登錄
- sed -i ‘s%#PermitEmptyPasswords no%PermitEmptyPasswords no%’ /etc/ssh/sshd_config
- systemctl restart sshd
五.設置中文字符集
- localectl set-locale LANG=zh_CN.UTF-8
- localectl status
六.設置時間同步
- 檢查是否安裝ntpdate
- rpm -qa|grep ntpdate
- ntpdate-4.2.6p5-28.el7.centos.x86_64
- 如果沒有安裝,則使用yum安裝
- yum install -y ntpdate
- 添加計劃任務,每5分鐘同步一次時間;
- echo ‘#time sync by dm at 2018-8-20’ >>/var/spool/cron/root
- echo ‘*/5 * * * * /usr/sbin/ntpdate -u ntp.api.bz >/dev/null 2>$1’ >>/var/spool/cron/root
- crontab -l
七.歷史記錄數及登錄超時環境變量設置
設置閑置超時時間為300s
echo 'export TMOUT=300' >>/etc/profile
設置歷史記錄文件的命令數量為100
echo 'export HISTFILESIZE=100' >>/etc/profile
設置命令行的歷史記錄數量
echo 'export HISTSIZE=100' >>/etc/profile
格式化輸出歷史記錄(以年月日分時秒的格式輸出)
echo 'export HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S"' >>/etc/profile
source /etc/profile
tail -4 /etc/profile
八.調整Linux描述符
文件描述符是由無符號整數表示的句柄,進程使用它來標識打開的文件。文件描述符與包括相關信息(如文件的打開模式,文件的位置類型,文件的初始類型等) 的文件對象相關聯,這些信息被稱作文件的上下文。文件描述符的有效範圍是0 到 OPEN_MAX.
對於內核而言,所有打開的文件都是通過文件的描述符引用的.當打開一個現有文件或創建一個新文件時,內核向進程返回一個文件描述符,當讀或寫一個文件時,使用 open 或 create 返回的文件描述符標識該文件,並將其作為參數傳遞給 read 或 write.
查看系統文件描述符設置的情況可以使用下面的命令,文件描述符大小默認是1024.
ulimit -n
對於高並發的業務 Linux 服務器來說,這個默認的設置值是不夠的,需要調整
調整方法一:
調整系統文件描述符為65535
echo ‘* – nofile 65535’ >>/etc/security/limits.conf
tail -l /etc/security/limits.conf
調整方法二:
直接把 ulimit -SHn 65535命令加入/etc/rc.d/rc.local,用以設置每次開機啟動時配置生效,命令如下:
echo ” ulimit -HSn 65535″ >>/etc/rc.d/rc.local
echo ” ulimit -s 65535″ >>/etc/rc.d/rc.local
九.定時清理郵件服務臨時目錄垃圾文件
centos7 默認是安裝了Postfix郵件服務的,因此郵件臨時存放地點的路徑為/var/spool/postfix/maildrop,為了防止目錄被垃圾文件填滿,導致系統額inode數量不夠用,需要定期清理.
定時清理的方法為:將清理命令寫成腳本,然後做成定時任務,每日淩晨0點執行一次.
#創建存放腳本的目錄
[ -d /server/scripts/shell ] && echo “directory already exists.” || mkdir /server/scripts/shell -p
#編寫腳本文件
echo ‘find /var/spool/postfix/maildrop/ -type f|xargs rm -f’ >/server/scripts/shell/del_mail_file.sh
#查看
cat /server/scripts/shell/del_mail_file.sh
#加入計劃任務
echo “00 00 * * * /bin/bash /server/scripts/shell/del_mail_file.sh >/dev/null &1” >>/var/spool/cron/root
crontab -l
十.鎖定關鍵系統文件,防止被提權篡改
- 要鎖定關鍵系統文件,必須對賬號密碼我那件及啟動文件加鎖,防止被篡改,加鎖命令如下:
- chattr +i /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/inittab
- lsattr /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/inittab
- 上鎖後,所有用戶都不能對文件進行修改刪除.如果需要修改,可以執行下面的命令解鎖後,再進行修改.
- chattr -i /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/inittab
- lsattr /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/inittab
- 如果想要更加安全,可以把chattr改名轉移,防止被黑客利用.
- mv /usr/bin/chattr /usr/bin/dm1
客戶在刪除寶塔網站根目錄時,使用rm -rf 命令時會提示無法刪除目錄下的某一個文件,就是因為這個文件被鎖導致的,可以使用chattr -i命令解除文件鎖之後再刪除就可以了。
十一.SSH限製IP登錄
方法一:
只允許指定用戶進行登錄(白名單):
在 /etc/ssh/sshd_config 配置文件中設置 AllowUsers 選項,(配置完成需要重啟 SSHD 服務)格式如下:
AllowUsers root@192.168.1.11
允許 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菜單加密
為grub菜單加密的目的是防止他人修改grub進行內核等啟動設置,以及用單用戶模式啟動進行破解root密碼等操作,實際上此步驟可以在安裝系統的過程中設定.
安裝系統後的具體設定步驟如下:
設置密碼:
grub2-setpassword
查看設置的密碼:
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
十五.更新系統到最新
- 更新補丁並升級系統版本
- yum update -y
- #只更新安全補丁,不升級系統版本
- yum –security check-update #檢查是否有安全補丁
- yum update –security #更新安全補丁