linux-初始化配置及优化

1 安装Linux系统相关经验

1.1 RAID配置

1.1.1 系统盘

raid 1

1.1.2 数据盘

raid5 raid1  raid10

1.2 分区经验

1.2.1 系统分区和数据分区隔离

便于管理,便于修复

1.2.2 LVM是否需要

作用不大,不好对数据进行修复,性能读取低

1.2.3 多分区原则

/boot /  /var  /usr  /data

系统默认安装到/usr/local中?

1.3 swap使用建议

内存使用swap方式:
默认内存使用超过40%会使用swap,需要调整这个值
会适当的分一个swap,4G

1.4 软件安装建议

精简安装
base
开发工具
2 安装 Linux 系统后调优及安全设置

2.1 关闭 SELinux 功能

SELinux(Security-Enhanced Linux)是美国国家安全局(NSA)对于强制访问控制的实现,这个功能让系统管理员又爱又恨,这里我们还是把它给关闭了吧。

2.1.1 修改配置文件,永久生效

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

修改配置文件可使配置永久生效,但必须要重启系统,此步是 sed 快速修改方法,也可以通过 vi
编辑修改此文件。

grep SELINUX=disabled /etc/selinux/config
SELINUX=disabled #<== 检查替换结果为 disabled 就表示编辑成功了

2.1.2 临时关闭SELinux

setenforce 0
usage: setenforce [ Enforcing | Permissive | 1 | 0 ]

数字 0 表示 Permissive,即给出警告提示,但不会阻止操作,相当于 disabled。
 数字 1 表示 Enforcing,即表示 SELinux 为开启状态。

setenforce 0  <== 临时将 SELinux 调成 Permissive 状态。
getenforce  <== 查看 SELinux 当前状态
Permissive

命令说明如下。
‰ ‰ setenforce:用于命令行管理 SELinux 的级别,后面的数字表示设置对应的级别。
‰ ‰ getenforce:查看 SELinux 当前的级别状态。
提示: 修改配置 SELinux 后,要想使其生效,必须要重启系统。因此,可配合使用 setenforce 0 这个临时使其关闭的命令,这样在重启前后都可以使SELinux 关闭生效,也就是说无须立刻重启服务器了,在生产场景下 Linux
机器是不能随意重启的

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

设定运行级别(runlevel)为 3,即表示使用文本命令行模式管理 Linux

grep 3:initdefault /etc/inittab
id:3:initdefault: <== 这里的 3 就是 Linux 默认的运行级别,如果有需求可以将其
  修改为其他级别。工作中常用 3 级别,即文本模式。
[root@www ~]# runlevel  <== 查看当前系统运行级别
N 3

2.3 精简开机系统自启动

重要的开机自启动服务
新装Linux系统有必要保留的5个开机自启动服务
1.sshd :远程连接 Linux 服务器时需要用到这个服务程序,所以必须要开启,否则Linux 服务器就无法提供远程连接服务了
2.rsyslog :日志相关软件,这是操作系统提供的一种机制,系统的守护程序通常会使用 rsyslog 程序将各种信息写到各个系统日志文件中,在 CentOS 6 以前此服务的名字为 syslog
3.network:系统启动时,若想激活 / 关闭各个网络接口,则应(必须)考虑开启此服务。
4.crond :该服务用于周期性地执行系统及用户配置的任务计划。有要周期性执行的任务时,就要开启,此服务几乎是生产场景必须要用的一个软件
5.sysstat :sysstat 是一个软件包,包含监测系统性能及效率的一组工具,这些工具对于我们收集系统性能数据很有帮助,比如 CPU 使用率、硬盘和网络吞吐数据等,对这些数据的收集和分析,有利于判断系统运行是否正常,所以它是提高系统运行效率、安全运行服务器的得力助手。
6.脚本代码

initService(){
	echo "Close Nouseful Service"
	export LANG="en_US.UTF-8"
   for i in `chkconfig --list | grep 3:on | awk '{print $1}'`;do chkconfig --level 3 $i off ; done
   for i in cron syslog sshd network sysstat;do chkconfig --level 3 $i on ; done
   export LANG="zh_CN.UTF-8"
   echo "Close Nouserful service ->OK"
   sleep 1
}

