CentOS系统优化

 优化之前,首先查看版本信息

复制代码
# cat /etc/redhat-release  
CentOS release 6.7 (Final)                    # 系统版本信息
# uname –r
2.6.32-573.el6.x86_64                           # 内核版本信息
# uname -m
x86_64                                                  #表示为64位系统
# uname –a                                          # 显示全部信息
Linux hostname2.6.32-573.el6.x86_64 #1 SMP Thu Jul 23 15:44:03 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux                        
复制代码
Linux基础优化与安全重点小结
复制代码
 1  不用root登录管理系统,而以普通用户登录通过sudo授权管理
 2  更改默认的远程连接SSH服务端口,禁止root用户远程连接,甚至要更改SSH服务只监听内网IP
 3  定时自动更新服务器时间,使其和互联网同步
 4  配置yum更新源,从国内更新源下载安装软件包
 5  关闭SELinux及iptables
 6  定时自动清理邮件临时目录垃圾文件,防止磁盘inodes数被小文件占满
 7  调整文件描述符的数量,进程及文件的打开都会消耗文件描述符的数量
 8 精简并保留必要的开机启动服务
 9 Linux内核参数优化/etc/sysctl.config,执行sysetl –p生效
10 更改系统字符集, 为“zh_CN.UTF-8”,使其支持中文,防止出现乱码问题。
11 锁定关键文件,如: passwd、/etc/shadow/、/etc/group/、/etc/gshadow、/etc/inittab,处理以上内容后把chattr、lsattr、改名为root,转移走,这样就安全多了。
12 清空/etc/issue /etcissue.net,去除系统及内核版本登录前的屏幕显示
13 清除多余的系统虚拟用户账号
14 为grub引导菜单加密码
15 禁止主机被ping
16 打补丁并升级有已知漏洞的软件
复制代码

 拓展

掌握Linux系统的7种运行级别

复制代码
1 运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
2 运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆
3 运行级别2:多用户状态(没有NFS)
4 运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式
5 运行级别4:系统未使用,保留
6 运行级别5:X11控制台,登陆后进入图形GUI模式
7 运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动
复制代码

 掌握Linux系统从开机到登录之前的启动流程。是由etc/inittab控制

1.    使用阿里云镜像做样本源

默认国外的yum源比较慢,所以换成国内的。

复制代码
1 #  cd /etc/yum.repos.d/
2 #  ls
3 CentOS-Base.repo       CentOS-Media.repo
4 CentOS-Debuginfo.repo  CentOS-Vault.repo
5 CentOS-fasttrack.repo
6 # cp CentOS-Base.repo CentOS-Base.repo.ori                    更改配置文件之前进行备份
7 # wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo                         centos6系统
8 # echo "192.168.14.200 mirrors.aliyun.com" >>/etc/hosts    公网地址换成内网地址 
9 # yum -y install tree nmap sysstat lrzsz dos2unix telnet                                        安装必要的软件包(tree)
复制代码

2.    关闭SELinux功能

1)  修改配置文件,使关闭SELinux永久生效:

l        第一种方法

1 # vim /etc/selinux/config
2 然后找到SELINUX=enforcing改成SELINUX=disabled
3 ESC:wq结束

l        第二种方法

1 sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
2 sed -i 's#SELINUX=enforcing#SELINUX=disabled#' /etc/selinux/config

2)  临时关闭SELinux,可在命令行执行如下命令:

复制代码
 1 [root@rootedu ~]# getenforce                  <--查看现在状态
 2 
 3 Enforcing
 4 
 5 [root@rootedu ~]# setenforce 
 6 
 7 usage:  setenforce [ Enforcing | Permissive | 1 | 0 ]
 8 
 9 [root@rootedu ~]# setenforce 0          <-- 临时将selinux调成下面的状态
10 
11 [root@rootedu ~]# getenforce 
12 
13 Permissive
复制代码

命令说明:setenforce:用于命令行管理SELinux的级别,

                  getenforce:查看SELinux当前级别

