Linux 基础优化

1、操作的最小化原则

1)安装系统最小化

一般情况下安装OS时,软件安装包组(Package Group)的选择:
base--------------------------基本环境
editors-----------------------编辑器
development librarys------开发库
development tools---------开发工具
x software development--图形界面开发软件
system tools----------------系统工具

2)开启程序服务最小化原则

for i in `chkconfig --list|grep 3:on|awk '{print $1}'`;do chkconfig --level 3 $i off;done
for i in crond network syslog sshd;do chkconfig --level 3 $i on;done
只留:crond network syslog sshd;
3)登陆最小化原则;平时没有需求不用root登陆,要用普通登陆。
useradd  tom ; echo 123456 | passwd --stdin tom

2 、更改ssh服务默认端口及常规配置

vim /etc/ssh/sshd_config         

 #ListenAddress 0.0.0.0                 #监听ip
Port    52113                   #ssh连接默认的端口
PermitRootLogin    no                   #禁止root远程登陆。
PermitEmptyPasswords    no              #禁止空密码登陆
UseDNS    no                            #不使用DNS
GSSAPIAuthentication no                 #连接慢时改为no

3、 Sudo的应用

让普通用户可以拥有指定root权限功能

1) 通过visudo配置sudo

 

注:当给普通用户全部root权限时,可通sudo  su – 命令由当前普通用户切换到root用户环境变量中,而无需知道root的密码,只要知道当前用户密码即可切换成功。

2) 通过配置文件配置sudo

 

3) 配置文件的基本解释

通过visudo直接编辑,配置后可自动检查语法功能;

1)授权(授权组可用%开头)
Wang         ALL=(ALL)             ALL
用户     机器=(授权哪个角色的权限)  授权的命令
%用户组  机器=(授权哪个角色的权限)   授权的命令
 
别名的意义

用户或组

主机(机器)

授权角色权限

命令

Root

ALL

(ALL)

ALL

User_Alias  Uers=wang, %mikem

Host_Alias  

Hostname=lc1,lc2

Runas_Alias

OP=root

Cmnd_Alias

CMd=/sbin..

4) 普通用户可通过sudo –l命令查看本身具有sudo的哪些权限

 

提示:

用户通过sudo提权时有时要输入的密码,有时不输入,其原因可在配置文件里配置密码超时时间;当通过sudo命令提权时,会先检查/var/db/sudo/目录下是否有相应用户的密码时间戳,如果没超时就直接通过,否则输入自己的密码才能执行。

5)Sudo配置注意事项

a)          命令别名下的成员必须是文件或目录的绝对路径
b)          别名名称是包含大写字母,数字,下划线,如果是字母都要大写
c)          一个别名下有多个成员,成员与成员之间,通过半角“,”号分隔;成员必须是有效实际存在的。
d)          别名成员受别名类型Host_Alias,User_Alias,Runas_Alias,Cmnd_Alias制约,定义什么类型的别名,就要有什么类型的成员相配。
e)          别名规则是每行算一个规则,如果一个别名规则一行容不下时,可以通过“\”来续行;
f)          指定切换的用户要用()括号括起来,如果省略括号,则默认为root用户;如果括号里是ALL,则代表能切换到所有用户
g)          如果不需要密码直接运行命令的,应该加NOPASSWD:参数。
h)          禁止某类程序或命令执行,要在命令动作前面加上“!”号,并且放在允许执行命令的后面。
i)          用户组前面必须加%号。

4、linux系统登录用户的超时时间

echo "expert  TMOUT=10"    >>/etc/profile    超时时间
echo "export HISTSIZE=5"  >>/etc/profile     历史命令数量
history –c 清空历史记录
history –d 4 清空指定的记录

5、系统字符集调整支持显示中文

 

 建议更改字符集 (建议)

 

注:Source表示重新加载配置文件使其生效

6  服务器时间同步及更改

1)    通过date –s命令更改时间并通过hwclock命令将更改的时间更新的bash里

date -s "2014/10/15"hwclock
date +%F\ %T

2)    通过ntpdate更新服务器时间

# ntpdate time.nist.gov

3)    Ntp-sever服务器搭建

安装ntp-server(系统默认安装),也可通过yum安装。

rpm -qa ntp

编辑ntpd.conf配置文件

restrict 0.0.0.0 mask 0.0.0.0  nomodify notrap noquery  #拒绝所有
restrict 192.168.166.0 mask 255.255.255.0 nomodify      #只允许该网段更新时间
restrict 127.0.0.1                                      #本可有所有操作
server 210.72.145.44 prefer                             #perfer参数是优先到远端Ntpserver更新时间
server  127.127.1.0   fudge                             #如果远端服务器不能同步时间,则由本地时间提供给客户端
127.127.1.0 stratum 8
driftfile /var/lib/ntp/drift
keys /etc/ntp/keys