待定项:
rsyslog 默认系统自带,系统里面产生的各种日志
auditd 是Linux审计系统中用户空间的一个组件,作用是监控文件和目录的更改
blk-availability 块设备的可用性
ip6tables IP6,看情况
kdump 是一个内核崩溃转储机制,在系统崩溃的时候,Kdump将捕获系统信息,这对于崩溃的原因非常有帮助
lvm2-monitor 使用LVM下开启
mdmonitor RAID相关设备的守护程序,磁盘错误事件会触发 mdmonitord 守护进程对 RAID–1(镜像)卷、RAID–5 卷和热备件执行检查
messagebus 信息总线
netfs 挂载网络文件系统
postfix 邮件系统
udev-post udevd是根据一定的规则在/dev/目录下生成设备文件。是帮助实现即插即用的一个重要环节

2.4 防火墙iptables

2.4.1 关闭iptables

在企业环境中,一般只有配置外网 IP 的 Linux 服务器才需要开启防火墙,但即使有外网 IP,高并发、高流量的业务服务器仍然不能开启防火墙,因为开启后会有较大性能损失,导致网站访问速度很慢,这种情况下只能在前端加更好的硬件防火墙了
[root@www ~]# /etc/init.d/iptables stop

2.4.2 推荐iptables配置

iptables -P INPUT ACCEPT
iptables -F
iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
iptables -A INPUT -s 1.1.1.1-p tcp -m tcp --dport 22 -j ACCEPT
iptables -A INPUT -s 2.2.2.2-p tcp -m tcp --dport 22 -j ACCEPT
iptables -A INPUT -i eth1-j ACCEPT
iptables -A INPUT -i lo -j ACCEPT 
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP
iptables -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN FIN,SYN -j DROP
iptables -A INPUT -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j DROP
iptables -A INPUT -p tcp -m tcp --tcp-flags FIN,RST FIN,RST -j DROP
iptables -A INPUT -p tcp -m tcp --tcp-flags FIN,ACK FIN -j DROP
iptables -A INPUT -p tcp -m tcp --tcp-flags PSH,ACK PSH -j DROP
iptables -A INPUT -p tcp -m tcp --tcp-flags ACK,URG URG -j DROP
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP

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

initSsh(){
cat > $ADJUST_CONF/sshd_config  << EOF
PORT $SSH_PORT
Protocol 2                                   
Compression yes
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile	.ssh/authorized_keys
PermitRootLogin yes
UseDns no
SyslogFacility AUTHPRIV
PasswordAuthentication yes
ChallengeResponseAuthentication no
GSSAPIAuthentication no
GSSAPICleanupCredentials yes
UsePAM yes
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS
X11Forwarding no
Subsystem       sftp    /usr/libexec/openssh/sftp-server
EOF
cmp  $ADJUST_CONF/sshd_config /etc/ssh/sshd_config
if  [ $? -ne  0 ];then
	\cp /etc/ssh/sshd_config  $BACK_CONF/sshd_config.`date +%F`
	cat $ADJUST_CONF/sshd_config > /etc/ssh/sshd_config 
	egrep "UseDns|52113|PermitRootLogin|PeermitEmpPasswords"  /etc/ssh/sshd_config
	/etc/init.d/sshd reload && action "11 ssh已配置完成!"  /bin/true  || action "11 ssh已配置完成!"  /bin/false
else
	action "11 ssh已配置完成!"  /bin/true
fi
sleep 1
} 

sshd_conf ig 修改的相关参数说明
Port:指定 sshd 守护进程监听的端口号,默认为 22。默认在本机的所有网络接口上监听,也可以通过 ListenAddress指定只在某个特定的接口上监听。端口范围:0 ~ 65535,不能与已有的服务器端口冲突。一般建议改为比 1024 大的端口
PermitEmptyPasswords: 是否允许密码为空的用户远程登录。默认为“no”
PermitRootLogin:是否允许 root 登录。可用值如下: “yes” (默认)表示允许; “no”表示禁止;
“without-password”表示禁止使用密码认证登录;
“forced-commands-only”表示只有在指定了 command 选项的情况下才允许使用公钥认证登录,同时其他认证方法全部被禁止,这个值常用于做远程备份之类的事情
UseDNS:指定 sshd 是否应该对远程主机名进行反向解析,以检查此主机名是否与其IP 地址真实对应。默认值为“yes” 。建议改成“no” ,否则可能会导致 SSH 连接很慢
GSSAPIAuthentication no :解决 Linux 之间使用 SSH 远程连接慢的问题