提示:修改配置SELinux后,要想其生效,必须要重启系统。再生产场景中不能随意重启系统。  

3)    关闭iptables防火墙

l        临时关闭,关机之后会重新启动

1 /etc/init.d/iptables status                <-- 查看看是否开启
2 /etc/init.d/iptables stop                   <-- 关闭防火墙

l        关闭开机自启动的防火墙

第一种方法

1 [root@rootedu ~]# chkconfig --list|grep ipt        <-- 查看状态
2 iptables        0:off   1:off   2:on    3:on    4:on    5:on     6:off
3 [root@rootedu ~]# chkconfig iptables off          <--下一次系统开启不运行防火墙
4 [root@rootedu ~]# chkconfig --list|grep ipt
5 iptables        0:off   1:off   2:off   3:off   4:off   5:off    6:off

第二种方法  

1        /etc/init.d/iptables stop            <--当前关闭防火墙
2        chkconfig iptables off               <--关闭开机自启动命令 

 

4)    设置运行级别为3(文本模式)

1 设定运行级别(runlevel)为3(一般安装系统后默认为3)即表示使用文本命令模式管理linux
2 
3 grep 3:initdefault /etc/inittab      <-- 检查命令
4 runlevel                                      <--另一种简单方法
5 init 3                                           <--切换运行级别

 

5)    精简开机系统启动

1)系统开机必须要开启的服务

l        sshd

远程连接linux服务器时需要用到这个服务程序,所以必须开启

l        rsyslog

日志相关软件,

l        network

网络服务

l        crond

会周期的执行系统和用户配置的任务计划。

l        sysstat

sysstat是一个软件包,包含检测系统性能及效率的一组工具.\

 

2)设置开启自启动服务的方法

手动关闭用setup

chkconfig --list|grep 3:on   <--查看开机自启动的项目
第一种快速处理方法:先全关闭,再开启需要保留的。
操作思路:先将3级别文本模式下默认开启的服务都关闭,然后开启需要开启的服务。
操作命令如下:
1 LANG=en
2 for root in `chkconfig --list|grep 3:on|awk '{print $1}'`;do chkconfig --level 3 $root off;done 
3 for root in crond network rsyslog sshd sysstat ;do chkconfig --level 3 $root on;done
4 chkconfig --list|grep 3:on
第二种快速处理方法
1 for root in `chkconfig --list|grep "3:on"|awk '{print $1}'|grep -vE "crond|network|sshd|rsyslog|sysstat"`;do chkconfig $root off;done
第三种快速处理方法(逼格最高)
chkconfig --list|grep 3:on|grep -vE "crond|sshd|network|rsyslog|sysstat " |awk '{print "chkconfig " $1 " off"}'|bash

6)    添加普通用户账号

linux/unix是一个多用户,多任务的操作系统

超级管理员(root):拥有最高权限

普通用户

l     一条命令设置密码

echo '123456'|passwd --stdin root       <--root用户名,密码为123456

|    使用命令添加一个普通用户,命令如下: 

1 useradd  root                           <--添加用户
2 passwd  root                            <--设置用户密码

l    尝试切换用户角色,命令如下:

1 [root@hostname ~]# su – root                  <--由root管理员,切换到普通用户root
2 [root@hostname ~]$ whoami            <--查看当前用户
3 root                                 
4 [root@hostname ~]$ su -                   <--切到root用户
5 Password:

l        linux命令提示符由PS1环境变量

查看环境变量:    echo $PS1  

7)    利用sudo控制用户的使用权限

为了方便管理,可以给用户授权,过程:输入vi sudoers找到98行,在下面放入如下内容:

oldboy   ALL=(ALL)   NOPASSWD: ALL      <--all表示完全的系统权限,NOPASSWD表示提示权限命令时不需要密码

配置完成后要进行检查,命令如下:

[oldboy@hostname ~]# grep root /etc/sudoers
oldboy    ALL=(ALL)   NOPASSWD: ALL

