• 1、关闭SELinux功能 修改配置文件(永久生效) 1 2 ...[root@alon ~]# sed -i 's#SELINUX=enforcing#SELINUX=disabled#' /etc/selinux/config ...[root@alon ~]# gre

    1、关闭SELinux功能

    修改配置文件(永久生效)

    1
    2
    3
    4
    [root@alon ~]# sed -i 's#SELINUX=enforcing#SELINUX=disabled#' /etc/selinux/config
    ##用sed命令修改SELinux的状态
    [root@alon ~]# grep SELINUX=disable /etc/selinux/config  ##检查是否修改成功
    SELINUX=disabled

    临时关闭SELinux(临时生效)

    1
    2
    3
    4
    5
    [root@alon ~]# setenforce 0  ##[ Enforcing | Permissive | 1 | 0 ]
    ##数字0表示Permissive,只给出警示,相当于disable
    ##数字1表示Enforcing,表示开启状态
    [root@alon ~]# getenforce  ##获取当前SELinux的状态
    Permissive

    修改SELinux状态过后,如果要使其立即生效,必须重启系统。

    2、设定运行级别为3(文本模式)

    1
    2
    3
    4
    5
    [root@alon ~]# grep 3:initdefault /etc/inittab ##表示已经是文本模式
    id:3:initdefault:
    [root@alon ~]# runlevel  ##显示当前的运行级别
    N 3  
    [root@alon ~]# init 5   ##切换为5运行级别,如果装了桌面程序可用startx

    3.优化开机启动项

    1)重要的开机启动服务项

        sshd  远程连接程序

        rsyslog  日志相关软件

        network  网络服务

        sysstat  监测系统性能效率软件包,包含(iostat、mpstat、sar)

        crond  计划任务

    2)手动设置开机启动服务

        A:执行ntsysv命令,然后弹出窗口进行设置;

        B:执行setup --> system service,弹出窗口进行设置;

    3)通过shell脚本设置开机启动服务

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    [root@alon ~]# LANG=en
    [root@alon ~]# chkconfig --list |grep 3:on
    abrt-ccpp          0:off    1:off    2:off    3:on    4:off    5:on    6:off
    abrtd              0:off    1:off    2:off    3:on    4:off    5:on    6:off
    acpid              0:off    1:off    2:on    3:on    4:on    5:on    6:off
    atd                0:off    1:off    2:off    3:on    4:on    5:on    6:off
    auditd             0:off    1:off    2:on    3:on    4:on    5:on    6:off
    autofs             0:off    1:off    2:off    3:on    4:on    5:on    6:off
    blk-availability    0:off    1:on    2:on    3:on    4:on    5:on    6:off
    certmonger         0:off    1:off    2:off    3:on    4:on    5:on    6:off
    cpuspeed           0:off    1:on    2:on    3:on    4:on    5:on    6:off
    crond              0:off    1:off    2:on    3:on    4:on    5:on    6:off
    cups               0:off    1:off    2:on    3:on    4:on    5:on    6:off
    haldaemon          0:off    1:off    2:off    3:on    4:on    5:on    6:off
    ip6tables          0:off    1:off    2:on    3:on    4:on    5:on    6:off
    iptables           0:off    1:off    2:on    3:on    4:on    5:on    6:off
    irqbalance         0:off    1:off    2:off    3:on    4:on    5:on    6:off
    kdump              0:off    1:off    2:off    3:on    4:on    5:on    6:off
    lvm2-monitor       0:off    1:on    2:on    3:on    4:on    5:on    6:off
    mcelogd            0:off    1:off    2:off    3:on    4:off    5:on    6:off
    mdmonitor          0:off    1:off    2:on    3:on    4:on    5:on    6:off
    messagebus         0:off    1:off    2:on    3:on    4:on    5:on    6:off
    netfs              0:off    1:off    2:off    3:on    4:on    5:on    6:off
    network            0:off    1:off    2:on    3:on    4:on    5:on    6:off
    nfslock            0:off    1:off    2:off    3:on    4:on    5:on    6:off
    portreserve        0:off    1:off    2:on    3:on    4:on    5:on    6:off
    postfix            0:off    1:off    2:on    3:on    4:on    5:on    6:off
    rpcbind            0:off    1:off    2:on    3:on    4:on    5:on    6:off
    rpcgssd            0:off    1:off    2:off    3:on    4:on    5:on    6:off
    rsyslog            0:off    1:off    2:on    3:on    4:on    5:on    6:off
    sshd               0:off    1:off    2:on    3:on    4:on    5:on    6:off
    sysstat            0:off    1:on    2:on    3:on    4:on    5:on    6:off
    udev-post          0:off    1:on    2:on    3:on    4:on    5:on    6:off

    可以先全部关闭,然后再打开所需要的服务,命令如下:

    1
    2
    3
    4
    5
    6
    7
    8
    [root@alon ~]# for richy in `chkconfig --list |grep 3:on|awk '{print $1}'`;do chkconfig --level 3 $richy off;done
    [root@alon ~]# for richy in crond network rsyslog sshd sysstat ;do chkconfig --level 3 $richy on ;done
    [root@alon ~]# chkconfig --list |grep 3:on
    crond              0:off    1:off    2:on    3:on    4:on    5:on    6:off
    network            0:off    1:off    2:on    3:on    4:on    5:on    6:off
    rsyslog            0:off    1:off    2:on    3:on    4:on    5:on    6:off
    sshd               0:off    1:off    2:on    3:on    4:on    5:on    6:off
    sysstat            0:off    1:on    2:on    3:on    4:on    5:on    6:off

    第二种快速处理方法:一条命令即可实现,(shell循环):

    1
    2
    3
    4
    5
    6
    7
    [root@alon ~]# for richy in `chkconfig --list |grep "3:on"|awk '{print $1}'|grep -vE "crond|network|sshd|rsyslog|sysstat"`;do chkconfig $richy off ;done
    [root@alon ~]# chkconfig --list |grep "3:on"
    crond              0:off    1:off    2:on    3:on    4:on    5:on    6:off
    network            0:off    1:off    2:on    3:on    4:on    5:on    6:off
    rsyslog            0:off    1:off    2:on    3:on    4:on    5:on    6:off
    sshd               0:off    1:off    2:on    3:on    4:on    5:on    6:off
    sysstat            0:off    1:on    2:on    3:on    4:on    5:on    6:off

     第三种快速处理方法:不要shell循环语句也是一条命令:

    1
    2
    3
    4
    5
    6
    7
    [root@alon ~]# chkconfig --list |grep 3:on|grep -vE "crond|sshd|rsyslog|network|sysstat" |awk '{print "chkconfig " $1 " off"}' |bash
    [root@alon ~]# chkconfig --list |grep "3:on"
    crond              0:off    1:off    2:on    3:on    4:on    5:on    6:off
    network            0:off    1:off    2:on    3:on    4:on    5:on    6:off
    rsyslog            0:off    1:off    2:on    3:on    4:on    5:on    6:off
    sshd               0:off    1:off    2:on    3:on    4:on    5:on    6:off
    sysstat            0:off    1:on    2:on    3:on    4:on    5:on    6:off

    当然第三种方法也等同于下面的方法原理:

    1
    2
    3
    4
    5
    6
    7
    [root@alon ~]# chkconfig --list |grep 3:on|grep -vE "crond|sshd|rsyslog|network|sysstat" |awk '{print $1}'|sed -r 's#(.*)#chkconfig \1 off#g' |bash
    [root@alon ~]# chkconfig --list |grep "3:on"
    crond              0:off    1:off    2:on    3:on    4:on    5:on    6:off
    network            0:off    1:off    2:on    3:on    4:on    5:on    6:off
    rsyslog            0:off    1:off    2:on    3:on    4:on    5:on    6:off
    sshd               0:off    1:off    2:on    3:on    4:on    5:on    6:off
    sysstat            0:off    1:on    2:on    3:on    4:on    5:on    6:off

    4、关闭iptables防火墙

        在日常工作中,一般只有配置外网IP的LInux才需要开启防火墙,但即使有外网IP,高并发,高流量的业务服务器仍然不能开启防火墙,因为开启后会有较大的性能损失,导致网站访问速度慢,所以最好使用硬件防火墙了。关闭防火墙的命令如下:

    1
    2
    3
    4
    5
    6
    7
    8
    [root@alon ~]# /etc/init.d/iptables stop
    iptables: Setting chains to policy ACCEPT: filter          [  OK  ]
    iptables: Flushing firewall rules:                         [  OK  ]
    iptables: Unloading modules:                               [  OK  ]
    [root@alon ~]# /etc/init.d/iptables stop  ##重复一遍,确保关闭
    [root@alon ~]# chkconfig iptables off  ##关闭开机自启动命令
    [root@alon ~]# chkconfig --list |grep iptables
    iptables           0:off    1:off    2:off    3:off    4:off    5:off    6:off

    5、Linux最小化安装原则的好处

    安装Linux系统最小化,即选包最小化,yum安装软件包也要最小化,无用的包不装。

    开机自启动服务最小化,即无用的服务不开启

    操作命令最小化。例如 能用"rm -f test.txt" 就不用"rm -fr test.txt"

    登陆Linux用户最小化,平时没有特殊需求不登录root,用普通用户登陆

    普通用户授权最小化,只给用户必需的管理系统的命令

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

    程序服务运行最小化,即程序服务运行应尽量不用root身份运行

    6、更改SSH服务器端远程登录的配置

        Windows远程端口为3389,管理员是administrator,普通用户是guest;Linux管理用户是root,普通用户可以有多个,远程端口默认为22,。为了安全,我们需更改自己的SSH远程端口:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    [root@alon ~]# cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
    [root@alon ~]# vim /etc/ssh/sshd_config
    ####以下为新增加的内容,以替换默认配置####
    Port 60022   ##端口范围0-65535,建议大于1024
    PermitRootLogin no  ##是否允许密码为空的用户登陆
    PermitEmptyPasswords no  ##是否允许root用户登陆,[yes | no | without-password | forced-commands-only]
    UseDNS no  ##指定sshd是否应该对远程主机名进行反向解析,已检查此主机名是否与其IP地址真实对应,默认为yes
    GSSAPIAuthentication no  ##解决Linux之间使用SSH远程连接慢的问题
    ####--------END-------####
     
    ##重启sshd服务以生效 以下两种重启方法
    [root@alon ~]# /etc/init.d/sshd reload
    Reloading sshd:                                            [  OK  ]
    [root@alon ~]# /etc/init.d/sshd restart
    Stopping sshd:                                             [  OK  ]
    Starting sshd:                                             [  OK  ]

        第二种方法使用命令直接修改sshd_config 的内容,本人不建议使用。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    [root@alon ~]# echo  "########修改ssh默认登录端口,禁止root用户登陆#######"\
    cp /etc/ssh/sshd_config /etc/ssh/sshd_config.`date +"%F%H%M%S"`\
    sed -i 's%#Port 22%Port 60022%' /etc/ssh/sshd_config\
    sed -i 's%#PermitRootLogin yes%PermitRootLogin no%' /etc/ssh/sshd_config\
    sed -i 's%#PermitEmptyPasswords no%PermitEmptyPasswords no%' /etc/ssh/sshd_config\
    sed -i 's%#UseDNS yes%UseDNS no%' /etc/ssh/sshd_config\
    sed -i 's%#GSSAPIAuthentication yes%GSSAPIAuthentication no%' /etc/ssh/sshd_config\
    grep "USEDNS |60022|RootLogin|Emptypass|GSSAPIAuthentication" /etc/ssh/sshd_config\
    /etc/init.d/sshd reload

        优化上面的内容:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    [root@alon ~]# sed -ir '13 iPort 60022\nPermitRootLogin no\nPermitEmptyPasswords no\nUseDNS no\nGSSAPIAuthentication no' /etc/ssh/sshd_config
    [root@alon ~]# sed -n '13,17p' /etc/ssh/sshd_config
    Port 60022
    PermitRootLogin no
    PermitEmptyPasswords no
    UseDNS no
    GSSAPIAuthentication no
    ####在第13行插入上述内容###
    /etc/init.d/sshd reload

        验证登陆地址及端口

    1
    2
    3
    4
    [root@alon ~]# netstat -an |grep 192.168.0.25
    tcp        0      0 192.168.0.62:60022          192.168.0.25:5789           ESTABLISHED 
    tcp        0      0 192.168.0.62:22             192.168.0.25:5761           ESTABLISHED 
    tcp        0      0 192.168.0.62:22             192.168.0.25:14680          ESTABLISHED

        现在只能通过richy 登陆并且用su - root命令切换到root.

        ----------除了以上SSH介绍以外,还有更高级的SSH安全策略如下:---------

    1
    2
    3
    4
    5
    6
    7
    8
    9
    [root@alon ~]# sed -n '13,20p' /etc/ssh/sshd_config
    Port 60022
    PermitRootLogin no
    PermitEmptyPasswords no
    UseDNS no
    GSSAPIAuthentication no
    #Port 22
    #AddressFamily any
    #ListenAddress 192.168.0.25  ##表示指定监听本机内网的IP地址,防止其他主机登陆

        -------通过防火墙限制仅能使用内网IP连接此服务器,限制命令如下:

    1
    [root@alon ~]# iptables -I INPUT -p tcp --dport 60022 -s 192.168.0.0/24 -j ACCEPT

    7、利用sudo控制用户对系统命令的使用权限

        为了安全管理,将需要root权限的普通用户加入sudo管理,这样就可以在普通用户模式下,使用一部分root权限的命令管理服务器了。

    1
    2
    3
    4
    [root@alon ~]# visudo  ##相当于直接编辑/etc/sudoers,使用命令visudo更安全和方便
         98 root    ALL=(ALL)                       ALL
         99 richy   ALL=(ALL)                       /usr/sbin/useradd,/usr/sbin/userdel
            用户    机器=(授权使用哪个角色的权限)   授权的命令

        如果给richy的命令为ALL 则拥有和root一样的权限:

    1
    2
    3
    4
    5
    99 richy   ALL=(ALL)           NOPASSWD: ALL   
    ##结尾的ALL 即相当于完全的系统管理权限
    ##结尾的NOPASSWORD 表示提权执行命令的时候不需要提示输入密码 
    [root@alon ~]# grep richy /etc/sudoers  ##检查是否配置成功
    richy     ALL=(ALL)       NOPASSWD: ALL

        也可以使用三剑客来增加sudo授权(仅限于批量管理的情况):

    1
    2
    3
    4
    [root@alon ~]# cp  /etc/sudoers /etc/sudoers.`date "+%F%H%M%S"`
    [root@alon ~]# echo "richy ALL=(ALL) NOPASSWD: ALL" >>/etc/sudoers
    [root@alon ~]# tail -1 /etc/sudoers
    richy ALL=(ALL) NOPASSWD: ALL

        说明richy用户就可以通过sudo ls -l /root 来执行root用户的权限管理命令了;

        --通过sudo授权管理后,所有用户执行授权的特殊权限格式为 "sudo 命令"

        --如果需要切换到root执行相关操作,可以通过“sudo su -”命令,此处的密码为当前用户的密码

        --执行“sudo -l”命令可以查看当前用户被授予的sudo权限集合如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    [richy@alon ~]$ sudo -l
    Matching Defaults entries for richy on this host:
        requiretty, !visiblepw, always_set_home, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE
        INPUTRC KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE",
        env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY
        LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET
        XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin
     
    User richy may run the following commands on this host:
        (ALL) NOPASSWD: ALL

        说明:对于Linux系统的bash内置命令,一般无法进行sudo授权,比如cd命令。

    在工作环境中,可以使用ldap统一认证登陆及授权管理的方式(只要一个账号和密码,全公司多个机房系统内都可通行SVN/VPN/SSH)。

    8、Linux中文的支持及显示

        在日常工作中,我们会需要用到中文的支持以及显示,所以与之相关的字符集包括GBK 、UTF-8

    1
    2
    3
    4
    5
    [root@alon ~]# cp /etc/sysconfig/i18n /etc/sysconfig/i18n.bak
    [root@alon ~]# echo 'LANG="ZH_cn.UTF-8"' >/etc/sysconfig/i18n
    [root@alon ~]# source /etc/sysconfig/i18n
    [root@alon ~]# echo $LANG
    ZH_cn.UTF-8

    9、设置Linux服务器时间同步

        手动同步方法:

    1
    2
    3
    4
    [root@alon ~]# /usr/sbin/ntpdate time.nist.gov
     1 Oct 02:52:58 ntpdate[6876]: step time server 128.138.141.172 offset 5471923.694453 sec
    [root@alon ~]# which ntpdate
    /usr/sbin/ntpdate

        利用定时任务每5分钟执行一次时间同步:

    1
    2
    3
    4
    5
    [root@alon ~]# echo '######NTP Server by richy at 2016-10-1######' >> /var/spool/cron/root
    [root@alon ~]# echo '*/5 * * * * /usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1' >>/var/spool/cron/root
    [root@alon ~]# crontab -l
    ######NTP Server by richy at 2016-10-1######
    */5 * * * * /usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1

        以上命令等同于 执行crontab -e 直接编辑。在服务器数量多的时候可以部署时间服务器。

    10、历史记录数以及登陆超时环境变量设置

        设置限制账号超时时间的命令如下(临时生效):

    1
    2
    [root@alon ~]# export TMOUT=10
    [root@alon ~]# timed out waiting for input: auto-logout  ##10秒展示超时并退出

        设置Linux的命令行历史记录数,history命令记录文件为~/.bash_histroy

    1
    [richy@alon ~]$ export HISTSIZE=1000  ##history 的缓存命令数量

        把上述命令放入配置文件中,可以使其永久生效:

    1
    2
    3
    4
    5
    6
    7
    8
    [root@alon ~]# echo 'export TMOUT=300' >>/etc/profile
    [root@alon ~]# echo 'export HISTSIZE=1000' >>/etc/profile
    [root@alon ~]# echo 'export HISTFILESIZE=10' >>/etc/profile
    [root@alon ~]# tail -3 /etc/profile
    export TMOUT=300   ##连接超时时间控制变量
    export HISTSIZE=1000  ##命令行的历史记录数量变量
    export HISTFILESIZE=10  ##历史记录文件的命令数量变量(~/.bash_history)
    [root@alon ~]# source /etc/profile

        更多的变量可以通过man bash查看。

    11、调整Linux系统文件描述符数量

        文件描述符是由无符号整数表示的句柄,进程使用它来标识打开的文件。文件描述符与包括相关信息(如文件的打开模式、文件的位置类型、文件的初始类型等)的文件对象相关联,这些信息被称作文件的上下文。对于内核而言,所有打开的文件都是通过文件描述符引用的。当打开一个文件,或创建一个文件,内核向进程返回一个文件描述符。当读或者写一个文件时,使用open或creat返回文件的描述符标识该文件,并将其作为参数传递给read或write,Linux服务器文件描述符设置情况可以用ulimit -n 命令,

    1
    2
    [root@alon ~]# ulimit -n
    1024

        但是对于高并发的服务器来说,这个默认设置是不够的,需要调整;

        可以直接编辑/etc/security/limits.conf 在结尾加上这一句:

    1
    *         -    nofile        65535

        或者直接向文件追加一句

    1
    [root@alon ~]# echo '*    -    nofile    65535' >>/etc/security/limits.conf

        说明:配置完成后需要重新登录才能生效

    1
    2
    [richy@alon ~]$ ulimit -n
    65535

        也可以使用脚本直接把“ulimit -SHn 65535”加入到开机启动,每次开机时生效:

    1
    2
    3
    4
    5
    6
    7
    8
    [root@alon ~]# cat >>/etc/rc.local<<EOF
    #-s use the 'soft' resource limit
    #-H use the 'hard' resource limit
    #-n the maximum number of open file descriptors
    ulimit -HSn 65535
    #-s the maximum stack size
    ulimit -s 65535
    > EOF

    12、Linux服务器内核参数的优化

        主要是针对业务服务应用二进行的内核参数调整,优化没有统一的标准,下面的方法仅供参考。

        优化方法是执行 vi /etc/sysctl.conf 命令到文件结尾,然后添加如下内容:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    ###  这个优化适合Apache、Nginx、Squid等多种WEB应用,特殊的业务可能需要略作调整。
    net.ipv4.tcp_fin_timeout = 2
    net.ipv4.tcp_tw_reuse = 1
    net.ipv4.tcp_tw_recycle = 1
    net.ipv4.tcp_syncookies = 1
    net.ipv4.tcp_keepalive_time = 600
    net.ipv4.ip_local_port_range = 4000 65000
    net.ipv4.tcp_max_syn_backlog = 16384
    net.ipv4.tcp_max_tw_buckets = 36000
    net.ipv4.route.gc_timeout = 100
    net.ipv4.tcp_syn_retries = 1
    net.ipv4.tcp_synack_retries =  1
    net.core.somaxconn = 16384
    net.core.netdev_max_backlog = 16384
    net.ipv4.tcp_max_orphans = 16384
    # 一下参数是对iptables防火墙的优化,防火墙不开启会提示,可以忽略不计
    net.nf_conntrack_max = 25000000
    net.netfi1ter.nf_conntrack~max = 25000000
    net.netfilter.nf_conntrack~tcp-t1'meout_estab1ished = 180
    net.netfilter.nf_conntrack_tcp_t1'meout_t1'me_wait = 120
    net.netfilter.nf_conntrack*tcp~t1'meout,close_wait = 60
    net.netfilter.nf_conntrack*tcp~t1'meout*fin__wait = 120

        将上面的内核参数值加入/etc/sysctl.conf 文件中,然后执行如下命令使之生效:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    [root@alon ~]# sysctl -p
    net.ipv4.ip_forward = 0
    net.ipv4.conf.default.rp_filter = 1
    net.ipv4.conf.default.accept_source_route = 0
    kernel.sysrq = 0
    kernel.core_uses_pid = 1
    net.ipv4.tcp_syncookies = 1
    error: "net.bridge.bridge-nf-call-ip6tables" is an unknown key
    error: "net.bridge.bridge-nf-call-iptables" is an unknown key
    error: "net.bridge.bridge-nf-call-arptables" is an unknown key
    kernel.msgmnb = 65536
    kernel.msgmax = 65536
    kernel.shmmax = 68719476736
    kernel.shmall = 4294967296
    net.ipv4.tcp_fin_timeout = 2
    net.ipv4.tcp_tw_reuse = 1
    net.ipv4.tcp_tw_recycle = 1
    net.ipv4.tcp_syncookies = 1
    net.ipv4.tcp_keepalive_time = 600
    net.ipv4.ip_local_port_range = 4000 65000
    net.ipv4.tcp_max_syn_backlog = 16384
    net.ipv4.tcp_max_tw_buckets = 36000
    net.ipv4.route.gc_timeout = 100
    net.ipv4.tcp_syn_retries = 1
    net.ipv4.tcp_synack_retries = 1
    net.core.somaxconn = 16384
    net.core.netdev_max_backlog = 16384
    net.ipv4.tcp_max_orphans = 16384
    net.nf_conntrack_max = 25000000
    error: "net.netfi1ter.nf_conntrack~max" is an unknown key
    error: "net.netfilter.nf_conntrack~tcp-t1'meout_estab1ished" is an unknown key
    error: "net.netfilter.nf_conntrack_tcp_t1'meout_t1'me_wait" is an unknown key
    error: "net.netfilter.nf_conntrack*tcp~t1'meout,close_wait" is an unknown key
    error: "net.netfilter.nf_conntrack*tcp~t1'meout*fin__wait" is an unknown key

        如果实在CENTOS 6 环境中,必须要开启iptables服务才不会出现上述的报错,但是也可以不予理睬,将来开启防火墙后就没有这个提示了。

        扩展:sysctl.conf内核文件中的参数含义可以参考一下博客内关于内核参数详细解释。

    13、定时清理邮件服务临时目录垃圾文件

        Centos 5 系统默认装Sendmail服务,因此邮件临时存放地点为 /var/spool/clientmqueue。

        Centos 6 系统默认装Postfix服务,因此邮件临时存放点位 /var/spool/postfix/maildrop。

        以上两个目录容易被垃圾文件占满,导致系统inode数量耗尽,从而无法存放新文件。

        手动清理方法:

    1
    2
    [root@alon ~]# find /var/spool/clientmqueue/ -type f |xargs rm -f   ##用于CENTOS 5
    [root@alon ~]# find /var/spool/postfix/maildrop/ -type f |xargs rm -f   ##用于CENTOS 6

            写成脚本,加入定时任务每日凌晨0点自动执行清理:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    [root@alon ~]# mkdir -p /server/scripts
    [root@alon ~]# echo "find /var/spool/postfix/maildrop/ -type f |xargs rm -f " > /server/scripts/del_mail_files.sh
    [root@alon ~]# cat /server/scripts/del_mail_files.sh 
    find /var/spool/postfix/maildrop/ -type f |xargs rm -f 
    [root@alon ~]# echo "00 00  *  *  * /bin/sh /server/scripts/del_mail_files.sh >/dev/null 2>&1" >>/var/spool/cron/root 
    [root@alon ~]# crontab -l  ##查看定时任务列表
    ######NTP Server by richy at 2016-10-1######
    */5 * * * * /usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1
    00 00  *  *  * /bin/sh /server/scripts/del_mail_files.sh >/dev/null 2>&1
    [root@alon ~]# df -i   ##查看系统inode总量、剩余量、使用量
    Filesystem                   Inodes IUsed   IFree IUse% Mounted on
    /dev/mapper/vg_alon-lv_root 2990080 66478 2923602    3% /
    tmpfs                        486039     1  486038    1% /dev/shm
    /dev/sda1                    128016    39  127977    1% /boot

    14、隐藏Linux版本信息提示

        在登录到Linux主机钱,会显示系统的版本和内核,为了不让坏人利用我们可以修改显示内容:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    [root@alon ~]# cat /etc/issue
    CentOS release 6.5 (Final)
    Kernel \r on an \m
    [root@alon ~]# cat /etc/issue.net 
    CentOS release 6.5 (Final)
    Kernel \r on an \m
    [root@alon ~]# > /etc/issue
    [root@alon ~]# > /etc/issue.net 
    [root@alon ~]# cat /etc/issue /etc/issue.net

    15、锁定关键系统文件,防止被提权篡改

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

    1
    2
    3
    [root@alon ~]# chattr +i /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/inittab  
    ##解锁命令如下
    [root@alon ~]# chattr -i /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/inittab

        如果想更加暗转,可以吧chattr 改名转移,防止被坏人利用。命令如下:

    1
    2
    3
    4
    5
    6
    [root@alon ~]# mv /usr/bin/chattr /usr/bin/richylocal  ##改名
    [root@alon ~]# chattr +i /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/inittab 
    -bash/usr/bin/chattr: No such file or directory
    [root@alon ~]# richylocal +i /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/inittab 
    [root@alon ~]# richylocal -i /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/inittab 
    [root@alon ~]# mv /usr/bin/richylocal  /etc/chattr  ##还原成chattr

    16、清楚多余的系统虚拟账号

        此步骤谨慎操作,不能确定就不要删除,一般情况下,一个规范的系统提供的服务都比较少,因此系统中默认的绝大多数虚拟用户都可以删除,例如:

    1
    bin adm lp halt mail uucp operator games gopher ftp dbus vcsa abrt ntp saslauth postfix tcpdump等。

    17、为GRUB菜单加密码

       防止他人修改grub进行内核等启动设置。

        (1)先用/sbin/grub-md5-crypt产生一个MD5密码串,命令如下:

    1
    2
    3
    4
    [root@alon ~]# /sbin/grub-md5-crypt 
    Password: 
    Retype password: 
    $1$cc1Q./$PS9.NLcRTAkvS6NBePS771

        (2)修改gurb.conf文件,命令如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    [root@alon ~]# vim /etc/grub.conf
    # grub.conf generated by anaconda
    #
    # Note that you do not have to rerun grub after making changes to this file
    # NOTICE:  You have a /boot partition.  This means that
    #          all kernel and initrd paths are relative to /boot/, eg.
    #          root (hd0,0)
    #          kernel /vmlinuz-version ro root=/dev/mapper/vg_alon-lv_root
    #          initrd /initrd-[generic-]version.img
    #boot=/dev/sda
    default=0
    timeout=5
    splashimage=(hd0,0)/grub/splash.xpm.gz
    hiddenmenu
    password --md5 $1$cc1Q./$PS9.NLcRTAkvS6NBePS771  
    ##增加的password加在splashimage 和 title之间,否则可能无法生效
    title CentOS (2.6.32-431.el6.x86_64)
            root (hd0,0)
            kernel /vmlinuz-2.6.32-431.el6.x86_64 ro root=/dev/mapper/vg_alon-lv_root rd_NO_LUKS LANG=en_US.UTF-8 rd_LVM_LV=vg_alon/lv_swap rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=vg_alon/lv_root  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
            initrd /initramfs-2.6.32-431.el6.x86_64.img

    设置完成后,下次开机需要管理grub时就会提示输入密码;

    18、精致LINUX系统被ping

        此项优化不是必须的,相反,有时我们自己也会通过ping来检查服务器的连通性,如果有特殊的禁止PING的要求,也可以设置禁止PING。从安全的角度来说,禁止PING还是会增加系统的安全性。

    1
    2
    3
    4
    [root@alon ~]# echo "net.ipv4.icmp_echo_ignore_all = 1" >> /etc/sysctl.conf 
    [root@alon ~]# tail -1 /etc/sysctl.conf 
    net.ipv4.icmp_echo_ignore_all = 1
    [root@alon ~]# sysctl -p

        其实这个禁止PING的方法不是最佳的,因为禁止后,我们自己也无法通过PING来检查了,我们现在还原禁止PING的操作:

    1
    2
    删除/etc/sysctl.conf中的 net.ipv4.icmp_echo_ignore_all = 1 ,保存后并执行如下命令
    [root@alon ~]# echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all

    19、升级具有典型漏洞的软件版本

        此处仅列出常用的一些软件并对其进行修复,比如openssl、openssh、bash。

        (1)首先查看相关软件的版本号:

    1
    2
    3
    4
    [root@alon ~]# rpm -qa openssl openssh bash
    bash-4.1.2-15.el6_4.x86_64
    openssl-1.0.1e-15.el6.x86_64
    openssh-5.3p1-94.el6.x86_64

        (2)升级一直漏洞的软件版本到最新:

    1
    [root@alon ~]# yum install -y openssl openssh bash


    Linux基本优化的总结

        1.不用 root 登陆管理系统,而已普通用户身份登录,通过sudo授权管理。

        2.更改默认的SSH端口,禁止root用户远程连接,更可以更改SSH只监听内网端口。

        3.定时自动更新时间服务器时间,使其与互联网时间同步。

        4.配置yum更新源,从国内更新下载安装软件包。

        5.关闭SELinux及iptables(在工作中,如果有外部IP一般要打开iptables,高并发高流量的服务器可能无法开启)。

        6.调整文件描述符数量,进程及文件的打开都会消耗文件描述符数量。

        7.定时自动清理邮件临时目录垃圾文件,防止磁盘inode被小文件占满。

        8.精简并保留必要的开机自动启动服务(如crond sshd network rsyslog sysstat)。

        9.Linux内核参数优化/etc/sysctl.conf,执行sysctl -p生效。

        10.更改系统字符集为"zh_CN.UTF-8",使其支持中文,防止乱码。

        11.锁定关键系统文件,如 passwd shadow group gshadow inittab等,并把chattr改名并转移。

        12.清空/etc/issue、/etc/issue.net,去除系统及内核版本的登录前提示。

        13.清除多余的系统虚拟账号。

        14.为GRUB引导菜单加密。 



        VMware虚拟机克隆虚拟机后网络不通的问题。

        1.编辑网卡对应的eth0配置文件,删除 MAC地址及UUID。

    1
    2
    3
    4
    5
    [root@alon ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 
    ##删除下面的两条记录,
    HWADDR=00:0C:29:E9:20:FF
    UUID=10447b7c-2ace-4ea6-8f3b-83119a8bd77d  
    ##也可以根据实际情况对MAC和UUID进行修改。

        2.清空下列文件:

    1
    2
    [root@alon ~]# > /etc/udev/rules.d/70-persistent-net.rules
    ##提示:机器名可以不更改

        3.重启系统,执行reboot或在VM外重启系统。

        说明:

        这可能是VM克隆为了防止源机器和克隆机器启动网络配置地址冲突而做的保护策略,也有可能是VM官方没有考虑到这个问题。


    本文转载自 “Richy的运维日志” 博客,请务必保留此出处http://richylu.blog.51cto.com/1481674/1858303

    展开全文
  • Linux函数 2011-02-24 15:58:00
    函数:如果参数是一个函数指针,调用者可以传递一个函数的地址给实现者,让实现者去调用它,这称为回函数(Callback Function)。回机制包括两部分:服务执行者和服务方式制定者。 1. 服务执行者先制定服务...
  • linux下屏幕亮度调节快捷键无效,在我的机器上反映为:windows10 下F10,F11能增减亮度,但切换到ubuntu18.04下之后,这两个按键失效。屏幕亮度无法调节,太亮伤害眼睛。 环境声明: ubuntu18.04 win10 解决方案...
  • 部分机型安装linux后,无法调节屏幕亮度。经我个人测试 (笔者笔记本型号为 联想B450), ubunt, fedora, centos 都会有无法调节屏幕亮度的问题。 对于这种问题,有些机型自带的Fn+亮度可以调节,但很多不可以。不...
  • 2015年03月12日 15:44:07 厨房小菜刀 阅读数:764 标签: 压力测试nginxLinux系统参数调 更多 个人分类: nginx 版权声明:本文为博主原创文章,未经博主允许不得转载。 ...
  • liunx使用setitimer()函数设置定时器,一定间隔后触发回函数。#include #include #include #include #include <signal.h>void timer_handler (int signum) { printf("trigger..."); }in
  • 函数 参数传递 2013-11-30 02:21:53
    函数一般是按照调用者的要求定义好参数和返回值的类型,你向调用者提供你的回函数的入口地址,然后调用者有什么事件发生的时候就可以随时按照你提供的地址调用这个函数通知你,并按照预先规定好的形式传递参数...
  • 如果你把函数的指针(地址)作为参数传递给另一个函数, 当这个指针被用为调用它所指向的函数时,我们就说这是回函数。 回函数不是由该函数的实现方直接调用, 而是在特定的事件或条件发生时由另外的一方调用...
  • 内核参数
  • (这里引用了知乎上一些知友的回答,...当一个函数指针指向了一个函数,就可以通过这个指针来调用该函数,可以将函数作为参数传递给函数指针。  那函数指针在我们实际编程中会起到怎样的作用呢?前一篇关于函数指针
  • 待完善。
  • FrameBuffer,可以译作“帧缓冲”,有时简称为fbdrv,基于fbdrv的...使用Linux内核的 FrameBuffer驱动(vesafb),可以轻松支持到1024X768X32bpp以上的分辩率。而且目前可得到的绝大多数linux版本所发行的内核中,已经
  • linux启动参数详解 2013-11-26 11:44:33
    Linux内核在启动的时候,能接收某些命令行选项或启动时参数。当内核不能识别某些硬件进而不能设置硬件参数或者为了避免内核更改某些参数的值,可以通过这种方式手动将这些参数传递给内核。     如果不使用启动...
  • Linux内核参数详解 2015-07-30 09:23:20
    内核参数详解长期更新SYN_RECV服务端收到sys,还未发出syn+ack 1.net.ipv4.tcp_synack_retries 默认值5,linux对应1+2+4+..32=2^6-1=63s2.net.ipv4.tcp_syncookies 应该设置为1,防止SYN Flood。 处在SYN_RECV的...
  • Linux C 回(callback)函数 2019-06-13 15:02:20
    如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回函数。回函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,...
  • linux系统参数调整 2018-06-12 23:17:35
    一、简介在linux系统中,当安装如elasticsearch、solr等应用时,linux系统会提示各种因各种限制而导致安装失败,这里对遇到的一些进行介绍。二、各种限制1、查看系统所有限制命令: ulimit -a2、修改打开文件数限制...
  • linux程序的命令行参数 2010-02-09 22:16:00
    程序执行的时候需要命令行参数linux中更是这样,随便在shell输入/bin/XX --help后列举出来的参数让你头晕眼花,可是这些参数是怎么进入程序的呢,我们知道程序执行的时候一般从main开始,而mian有两个参数,一个是...
  • 用vim打开配置文件:#vim /etc/sysctl.conf 在这个文件中,加入下面的几行内容: net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_tw_reuse = 1 ... ...输入下面的命令,让内核参数生效:#sysctl -p net
  • 简单的不带通配符linux命令调用非常简单,使用Runtime.getRuntime().exec(command)即可,如果要显示错误,或者   输出信息,得到相应的inputStream,既可以打印出信息.   但是对于以下命令:   ls /var/log...
  • 为了实现亮度低且无闪烁,一个解决办法是:先把屏幕亮度至最高,然后使用软件方式降低屏幕亮度。 google多次,终于找到了xbrightness这个软件,后来又找到了redshift这个软件。 一. 使用redshif
1 2 3 4 5 ... 20
收藏数 132,927
精华内容 53,170