Linux基础优化

运维技术 jikk345 1303℃ 0评论

原则

(a)安装系统最小化
(b)开启程序服务最小化原则
(c)操作最小化原则
(d)登录最少化原则,平时没有需求不用root登录,要用普通登录。
(e)权限最小化原则
(f)配置参数合理,不要最大化

一、关闭Selinux

[root@Qinglin-A ~]# cat /etc/selinux/config 
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of these two values:
#     targeted - Targeted processes are protected,
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted 

enforcing=意思是完全打开
permissve=意思是关闭但警告
disabled=彻底关闭的意思
#结果:SELINUX=enforcing 意思是现在SELINUX的状态是开启的
例:引用之前尝过的Sed命令进行修改SELINUX的状态。(在使用中记忆)
(a)sed -i s#enforcing#disabled#g /etc/selinux/config

[root@Qinglin-A ~]# sed -i s#enforcing#disabled#g /etc/selinux/config
[root@Qinglin-A ~]# cat /etc/selinux/config |grep SELINUX=

(b)查看是否修改 grep “disable” /etc/selinux/config,成功后重启生效。

[root@Qinglin-A ~]# grep "disable" /etc/selinux/config
#     disabled - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of disabled.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled

(c)getenforce 查看状态
(d)setenforce 0

[root@Qinglin-A ~]# getenforce 
Disabled
[root@Qinglin-A ~]# setenforce 0
setenforce: SELinux is disabled

二、精简开机系统启动的服务

(a)开机启动只留四个服务 查看开机启动服务chkconfig –list|grep “3:on”

[root@Qinglin-A ~]# 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
blk-availability0:off   1:on    2:on    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
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
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
postfix         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
udev-post       0:off   1:on    2:on    3:on    4:on    5:on    6:off

(b)清除所有开机启动服务

[root@Qinglin-A ~]# for i in `chkconfig --list|grep "3:on"|awk '{print $1}'`;do chkconfig $i off;done
[root@Qinglin-A ~]# chkconfig --list|grep "3:on"                                                     
[root@Qinglin-A ~]# 

(c)开启所需要的服务

[root@Qinglin-A ~]# for i in crond network sshd rsyslog sysstat;do chkconfig $i on;done
[root@Qinglin-A ~]# 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

SSHD 远程链接
Network 网络服务
rsyslog 系统日志
crond 计划任务
sysstat 监测系统性能及效率的一组工具

三、更换SSH远程登录的配置

更改root用户和远程22端口,切记先备份
vi /etc/ssh/sshd_config #-编辑sshd_config
修改prot 7377 #-ssh连接默认的,谁都知道,必须要改
PermitRootLogin no #-root用户黑客都知道,禁止它远程登录。
PermiEmptyPasswds no #-禁止空密码登录
UseDNS no #-不使用DNS
修改完重新启动服务 /etc/init.d/sshd restart
关闭防火墙 /etc/init.d/iptables stop
注意:重启后,当前的CRT仍然可以连接服务器,直到退出重新登录为止。
(a)查看并切换cd /etc/ssh/,并备份sshd.config

[root@Qinglin-B ~]# cd /etc/ssh/
[root@Qinglin-B ssh]# ls
moduli      sshd_config       ssh_host_dsa_key.pub  ssh_host_key.pub  ssh_host_rsa_key.pub
ssh_config  ssh_host_dsa_key  ssh_host_key          ssh_host_rsa_key
[root@Qinglin-B ssh]# cp sshd_config sshd_config.rio

(b)修改sshd.config文件
方法1:直接编写并服务到文件内

[root@Qinglin-B ssh]# vim /etc/ssh/sshd_config
shift+gg 到最后一行
填加如下内容
####GQL 2016-5-3####
port 7377
PermitRootLogin no
PermitEmptyPasswords no
UseDNS no
####GQL 2016-5-3####

方法2:依次找到条件,并逐步修改