此时再以oldboy用户登录系统时,就可以通过执行sudo ls –l  /root (sudo后面跟正常命令)的命令以root用户的权限管理系统了,如下:

[oldboy@hostname ~]$ ls /root/
ls: cannot open directory /root/: Permission denied
[oldboy@hostname ~]$ sudo ls /root/
HostKeyDB.txt       test.txt      12345                         install.log         woaini

8)    Linux系统安全最小化原则说明

a)         安装Linux系统最小化,即选包最小化。

b)        开机自启动服务最小化,即不用的服务不开启。

c)         操作命令最小化。

d)        登录Linux用户最小化。平时没有特殊需要就用普通用户登录即可。

e)         普通用户授权权限最小化。只给用户必要的管理系统的命令。

f)         Linux系统文件及目录的权限设置最小化。禁止随意创建,更改,删除文件。

g)        程序服务运行最小化,即程序服务运行尽量不用root身份进行。

9)    更改SSH服务端远程登录的配置

windows服务器的默认远程管理端口是3389,管理员用户是administrator,普通用户guest。Linux管理用户是root,远程连接默认端口port22。

复制代码
1 [root@hostname ~]#cp /etc/ssh/sshd_config /etc/ssh/sshd_config.ori <--备份配置文件,简单写法cp /etc/ssh/sshd_config{,.ori}
2 [root@hostname ~]# vim /etc/ssh/sshd_config
3 进入17行加入:
4 ####by root#2011-11-24##
5 rt 52113
6 PermitRootLogin no
7 PermitEmptyPasswords no
8 UseDNS no
9 GSSAPIAuthentication no
10 ####by root#2011-11-24##
11 /etc/init.d/sshd reload     <--reload为平滑重启,不会影响正在SSH连接的其他用户,restart直接断开生效
复制代码

然后就连不上了,因为端口改了。

然后更改会话选项里的SSH2里的端口还有用户名。就OK了

10)         Linux中文显示设置

此选项为优化可选项,即调整Linux系统的字符集设置。

简单的说,字符集就是一套文字符号及其编码。目前linux下常用的字符集有:

  GBK:定长双字节

  UTF-8:非定常,1~4字节,广泛支持

临时生效,命令:LANG=”zh_CN.UTF-8’

永久生效,可以通过快捷的命令方式在/etc/sysconfig/i18n中添加如下内容,使其支持中文显示:

复制代码
 1 [root@hostname ~]# echo $LANG
 2 en_US.UTF-8
 3 [root@hostname ~]# cat /etc/sysconfig/i18n
 4 LANG="en_US.UTF-8"
 5 SYSFONT="latarcyrheb-sun16"
 6 [root@hostname ~]# cp /etc/sysconfig/i18n  /etc/sysconfig/i18n.ori
 7 [root@hostname ~]#echo ‘LANG=”zh_CN.UTF-8”’>/etc/sysconfig/i18n
 8 [root@hostname ~]#source /etc/sysconfig/i18n  <--使其生效
 9 [root@hostname ~]#echo $LANG
10 zh_CN.UTF-8
复制代码

11)         设置linux服务器时间同步

复制代码
 1 ntpdate time.nist.gov<--时间同步
 2 ntpdate ntp1.aliyun.com<--国内阿里云时间同步服务器
 3 利用定时任务crond把上述命令每5分钟自动执行一次,命令如下:
 4 
 5 echo '#time sync by root at 2010-2-1' >>/var/spool/cron/root
 6 echo '*/5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1' >>/var/spool/cron/root
 7 crontab –l
 8 [root@rootedu ~]# crontab -l
 9 #time sync by root at 2010-2-1
10 */5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1
复制代码

12)  历史记录数及登录超时环境

1.设置闲置账号超时时间,命令如下,此处为临时生效

export TMOUT=10  <--设置连接会话的超时时间

2.设置Linux的命令行历史记录数, 命令如下,此处为临时生效