2.6 主机域名设置

ip=192.168.1.117
hostNameTmp=bicserver.qhfax.com
initHostName(){
	\cp /etc/hosts $BACK_CONF/hosts.$(date +%F)
echo "$ip $hostNameTmp" >> /etc/hosts
	#使hostname生效	
	hostname $hostNameTmp
	#sed –i s/HOSTNAME=.*/HOSTNAME=$hostNameTmp/   /etc/sysconfig/network
          echo " HOSTNAME=$hostNameTmp "  > /etc/sysconfig/network

}
initHostNam

2.7 时区的设置

设置为亚洲上海

initZone(){
	    if [ 'ZONE="Asia/Shanghai' == `cat /etc/sysconfig/clock`  ];then
			cp -f /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
			echo 'ZONE="Asia/Shanghai"' > /etc/sysconfig/clock
		fi
		action "04 时区已设置成功!"  /bin/true

}

2.8 时间同步

第一种:ntpdate

syncSystemTime(){

	if [ `grep 0.0.0.123 /var/spool/cron/root | grep -v grep | wc -l ` -lt 1 ];then	
		echo "*/5 * * * * root /usr/sbin/ntpdate 10.0.0.123 > /dev/null 2>&1 " >> /var/spool/cron/root
	fi
	action "05 同步系统时间成功!"  /bin/true
}

第二种:

rdate -s IP

第三种:配置自己的ntp server 。

yum install ntp

配置时间源

vi /etc/ntp.conf
server 210.72.145.44
server ntp.api.bz
server 2.centos.pool.ntp.org

配置对客户端(172.16.5.0/24的网段机器)提供NTP服务

vi /etc/ntp.conf

restrict 172.16.5.0 mask 255.255.255.0 nomodify notrap #去掉“#”

  1. 推荐命令
    /usr/sbin/ntpdate ntp.sjtu.edu.cn>> /var/log/ntp.log 2>&1; /sbin/hwclock –w

2.9 禁止ctrl+alt+del三键重启系统

init_safe(){

	cp /etc/init/control-alt-delete.conf $BACK_CONF/control-alt-delete.conf.`date +F`
	sed -i 's#exec /sbin/shutdown -r now "Control-Alt-Delete pressed"#\#exec /sbin/shutdown -r now "Control-Alt-Delete pressed"#g' /etc/init/control-alt-delete.conf
    action "12 禁止ctrl+alt+del三键重启系统" /bin/true 

}

2.10 历史记录数及登录超时环境变量设置

2.10.1 设置闲置账号超时时间

[root@www ~]# export TMOUT=10                < - -临时生效
[root@www ~]#
timed out waiting for input: auto-logout # ç‰ 10 秒提示超时
[root@www ~]# echo 'export TMOUT=300' >>/etc/profile   < - -永久生效

2.10.2 设置 Linux 的命令行历史记录数

[root@www ~]# export HISTSIZE=5         <-- 临时生效
[root@www ~]# echo 'export HISTSIZE=5' >>/etc/profile             < - -永久生效
[root@www ~]# echo 'export HISTFILESIZE=5' >>/etc/profile 

HISTSIZE=5:命令行的历史记录数量变量。
HISTFILESIZE=10:历史记录文件的命令数量变量(~/.bash_history) 。
[root@www ~]# source /etc/profile # 《–‰ 使得配置文件生效
2.11 定时清理邮件服务临时目录垃圾文件
CentOS 5 系列的系统会默认安装 Sendmail 服务,因此邮件临时存放路径为 /var/spool/clientmqueue/。CentOS 6 默认情况下没有安装 Sendmail 服务,而是改装了 Postf ix 服务,因此邮件临时存放地点的路径为 /var/spool/postf ix/maildrop/。以上两个目录很容易被垃圾文件填满,导致系统的 inode 数量不够用,从而无法存放文件。
[root@oldboy ~]# find /var/spool/clientmqueue/ -type f|xargs rm -f
‰ ‰ ‰ ‰ ‰ ‰ ‰ ç‰ 适合 Centos5 的 Sendmail 服务
[root@oldboy ~]# find /var/spool/postfix/maildrop/ -type f|xargs rm -f
‰ ‰ ‰ ‰ ‰ ‰ ‰ ç‰ 适合 CentOS 6 的 Postfix 服务