vi  sshd.config
找到#Port 22 并修改为 port 7377
找到#PermitRootLogin yes 修改为PermitRootLogin no
找到PermitEmptyPasswords yes  修改为PermitEmptyPasswords no
找到UseDNS yes 修改为UseDNS no
注:如果SSH登陆慢,就找到“GSSAPIAuthentication”,改成no

生效条件1:修改完重新启动服务 /etc/init.d/sshd restart

[root@Qinglin-B ssh]# /etc/init.d/sshd restart
Stopping sshd:                                             [  OK  ]
Starting sshd:                                             [  OK  ]

生效条件2:关闭防火墙 /etc/init.d/iptables stop(可以通过iptables设置权限,也可以直接关掉)

[root@Qinglin-B ssh]# /etc/init.d/iptables stop

生效条件3:建立用户并配置sudo权限,否则无法登陆
(a)创建用户

[root@Qinglin-B ssh]# useradd guanqinglin
[root@Qinglin-B ssh]# passwd guanqinglin
Changing password for user guanqinglin.
New password: 
Retype new password: 
passwd: all authentication tokens updated successfully.

(b)配置sudo权限,可以切换root用户

[root@Qinglin-B ssh]# visudo
    107 ## Same thing without a password
    108 # %wheel        ALL=(ALL)       NOPASSWD: ALL
    109 guanqinglin     ALL=(ALL)       NOPASSWD: ALL    ==>添加用户,并配合不需要密码登录切换到root

(c)生效配置文件

[root@Qinglin-B ssh]# source /etc/profile

visudo #-相当于直接编辑/etc/sudoers,但用命令方式更安全,推荐。
sudo -l 查看当权权限
visudo #到98gg 定位行
user machine= COMMANDS 就是用户 机器 权限的意思
qinglin ALL=(ALL) /usr/sbin/useraddd 授权能够创建用户
qinglinALL=(ALL) NOPASSWD:ALL 授权用户可以切换到root不要密码且有服务器所有管理权限
%用户组 机器=(授权哪个角色的权利) /usr/sbin/useradd
PATH环境变量大写,所有包含在环境变量里的路径,都可以直接敲出来执行
全局生效 /etc/profile.普通用户生效~./bash_profile或~/.bashrc
验证登陆效果
(a)配合SecureCRT设置,配合不允许root登陆与7377端口
1
(b)切换到root权限

[guanqinglin@Qinglin-B ~]$ sudo su -
[root@Qinglin-B ~]# sudo -l 
Matching Defaults entries for root 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 root may run the following commands on this host:
    (ALL) ALL

四、中文显示

(a)查看linux默认字符集路径

[root@Qinglin-B ~]# cat /etc/sysconfig/i18n 
LANG="en_US.UTF-8"
SYSFONT="latarcyrheb-sun16"

(b)查看字符集

[root@Qinglin-B ~]# echo $LANG
en_US.UTF-8

(c)修改字符集并使其生效 source /etc/sysconfig/il8n

[root@Qinglin-B ~]# vim /etc/sysconfig/i18n    
LANG="en_US.UTF-8"
SYSFONT="latarcyrheb-sun16"
[root@Qinglin-B ~]# source /etc/sysconfig/i18n    
[root@Qinglin-B ~]# echo $LANG
en_US.UTF-8

五、服务器时间同步

ntp:时间同步服务
(a)查看服务位置

[root@Qinglin-B ~]# which ntpdate
/usr/sbin/ntpdate

(b)更新本地时间

[root@Qinglin-B ~]# /usr/sbin/ntpdate time.nist.gov 
 3 May 16:24:51 ntpdate[3667]: step time server 198.60.73.8 offset -10.843842 sec

(c)将更新时间命令添加到定时任务,保证每5分钟自动与时间服务器同步一次。

[root@Qinglin-B ~]# crontab -e
#time sync by qinglin at 2016-5-3
*/5 * * * * /usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1
[root@Qinglin-B ~]# crontab -l
#time sync by qinglin at 2016-5-3
*/5 * * * * /usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1