1    export HISTSIZE=5
2    export TMOUT=10               连接的超时时间控制变量。
3 
4    export HISTSIZE=5              命令行的历史记录数量变量。
5    export  HISTFILESIZE=10   历史记录文件的命令数量变量(~/.bash_history)。

13)  调整Linux系统描述符数量和最大进程数

系统描述符

先用ulimit –n查看有几个描述符,规则是“软(soft)”或“硬(hard)”

对于高并发的业务Linux服务器来说,默认的设置值是不够的,需要调整

调整方法:

执行vim /etc/security/limits.conf再文件结尾加上如下一行(全局)
*               -       nofile          65535

或者直接执行下面的命令

1 echo '*               -       nofile          65535 ' >>/etc/security/limits.conf
2 tail -4 /etc/security/limits.conf              <--查看文件最后4行
3 [root@rootedu tmp]# ulimit –n            <--查看是否生效
4 65535

总结:

1 临时生效  ulimit -SHn 65535
2 永久生效 echo '*               -       nofile          65535 ' >>/etc/security/limits.conf
3  或者:
4 cat /etc/security/limits.conf
5        *                               soft    nofile  65536
6        *                               hard    nofile  65536

最大线程数

ulimit -a

max user processes              (-u) #系统限制某用户下最多可以运行多少进程或线程

root 账号下 ulimit -u 出现的max user processes 的值默认是 # cat /proc/sys/kernel/threads-max的值/2,即系统线程数的一半

普通账号下 ulimit -u  出现的max user processes的值 默认是 /etc/security/limits.d/20-nproc.conf(centos6 是90-nproc.conf)   文件中的

1.在/etc/security/limits.conf文件里添加如下内容:

* soft nproc 65535   # 打开进程数  
* hard nproc 65535   # 打开进程数
操作方法:
1 echo "* soft nproc 65535"  >> /etc/security/limits.conf
2 echo "* hard nproc 65535"  >> /etc/security/limits.conf

注意:修改这里,普通用户 max  user process值是不生效的,需要修改/etc/security/limits.d/20-nproc.conf文件中的值。或者90-nproc.conf

如果使用*号让全局用户生效是受文件/etc/security/limits.d/20-nproc.conf中nproc值大小制约的,而如果仅仅是针对某个用户,那么就不受该文件nproc值大小的影响。

2.修改 /etc/security/limits.d/20-nproc.conf

因为普通用户受这个文件里的值影响

修改为:

*          soft    nproc     65535

3.系统总限制

其实上面的 max user processes  65535 的值也只是表象,普通用户最大进程数无法达到65535 ,因为用户的max  user processes的值,最后是受全局的kernel.pid_max的值限制。也就是说kernel.pid_max=1024  ,那么你用户的max user processes的值是127426 ,用户能打开的最大进程数还是1024。

查看全局的pid_max方法:
方法一:
cat /proc/sys/kernel/pid_max
方法二:
# sysctl kernel.pid_max
kernel.pid_max = 32768

修改这个值方法:

echo 65535 > /proc/sys/kernel/pid_max
所以以上都操作完成后,才算是正确修改了max user processes 的值
上面只是临时生效,重启机器后会失效
永久生效方法:
在/etc/sysctl.conf中添加kernel.pid_max = 65535
1 # vim /etc/sysctl.conf
2 kernel.pid_max = 65535
3 或者:
4 echo "kernel.pid_max = 65535" >> /etc/sysctl.conf
然后重启机器。

 

14)linux服务器内核参数优化

优化的方法

复制代码
 1 cat>>/etc/sysctl.conf<<EOF
 2 net.ipv4.tcp_fin_timeout = 2
 3 net.ipv4.tcp_tw_reuse = 1
 4 net.ipv4.tcp_tw_recycle = 1
 5 net.ipv4.tcp_syncookies = 1
 6 net.ipv4.tcp_keepalive_time = 600
 7 net.ipv4.ip_local_port_range = 4000    65000
 8 net.ipv4.tcp_max_syn_backlog = 16384
 9 net.ipv4.tcp_max_tw_buckets = 36000