2.12 清除版本信息

[root@www ~]# > /etc/issue
[root@www ~]# cat /etc/issue
[root@www ~]# > /etc/issue.net
[root@www ~]# cat /etc/issue.net

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

chattr +i /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/inittab
解锁chattr -i /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/inittab

查看文件状态:使用lsattr命令查看文件的隐藏属性

2.14 为 grub 菜单加密码

为 grub 菜单加密码的目的是防止他人修改 grub 进行内核等启动设置,以及用单用户模式启动进行破解 root 密码等操作。实际上此步可以在安装系统的过程中设定,安装系统后的具体设定步骤如下。

[root@www ~]# /sbin/grub-md5-crypt                             MD5生成密码串
Password:
Retype password:
$1$hoY96$dM9GlbjKLbi/GV8J9neOm1
[root@www ~]# vi /etc/grub.conf                          添加一行
password --md5 $1$hoY96$dM9GlbjKLbi/GV8J9neOm1

注意:password 要加在 splashimage 和 title 之间,否则可能无法生效

2.15 linux中文支持

默认linux字符编码是en

yum groupinstall "Chinese Support"
zh_CN.UTF-8

2.16 文件打开数等资源设置

文件描述符是由无符号整数表示的句柄,进程使用它来标识打开的文件。文件描述符与包括相关信息(如文件的打开模式、文件的位置类型、文件的初始类型等)的文件对象相关联,这些信息被称作文件的上下文。文件描述符的有效范围是 0 到 OPEN_MAX。对于内核而言,所有打开的文件都是通过文件描述符引用的。当打开一个现有文
件或创建一个新文件时,内核向进程返回一个文件描述符。当读或写一个文件时,使用open 或 creat 返回的文件描述符标识该文件,并将其作为参数传递给 read 或 write,默认1024,对于高并发的业务 Linux 服务器来说,这个默认的设置值是不够的

openFiles(){
	cat > $ADJUST_CONF/limits.conf  << EOF
# nofile 可以被理解为是文件句柄数 文件描述符 还有socket数```shell

* soft nofile 65535
* hard nofile 65535
# 最大进程数

* soft nproc 65535
* hard nproc 65535
EOF

cmp  $ADJUST_CONF/limits.conf  /etc/security/limits.conf
if  [ $? -ne  0 ];then
	echo "----调整最大打开系统文件个数65535个------"
	\cp /etc/security/limits.conf $BACK_CONF/limits.conf.`date +%F`
	cat $ADJUST_CONF/limits.conf > /etc/security/limits.conf  
	ulimit -HSn 65535
	echo "ulimit -HSn 65535" >> /etc/rc.local
	action "08 调整打开系统文件个数成功!(修改后重新登录生效)"  /bin/true

else
     action "08 调整打开系统文件个数已配置!"  /bin/true

fi
	sleep 1
}

2.17 利用sudo控制用户对系统命令的使用权限
为了安全及管理的方便,可将需要 root 权限的普通用户加入 sudo 管理,这样用户就可以通过自己的普通账户登录,利用 root 的权限来管理系统了,当然也就不需要有root 账号及密码了
Visudo
实际编辑/etc/sudoers文件
用户名 被管理主机地址=(可使用身份) 可执行的命令
root ALL=(ALL) ALL
Centos ALL=(ALL) /usr/sbin/useradd,/usr/sbin/userdel
%用户组 ALL=(ALL) /usr/sbin/useradd
\cp /etc/sudoers /etc/sudoers.ori
echo "centos ALL=(ALL) NOPASSWD: ALL " >>/etc/sudoers <-- 此处加了全部权限
tail -1 /etc/sudoers
visudo -c # →直接追加内容没有语法检查,因此要单独执行语法检查命令

  1. 可以禁止root用户登录
  2. 然后通过普通用户使用sudo切换到root权限
    sudo su -
  3. sudoers权限必须是440
    2.18 禁止 Linux 系统被 ping
    此项优化不是必须的,而且有时我们自己也会通过 ping 来检查服务器是否异常,对于要求很高的中小企业服务器,设置禁止 ping 也是可以的。从安全角度来说,禁止ping 还是会增加系统安全的。禁止 ping 的命令如下
    [root@www ~]# echo “net.ipv4.icmp_echo_ignore_all=1” >> /etc/sysctl.conf
    [root@www ~]# sysctl –p
    2.19 yum源配置
    配置阿里云的yum源