2

六、加大服务器文件描述符

每个服务的启动进程的时候都会占用系统文件描述符,而系统分配的又很少,以后在Liunx需要进程的时候会不够用,所以要加大。
文件描述符概念:
(1)表示形式为整数数字(0-65535)
(2)进程使用的时候会占用文件描述符(标识打开的文件)
(a)ulimit -n 查看

[root@Qinglin-B ~]# ulimit -n
1024

(b)ulimit -HSn 65535 临时加大

[root@Qinglin-B ~]# ulimit  -HSn 65535
[root@Qinglin-B ~]# ulimit -n
65535

(c)永久加大文件描述符的办法(重启后也生效)

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

七、调整内核参数文件 /etc/sysctl.conf

内核优化,主要是指在linux系统中针对业务服务应用而进行的系统内核参数调整,优化并无一定的标准,。
高并发linux生产服务器内核参数优化案例
说明:本优化适合apache,nginx,squid多种等web应用,特殊的业务也可能需要略作调整。
所谓内核优化,主要是在Linux系统中针对业务服务应用而进行的系统内核参数优化,优化并无特殊的标准,下面以常见生产环境linux的内核优化为例讲解,仅供大家参考:
(a)调整内核参数
将上面的内核参数值加入/etc/sysctl.conf文件中,然后执行如下命令使之生效:sysctl -p

vim /etc/sysctl.conf编辑文件  shit+g切换到最后一行
然后在最后一行中加入以下代码。
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 = 400065000
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
[root@Qinglin-B ~]# sysctl -p

(b)调整iptables的内核参数
以下参数是对iptables防火墙的优化,防火墙不开会提示,可以忽略不理。
将下面的内核参数值加入/etc/sysctl.conf文件中,然后执行如下命令使之生效:sysctl -p

vim /etc/sysctl.conf编辑文件  shit+g切换到最后一行
然后在最后一行中加入以下代码。
net.ipv4.ip_conntrack_max = 25000000
net.ipv4.netfilter.ip_conntrack_max=25000000
net.ipv4.netfilter.ip_conntrack_tcp_timeout_established=180
net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait=120
net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait=60
net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait=120
[root@Qinglin-B ~]# sysctl -p

八、隐藏系统版本内核版本提示

(a)清空issue文件,登录就不显示系统版本信息

[root@Qinglin-A ~]# >/etc/issue

(b)重新登陆服务器验证

Last login: Tue May  3 14:09:52 2016 from 192.168.1.3
[root@Qinglin-A ~]# 

九、锁定关键系统文件

锁定之后root无法管理此几个文件夹
(a)加锁
chattr +i /etc/passwd 锁定用户
chattr +i /etc/shadow
chattr +i /etc/group
chattr +i /etc/gshadow
chattr +i /etc/inittab
锁定用户文件,结果:尝试创建用户失败

[root@Qinglin-A ~]# chattr +i  /etc/passwd  /etc/shadow  /etc/group /etc/gshadow /etc/inittab
[root@Qinglin-A ~]# useradd test 
useradd: cannot open /etc/passwd

(b)解锁
chattr -i /etc/passwd 锁定用户
chattr -i /etc/shadow
chattr -i /etc/group
chattr -i /etc/gshadow
chattr -i /etc/inittab
解锁用户文件,结果:创建用户成功(注,锁定的还包含用户组和inittab文件,也不可以写入)

[root@Qinglin-A ~]# chattr -i  /etc/passwd  /etc/shadow  /etc/group /etc/gshadow /etc/inittab 
[root@Qinglin-A ~]# useradd test
[root@Qinglin-A ~]# 

(c)lsattr [目录] 查看目录是否锁定
有i是代表加锁

[root@Qinglin-A ~]# lsattr /etc/passwd 
----i--------e- /etc/passwd

没i是代表的解锁