10 net.ipv4.route.gc_timeout = 100
11 net.ipv4.tcp_syn_retries = 1
12 net.ipv4.tcp_synack_retries = 1
13 net.core.somaxconn = 16384
14 net.core.netdev_max_backlog = 16384
15 net.ipv4.tcp_max_orphans = 16384
16 net.nf_conntrack_max = 25000000
17 net.netfilter.nf_conntrack_max = 25000000
18 net.netfilter.nf_conntrack_tcp_timeout_established = 180
19 net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120
20 net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60
21 net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120
22 EOF
复制代码

然后用sysctl –p使其生效

然后vimdiff /etc/sysctl.conf /etc/sysctl.conf.ori      更改的文件与拷贝的文件对比

15)  隐藏Linux版本信息显示

登录后执行如下命令,显示其实际存放内容

复制代码
1 [root@rootedu ~]# cat /etc/issue            <--查看当前主机信息
2 CentOS release 6.7 (Final)
3 Kernel \r on an \m
4 [root@rootedu ~]# uname  -r
5 2.6.32-573.el6.x86_64
6 [root@rootedu ~]# uname  -m
7 x86_64
复制代码

执行以下命令清除系统版本及内核信息(清空就好,不用删除)

 >/etc/issue              <--清空
 >/etc/issue.net        <--清空
cat /etc/redhat-release(需要的情况,能过内部其它文件还是可以查到)

16)  锁定关键系统文件,防止提权被篡改(可选)

 要锁定关键系统文件,必须对账号密码及启动文件加锁,防止被篡改。上锁命令如下

chattr +i /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/inittab

提示:上锁后,所有用户都不能对文件进行修改

解锁:chattr -i

17)  清除多余的系统虚拟账号(可选)

操作前要先根据公司系统提供的服务确定那些账号不需要使用,如果不确定就不要操作了,一般情况下,一个规范的系统提供的服务都比较少,因此,系统中默认的绝大多数虚拟用户都是可以删除掉的(不直接删除,注释即可)。

18)  为grub菜单加密码(可选)

为grup菜单加密码的目的是防止他人修改grup做内核等启动设置,以及用单用户模式启动破解root密码等做操作。也可以在安装系统过程中设定。 
流程: 
1)先用/sbin/grup-crypt产生一个MD5密码串 
2)修改grup.conf文件 
3)重启生效

可以在安装过程中设定.

 

19)  禁止Linux系统被ping(可选)

此优化项从安全角度,禁止ping会增加系统安全,但是我们自己也会通过ping来检查服务器是否异常,所以这不是一个好方法,不建议使用。 
比较好一点的是通过iptabies设置让特定的IP可以ping.

禁止ping的命令如下:

1 echo “net.ipv4.icmp_echo_ignore_all=1” >> /etc/sysctl.conf    <--禁止ping
2 tail -1 / etc/sysctl.conf                                                                <--查看
3 sysctl -p                                                                                     <--生效
4 echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all                   <--临时ping不通
5 echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all                   <--临时还原的方法

20)  升级具有典型漏洞的软件版本

步骤 
1)查看相关软件的版本号

[root@rootedy ~]# rpm -qa openssl
openssl-1.0.1e-42.el6_7.4.x86_64

2)执行升级已知漏洞的软件版本到最新

复制代码
 [root@rootedy ~]# yum install openssl -y 
Loaded plugins: fastestmirror, security
Setting up Install Process
Determining fastest mirrors
 * base: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
base                                                      | 3.7 kB     00:00     
extras                                                    | 3.4 kB     00:00     
updates                                                 | 3.4 kB     00:00     
updates/primary_db                              | 5.2 MB     00:22     
Package openssl-1.0.1e-42.el6_7.4.x86_64 already installed and latest version
Nothing to do
posted @ 2019-03-11 09:28  59111618  阅读(244)  评论(0编辑  收藏  举报