1)说明:关于权限设定部分 
权限的设定主要以 restrict 这个参数来设定,主要的语法为 
restrict IP地址 mask 子网掩码 参数
注:其中 IP 可以是IP地址,也可以是 defaultdefault 就是指所有的IP。

2)参数有以下几个:
ignore :关闭所有的 NTP 联机服务 
nomodify:客户端不能更改服务端的时间参数,但是客户端可以通过服务端进行网络校时。
notrust :客户端除非通过认证,否则该客户端来源将被视为不信任子网 
noquery :不提供客户端的时间查询 
注意:如果参数没有设定,那就表示该 IP (或子网)没有任何限制!     

4)    通过cron任务计划定时更新服务器时间

echo “#time update by server” >>/var/spool/cron/root
echo “*/5 * * * * /usr/sbin/ntpdate time.nist.gov” >>/var/spool/cron/root

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

 通过编辑ulimit配置文件使文件描述符增加永久生效

#vim /etc/syscurity/limits.conf
#ulimit -n
#ulimit –a           查看所有限制,以及设定参数
# man limits.conf

 

 

注:调整的数字不是越大越好,一句话够用就行,logout  (或Ctrl+D)    退出登录(Ctrl+D   = logout)生效

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

net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_intvl =15
net.ipv4.tcp_retries2 = 5
net.ipv4.tcp_fin_timeout = 2
net.ipv4.tcp_max_tw_buckets = 36000
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_max_orphans = 32768
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_wmem = 8192 131072 16777216
net.ipv4.tcp_rmem = 32768 131072 16777216
net.ipv4.tcp_mem = 786432 1048576 1572864
net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.ip_conntrack_max = 65536
net.ipv4.netfilter.ip_conntrack_max=65536
net.ipv4.netfilter.ip_conntrack_tcp_timeout_established=180
net.core.somaxconn = 16384
net.core.netdev_max_backlog = 16384

# sysctl –p                           ;通过命令使其生效

#vim /etc/sysctl.conf               ; 进入文件后在最后行中添加

9 、锁定关键系统文件

通过chattr +i 进行加锁

# chattr  +i  /etc/passwd  /etc/shadow  /etc/group  /etc/gshadow  /etc/inittab

10、 lvs/haproxy负载均衡代理内核参数配置

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.ipv4.ip_conntrack_max = 25000000
net.ipv4.netfilter.ip_conntrack_max=25000000

11、 nginx/apache生产内核参数优化案例

net.ipv4.tcp_max_syn_backlog = 65536
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 = 1
net.ipv4.tcp_syn_retries = 1

net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_mem = 94500000 915

12、CDN公司cache服务器内核/etc/sysctl.conf优化案例

net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.tcp_max_tw_buckets = 1800000
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_retries1 = 22
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_fin_timeout = 10
net.ipv4.tcp_synack_retries = 3

13、  删除登录信息

(不显示内核版本,主机名,发行版本号及一些后台进程的版本号),防止探测。
cat /dev/null >/etc/issue       本地登录显示linux的版本号
cat /dev/null >/etc/issue.net    网络登录显示linux的版本号
cat /dev/null >/etc/motd        登录描述
#包括应用层 比如隐藏apache ,php等的版本。

14、设置/etc/hosts.deny、/etc/hosts.allow

可以控制外部IP对本机服务的访问
etc/hosts.allow 的设定优先于 /etc/hosts.deny

清除多余的系统虚拟账号(非必须)
1.关闭/etc/passwd中不必要的用户(可选优化项)
2.关闭/etc/group中不必要的用户组(可选优化项)

15、 Linux基础优化小结:

1)不用root,添加普通用户,通过sudo授权管理
2)更改默认的远程连接SSH服务端口及禁止root用户远程连接
3)定时自动更新服务器时间
4)配置yum更新源,从国内更新源下载安装rpm包
5)关闭selinux及iptables(暂时关闭,后面学到要开启并优化)
6)调整文件描述符数量,进程及文件的打开都会消耗文件描述符
7)定时自动清理/var/spool/clientmquene/目录垃圾文件,防止inodes节点被占满。
8)精简开机自启动服务
9)Linux内核参数优化
10)更改字符集,支持中文,但建议还是用英文字符集,防止乱码问题。
11)锁定关键系统文件
12)清空/etc/issue ,去除或更改系统及内核版本登陆前的屏幕显示

16、linux内核崩溃修复

1)重新安装系统,选择硬盘,不分区
2)选择旧分区的/boot,/分区,swap,并重新挂载和格式化
3)安装好系统后,重新挂载data分区

这样不会丢数据。

 17、centos7优化

1、关闭selinux
sed -i 's#SELINUX=.*#SELINUX=disabled#g' /etc/selinux/config
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
grep SELINUX=disabled /etc/selinux/config
setenforce 0
getenforce

2、关闭firewalld防火墙服务
systemctl stop firewalld
systemctl disable firewalld

