安装完Linux系统后,对操作系统进行简单优化
1. 规范目录结构
一般情况下,在服务器系统安装完成使用前,建议规范目录。建立上传文件和数据目录、脚本存储目录等,可根据需求自行设计。示例如下
[root@templates ~]# mkdir -p /server/{tools,scripts} [root@templates ~]# tree /server/ /server/ ├── scripts └── tools 2 directories, 0 files
# /server/tools 常用的数据文件上传至此目录
# /server/scripts 脚本文件存储目录
……
2. 配置hosts文件
在/etc/hosts文件中写入IP地址和主机名的对应关系。
[root@templates ~]# vim /etc/hosts [root@templates ~]# echo "10.28.61.5 templates" >> /etc/hosts [root@templates ~]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 10.28.61.5 templates
3. 修改主机名称
3.1 CentOS7 或者 Redhat7 版本
临时修改:hostname 主机名
永久修改:hostnamectl set-hostname 主机名 (重启之后生效)
修改配置文件:/etc/hostname 也可以永久更改主机名,重启系统生效。
3.2 CentOS6 或者 Redhat6 版本
临时修改:hostname 主机名
永久修改:修改 /etc/sysconfig/network 文件,重启后生效。
4. yum源优化
CentOS系统安装完毕,yum源是官方自带的,由于是国外网站,访问速度慢。因此,可以更改为国内源,从而提高安装软件的速度。此博文介绍时使用的是阿里云的镜像源,国内还有网易镜像源、清华的镜像源等许多,可根据个人需求自由选择。
在更新镜像源之前,先对原来的文件进行备份
mkdir /etc/yum.repos.d/backup mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup
更新镜像源
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
检查可用的yum源
yum repolist
以上配置的是阿里的yum源,前提是可以上外网。而目前部分企业中不允许服务器上外网,那么可以考虑配置本地yum源,或者搭建本地yum仓库进行配置。
本地yum源搭建可参考:https://www.cnblogs.com/yunxuanedu/p/13909072.html,企业中生产环境同理搭建本地yum源。
5. 优化安全设置,关闭selinux和防火墙firewalld
#临时关闭 setenforce 0 #修改配置文件,永久关闭 sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
[root@templates ~]# systemctl stop firewalld #<==== 当前关闭防火墙 [root@templates ~]# systemctl disable firewalld #<==== 关闭开机自启动 [root@templates ~]# systemctl status firewalld.service #<====查看当前状态 ● firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled) Active: inactive (dead) Docs: man:firewalld(1)
6. 优化SSH协议
sed -i 's#GSSAPIAuthentication yes#GSSAPIAuthentication no#g' /etc/ssh/sshd_config sed -i 's/#UseDNS yes/UseDNS no/g' /etc/ssh/sshd_config #<==== 可加快ssh远程连接速度
systemctl restart sshd
为了安全起见,可以更改ssh服务默认端口,并且不允许root用户远程登录系统
vim /etc/ssh/sshd_config #Port 22 #<==== Port xx(改为自己设定的端口号) #PermitRootLogin yes #<==== PermitRootLogin no (不让root用户远程登录)
#ListenAddress 0.0.0.0 #<==== ListenAddress 10.28.7.210 只允许通过该地址远程连接到服务器,但是该地址必须是该服务器某网卡地址,一般会设置成内网网卡地址,保证系统安全。
#PermitEmptyPasswords no #<==== PermitEmptyPasswords no 不允许空密码登录
systemctl restart sshd #<==== 重启sshd服务
7. 字符编码优化
7.1 Linux7 和 Linux6 版本均适用
[root@yunxuan ~]# echo $LANG #== 查看当前字符集编码 en_US.UTF-8
临时修改
[root@yunxuan ~]# LANG="en_US.UTF-8"
永久修改(方法一)
echo "export LANG = ‘en_US.UTF-8’" >>/etc/profile source /etc/profile
7.2 Linux7 版本
以上方式适用于Linux6和Linux7,下面只适用于Linux7版本系统
永久修改(方法一)
cp -a /etc/locale.conf{,.bak}
echo "LANG = 'en_US.UTF-8'" >/etc/locale.conf
source /etc/locale.conf
永久修改(方法二)
localectl set-locale LANG = "en_US.UTF-8"
7.3 Linux6 版本
vi /etc/sysconfig/i18n [root@yunxuan ~]# cat /etc/sysconfig/i18n LANG="en_US.UTF-8" SYSFONT="latarcyrheb-sun16" source /etc/sysconfig/i18n #==文件生效
8. 精简开机启动程序
系统开机后,部分软件设置开机自启动,系统启动本身比较耗费时间,关闭一些非必要的开机启动项将会降低开机启动时间,此外部分软件很可能存在安全漏洞,,关闭后也会保证系统安全性。因此,建议一些非必要的软件可以设置不开机自启动,只将一些必须的软件设置成开机自启动。
8.1 CentOS7 或者 Redhat7 版本系统精简开机启动程序
[root@template ~]# systemctl list-unit-files|grep enable|grep -Ev "sshd|cron|rsyslog|sysstat|NetworkManager|irqbalance"|awk '{print "systemctl disable",$1}' systemctl disable abrt-ccpp.service systemctl disable abrt-oops.service systemctl disable abrt-vmcore.service systemctl disable abrt-xorg.service systemctl disable abrtd.service
…… [root@template ~]# systemctl list-unit-files|grep enable|grep -Ev "sshd|cron|rsyslog|sysstat|NetworkManager|irqbalance"|awk '{print "systemctl disable",$1}'|bash [root@templates ~]# systemctl list-unit-files|grep enable autovt@.service enabled crond.service enabled getty@.service enabled irqbalance.service enabled NetworkManager.service enabled rsyslog.service enabled sshd.service enabled sysstat.service enabled
8.2 CnetOS6 或者 Redhat6 版本系统精简开机启动程序
chkconfig --list|grep 3:on #查看当前状态下开启的服务
chkconfig --list|grep 3:on|grep -vE "crond|sshd|network|rsyslog|sysstat"|awk '{print "chkconfig " $1 " off" }'|bash
chkconfig --list|grep 3:on|grep -vE "crond|sshd|network|rsyslog|sysstat"|awk '{print $1}'|sed -r 's#(.*)# chkconfig \1 off#g'|bash
9. 隐藏Linux版本信息在登录系统前和登录后的提示信息,在登录到系统主机本地时,会显示系统的版本和内核等信息,如下图所示

