zoukankan      html  css  js  c++  java
  • CentOS优化

     

    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 
     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

     

  • 相关阅读:
    D365: 笔记(VS无法打开表浏览器)
    D365: 笔记(跟踪调试批处理代码)
    D365: 笔记(非批处理执行class中弹出交互式窗体或报表)
    D365: 笔记(现有量增加批号表字段查询条件)
    D365: 新功能(二)采购发票自动化流程
    D365: 新功能(一)按日期设置编号规则
    ES6 入门教程(未完)
    深入理解TypeScript(未完)
    项目
    vue + threejs 项目踩坑总结
  • 原文地址:https://www.cnblogs.com/dazhidacheng/p/7771550.html
Copyright © 2011-2022 走看看