3、设置普通用户提权操作(可选优化)
useradd test
echo 123456|passwd --stdin test
cp /etc/sudoers{,.ori}
echo "test  ALL=(ALL) NOPASSWD: ALL " >> /etc/sudoers
tail -1 /etc/sudoers
visudo -c

4.设置系统中文UTF8字符集
cat /etc/locale.conf
LANG="en_US.UTF-8"

cp /etc/locale.conf{,.ori}
echo 'LANG="zh_CN.UTF-8"' > /etc/locale.conf 
source /etc/locale.conf
echo$LANG

localectlset-locale LANG="zh_CN.UTF-8"
cat/etc/locale.conf

5、时间同步设置
/usr/sbin/ntpdate  ntp.aliyun.com

echo '#time sync ' >> /var/spool/cron/root
echo "*/5 * * * * /usr/sbin/ntpdate ntp.aliyun.com >/dev/null2>&1" >> /var/spool/cron/root
crontab -l

6、提升命令行操作安全性(可选优化)
echo 'export TMOUT=300' >> /etc/profile
echo 'export HISTSIZE=5' >> /etc/profile
echo 'export HISTFILESIZE=5' >> /etc/profile
tail  /etc/profile
. /etc/profile

7、加大文件描述符
echo'*    -    nofile    65535 ' >>/etc/security/limits.conf
tail -1 /etc/security/limits.conf

ulimit -SHn   65535
ulimit -8、优化系统内核
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

9、iptables防火墙的优化
net.nf_conntrack_max = 25000000
net.netfilter.nf_conntrack_max =25000000
net.netfilter.nf_conntrack_tcp_timeout_established= 180
net.netfilter.nf_conntrack_tcp_timeout_time_wait= 120
net.netfilter.nf_conntrack_tcp_timeout_close_wait= 60
net.netfilter.nf_conntrack_tcp_timeout_fin_wait= 120
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.wmem_max = 16777216
net.core.rmem_max = 16777216

10、安装系统常用软件
CentOS6和CentOS7
yum install tree nmap dos2unix lrzsz nc lsof wget tcpdump htop iftop iotop sysstat nethogs -y

CentOS7
yum install psmisc net-tools bash-completion vim-enhanced -y


11、优化SSH远程连接效率
cp /etc/ssh/sshd_config{,.ori}
sed -rn '/#Port/s/#(.*)22/\112345/p' /etc/ssh/sshd_config.
sed -rn '/ListenAddress/s/#(.* )0.*/\1192.168.1.2/p' /etc/ssh/sshd_config
sed -rn '/#PermitRootLogin/s/#(.*)yes/\1no/p'      /etc/ssh/sshd_config
sed -n '/PermitEmptyPasswords/s/^#//p'  /etc/ssh/sshd_config
sed -rn '/#UseDNS/s/#(.*)yes/\1no/p'      /etc/ssh/sshd_config
sed -n '/GSSAPIAuthentication/s#yes#no#p' /etc/ssh/sshd_config

12、保留yum安装的软件包(可选优化)
sed -n '/keepcache/s#0#1#p' /etc/yum.conf 

13、 锁定关键系统文件
/etc/passwd、/etc/shadow、/etc/group、/etc/gshadow、/etc/inittab
chattr +i /etc/passwd /etc/shadow /etc/group
chattr +i /etc/inittab /etc/fstab /etc/sudoers
lsattr /etc/passwd /etc/shadow /etc/group /etc/inittab /etc/fstab /etc/sudoers
mv /usr/bin/chattr /opt/root
cp /usr/bin/xargs /usr/bin/chattr

14、去除登录前的系统及内核版本显示。
> /etc/issue.net
> /etc/issue

15、清除多余的系统虚拟用户账号。
userdel -r adm
userdel -r lp
userdel -r games
userdel -r ftp
groupdel adm
groupdel lp
groupdel games
groupdel video
groupdel ftp

16、grub引导菜单加密码
grub2-setpassword
cat /boot/grub2/user.cfg

17、禁止主机被ping
echo "net.ipv4.icmp_echo_ignore_all=1" >>  /etc/sysctl.conf
sysctl -p

18、打补丁
yum update

19、精简开机自启动服务
systemctl list-unit-files | grep enable | egrep -v "sshd.service|crond.service|sysstat|rsyslog|^NetworkManager.service|irqbalance.service" | awk '{print "systemctl disable",$1}' | bash 
systemctl list-unit-files | grep enable

#保留服务:
sshd|crond|sysstat|rsyslog|NetworkManager|irqbalance

20、企业生产最小化原则:
1)安装软件包最小化。
2)用户权限最小化。
3)目录文件权限最小化。
4)自启动服务最小化。
5)服务运行用户最小化。

 

 

 

posted on 2018-08-06 16:12  五光十色  阅读(275)  评论(0编辑  收藏  举报

导航