安装完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

 

posted @ 2020-10-31 23:24  小屁孩云轩  阅读(353)  评论(0)    收藏  举报