ConfigYum(){
echo “Config Yum CentOS-Base.repo”

#\cp的作用是逃离别名
if [ ! -f "/etc/yum.repos.d/epel.repo" ];then

	\cp CentOS-Base.repo CentOS-Base.repo.bak.$(date +%F)
	ping -c 1 baidu.com > /dev/null
	[ ! $? -eq 0 ] && echo "Networking not configured -- exiting" && exit 1

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyuncs.com/repo/Centos-6.repo
yum clean metadata
yum makecache
else
echo “YUM源已进行过优化”
fi
}
2.20 禁止IPv6
disableIPV6(){

if [ `cat /etc/modprobe.conf | grep "alias net-pf-10 off" | wc -l` -lt 1 ];then
cp /etc/modprobe.conf $BACK_CONF/modprobe.conf.`date +%F`
echo "alias net-pf-10 off"  >> /etc/modprobe.conf
echo "alias ipv6 off"  >> /etc/modprobe.conf
fi
action $"13 禁止使用IPV6" /bin/true 

}

2.21 更新内核和软件

清空yum缓存
yum clean all
生存缓存
yum makecache
开始更新系统以及内核
yum upgrade
必备软件
yum install ntpdatewget -y
2.22 可以删除的用户和组
#删除不必要的用户
userdel adm
userdel lp
userdel sync
userdel shutdown
userdel halt
userdel news
userdel uucp
userdel video
userdelgames
userdel gopher
userdel ftp

#删除不必要的群组
groupdel adm
groupdel lp
groupdel news
groupdel uucp
groupdel games
groupdel dip

3 系统内核调优

3.1 常见案例日志:kernel: ip_conntrack: table full, dropping packet

3.1.1 ip_conntrack_max参数

由开启iptables导致
/proc/sys/net/ipv4/netfilter/ip_conntrack_max或者
/proc/sys/net/ipv4/ip_conntrack_max (centos5.x)
/proc/sys/net/netfilter/nf_conntrack_max(centos6.x)
在/etc/sysctl.conf加入
net.ipv4.netfilter.ip_conntrack_max = 655360(centos5.x)
net.nf_conntrack_max = 100000(centos6.x)
3.1.2 swappiness参数
表示使用swap的概率,此值越大,表示使用swap的概率越大。推荐配置如下:
查看目前配置:cat/proc/sys/vm/swappiness
添加如下内容到/etc/sysctl.conf
vm.swappiness=10
表示当内存使用率超过(100-10)90%时,才开始使用swap。

3.1.3 我们线上web服务器配置参考(每天3亿的量)

net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 10
net.ipv4.tcp_max_syn_backlog = 20000
net.core.netdev_max_backlog = 32768
net.core.somaxconn = 32768
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_max_orphans = 3276800

net.ipv4.tcp_fin_timeout = 10
net.ipv4.tcp_keepalive_time = 120
net.ipv4.ip_local_port_range = 1024 65535
net.ipv4.tcp_max_tw_buckets = 80000
net.ipv4.tcp_keepalive_time = 120
net.ipv4.tcp_keepalive_intvl = 15
net.ipv4.tcp_keepalive_probes = 5
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2

net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 10
net.ipv4.tcp_max_syn_backlog = 20000
net.core.netdev_max_backlog = 32768
net.core.somaxconn = 32768
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2

net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_max_orphans = 3276800
net.ipv4.ip_local_port_range = 1024 65535
net.ipv4.tcp_max_tw_buckets = 500000
net.ipv4.tcp_keepalive_time = 60
net.ipv4.tcp_keepalive_intvl = 15
net.ipv4.tcp_keepalive_probes = 5
net.nf_conntrack_max = 2097152

sysctl -p

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

^白开水^

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值