[root@Qinglin-A ~]# lsattr /etc/passwd 
-------------e- /etc/passwd

十、更新Linux镜像或源(补丁或更新)

Yum安装包管理工具(Yellowdog Updater)按装软件的工具
Linux的二进制包一般是rpm包。
IOSYUM本地源安装包(上网查查看)
更新Linux的镜像源
由于Liunx的Centos镜像源都在国外的服务器上,所以下载很慢,对此我们把源下载换成国内的163或阿里云的
例:安装163镜像站的repo文件来修改Centos默认软件源。
第一步,查看自己服务器上的软件源地址

[root@Qinglin-A ~]# cat /etc/yum.repos.d/CentOS-Base.repo |grep http://mirror.centos.org
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
#baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/
#baseurl=http://mirror.centos.org/centos/$releasever/centosplus/$basearch/
#baseurl=http://mirror.centos.org/centos/$releasever/contrib/$basearch/

第二步,去国内的阿里云镜像网站。
http://mirrors.aliyun.com/
3
第三步,按照步骤即可完成
4

十一、Grub加密码(可选项)

[root@Saltstac-node1 /]# /sbin/grub-md5-crypt 
Password: 
Retype password: 
$1$ewfJM$lxm4nBCPtTMWWdzQo88PW.

把输入的密码变成明文件md5,并加入到/etc/grub.conf中的hiddenmenu和title之间,否则可能不生效。

 [root@Saltstac-node1 /]# vim /etc/grub.conf 
 13 hiddenmenu
 14 $1$ewfJM$lxm4nBCPtTMWWdzQo88PW.
 15 title CentOS (2.6.32-431.el6.x86_64)

十二、禁止Linux系统被ping(可选项)

此优化不是必须的,而且有时我们自己也会通过ping来检查服务器是否正常,要求很高的中小
型企业服务器,设置ping也是可以的。从安全的角度来说,禁ping会增加系统安全的。
方法1
禁ping的命令如下:

[root@Saltstac-node1 /]# echo "net.ipv4.icmp_echo_ignore_all=1" >>/etc/sysctl.conf 
[root@Saltstac-node1 /]# tail -1 /etc/sysctl.conf 
net.ipv4.icmp_echo_ignore_all=1
[root@Saltstac-node1 /]# sysctl -p   ==>生效内核(全显示很多内核参数无须理会)

测试(本机pingIP或localhost都无效)

[root@Saltstac-node1 /]# ping 172.16.168.200
PING 172.16.168.200 (172.16.168.200) 56(84) bytes of data.
[root@Saltstac-node1 /]# ping localhost
PING localhost (127.0.0.1) 56(84) bytes of data.

方法2:
iptables关闭防火墙
备份习惯
(a) 有问题回滚
(b)事后比对改过的内容

基本优化篇总节

(1)不用root,添加普通用户,通过sudo授权管理
(2)更改默认的远程连接SSH服务端口及禁止root用户远程连接
(3)定时自动 更新服务器的时间
(4)配置yum更新源,从国内更新源下载安装rpm包
(5)关闭selinux及iptables(iptables工作场景如果有wan ip 一盘要打开,高并发除外)
(6)调整文件描述符的数量,进程及文件的打开都消耗文件描述符。
(7)定时自动清理清理/var/spool/clienttmquene/目录垃圾文件,防止inodes节点被占满(CentOs6.4有sendmail,因此可以不配)。
(8)精简开机自启动服务(crond,sshd,network,rsyslog,sysstat)(centos5.8 syslog)
(9)linux内核参数优化/etc/sysctl.conf,执行sysctl -p生效
(10)更改字符集,支持中文,但建议还是用英文字符集,防止乱码问题,不要使用中文。
(11)锁定关键系统文件 chattr +i
(12)清空/etc/issue,去除系统及内核版本登录前的屏幕显示

转载请注明:清麟博客 » Linux基础优化

喜欢 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址