清空/etc/issue和/etc/issue.net 文件内容
[root@backup ~]# cat /etc/issue /etc/issue.net \S Kernel \r on an \m \S Kernel \r on an \m [root@backup ~]# echo "" > /etc/issue [root@backup ~]# echo "" > /etc/issue.net [root@backup ~]# cat /etc/issue /etc/issue.net
[root@backup ~]# echo "" > /etc/motd
优化后登录系统状态

10. 设置Linux服务器时间同步
CentOS7系统默认带有chrony时间同步服务,此处建议使用ntp时间同步服务
[root@backup ~]# rpm -qa | grep ntpdate #<==== 检查是否安装ntpdate软件,如果未安装进行安装 [root@backup ~]# yum install ntpdate -y #<==== 安装ntpdate软件
[root@backup ~]# ntpdate 10.28.61.214 #<==== 同步时间,ntpdate + ntp时间服务器域名或地址
利用定时任务进行时间同步操作,每5分钟同步一次系统时间
[root@backup ~]# echo '# cron-id-001 time sync' >>/var/spool/cron/root [root@backup ~]# echo '*/5 * * * * /usr/sbin/ntpdate 10.28.61.214 >/dev/null 2>&1' */5 * * * * /usr/sbin/ntpdate 10.28.61.214 >/dev/null 2>&1 [root@backup ~]# echo '*/5 * * * * /usr/sbin/ntpdate 10.28.61.214 >/dev/null 2>&1' >>/var/spool/cron/root [root@backup ~]# crontab -l # cron-id-001 time sync */5 * * * * /usr/sbin/ntpdate 10.28.61.214 >/dev/null 2>&1
#===> 其中10.28.61.214是某个时间服务器,在这里可以设置自己需要的ntp服务器地址,包括域名。
11. 加大文件描述符
一般情况下,服务器会启动很多程序,而启动每一个程序的进程都会占用文件服务器描述符,因此为了不影响到程序的启动,需要加大文件描述符的大小。
[root@backup ~]# ulimit -n #<==== 查看当前文件描述符大小 1024 [root@backup ~]# ulimit -SHn 65535 #<==== 临时修改文件描述符,重启系统或者重新登录系统之后会失效 [root@backup ~]# ulimit -n 65535 [root@backup ~]#
[root@backup ~]# echo '* - nofile 65535'>>/etc/security/limits.conf #<==== 永久修改文件描述符大小,配置完成后,重新登录才能生效 [root@backup ~]# tail -1 /etc/security/limits.conf * - nofile 65535
12. 提升命令行操作安全性
echo "export TMOUT=300" >>/etc/profile #设置会话超时时间为300秒 echo "export HISTSIZE=5" >>/etc/profile #命令行历史记录保留5个 echo "export HISTFILESIZE=5" >>/etc/profile #历史记录文件保留5个 tail -3 /etc/profile source /etc/profile
13. 安装系统常用软件
yum install tree nmap dos2unix lrzsz nc lsof wget tcpdump htop iftop iotop sysstat nethogs -y yum install psmisc net-tools bash-completion vim-enhanced -y
14. 为GRUB增加密码
grub2-setpassword cat /boot/grub2/user.cfg
15. 禁止用户ping服务器IP
echo "net.ipv4.icmp_echo_ignore_all=1" >> /etc/sysctl.conf sysctl -p
16. 锁定关键系统文件优化
chattr +i /etc/passwd /etc/shadow /etc/group #锁定关键账户文件,防删防改 chattr +i /etc/inittab /etc/fstab /etc/sudoers lsattr /etc/passwd /etc/shadow /etc/group /etc/sudoers /etc/fstab /etc/inittab mv /usr/bin/chattr /opt/yunxuan #移走关键命令,并重命名 cp -a /usr/bin/xargs /usr/bin/chattr #用其他命令伪装,用户需要妥善保存关键命令
chattr -i /etc/passwd /etc/shadow /etc/group #解锁,上锁后如需临时操作,可解锁后修改文件,然后再上锁
17. 设置普通用户提权操作
cp -a /etc/sudoers{,.bak} echo "user01 ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers tail -1 /etc/sudoers visudo -c
#以上配置普通用户user01 提权后具有root用户的权限,建议设置白名单精准控制。
18. 用户口令期限设置
vim /etc/login.defs …… PASS_MAX_DAYS 90 #新建用户的密码最长使用天数 PASS_MIN_DAYS 0 #新建用户的密码最短使用天数 PASS_MIN_LEN 8 #默认密码长度不能小于一个固定值8位 PASS_WARN_AGE 7 #新建用户的密码到期提前提醒天数 ……
19. 设置用户口令复杂度要求
建议在/etc/pam.d/system-auth 文件中配置: password requisite pam_cracklib.so difok=3 minlen=8 ucredit=-1 lcredit=-1 dcredit=1 至少 8 位,包含一位大写字母,一位小写字母和一位数字
20. 设置帐户锁定登录失败锁定次数、锁定时间
设置连续输错 10 次密码,帐号锁定 5 分钟
vi /etc/pam.d/ system-auth auth required pam_tally.so onerr=fail deny=10 unlock_time=300
注:解锁用户 faillog -u <用户名> -r

浙公网安备 33010602011771号