安装Linux后需要调整的一些参数【Linux调优】

来源:互联网 发布:ckfree男士香水淘宝 编辑:程序博客网 时间:2024/05/15 11:05

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

0 0