一、关闭selinux功能


1、SELinux(Security-Enhanced Linux) 是美国国家安全局(NSA)对于强制访问控制的实现,是 Linux历史上最杰出的新安全子系统。


** SELinux有三种状态: **


enforcing - SELinux security policy is enforced.


permissive - SELinux prints warnings instead of enforcing.


disabled - No SELinux policy is loaded.


配置文件位置:/etc/selinux/config和/etc/sysconfig/selinux,只不过/etc/sysconfig/selinux是连接到/etc/selinux/config的


[root@zhang-1 ~]# ls -l /etc/sysconfig/selinux

lrwxrwxrwx. 1 root root 17 Nov 17 16:28 /etc/sysconfig/selinux ../selinux/config


用sed命令修改配置文件,使其永久关闭


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


注:修改完毕之后必须重启才可生效


查看状态


[root@zhang ~]# getenforce 

Disabled


使用命令暂时关闭selinux


[root@zhang ~]# setenforce 

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

[root@zhang ~]# setenforce 0

[root@zhang ~]# getenforce

Permissive


二. 精简系统开机启动项

和Windows系统一样,在Linux服务器运行的过程中,也会有很多无用的软件服务默认就在运行,这些服务占用了很多系统资源,而且也带来了安全隐患,因此要关闭掉。

建议企业环境新装Linux系统之后必须自动开启的服务:

  1. sshd 远程连接Linux服务器,,需要这个服务程序,必须开启,否则无法远程连接Linux服务器(必须开启)

  2. rsyslog 是操作系统的一种机制,守护程序通常使用这些机制将各种信息写到各个系统日志文件(必须开启)

  3. network 激活/关闭启动时的各个网口(必须)应考虑开启

  4. crond 周期的运行用户调度的任务,配置更简单,有周期执行任务时,要开启

将来根据服务器的业务使用场景可以进行调整,所以调整就是增加,上面的四个服务中只能增加不能减少,关闭系统所有开机自启动服务的方法:

方法1:

[root@zhang ~]# chkconfig --list|grep "3:on"|awk '{print $1}'|sed 's#^#chkconfig #g'|sed 's#$# off#g'|bash

方法2:

[root@zhang ~]# chkconfig --list|grep 3:on|awk '{print $1}'|sed -r 's#(.*)#chkconfig \1 off#g'|bash

方法3:

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

方法4:

[root@zhang ~]# for name in `chkconfig --list|grep 3:on|grep -vE "crond|sshd|network|rsyslog" |awk '{print $1}'`; \
do chkconfig $name off; \
done

方法5:

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

启动需要的服务

[root@zhang ~]# for n in crond network rsyslog sshd ;do chkconfig --level 3 $n on;done

检查开机自启动的服务器

[root@zhang ~]# chkconfig --list|grep 3:on
crond 0:off 1:off 2:off 3:on 4:off 5:off 6:off
network 0:off 1:off 2:off 3:on 4:off 5:off 6:off
rsyslog 0:off 1:off 2:off 3:on 4:off 5:off 6:off
sshd 0:off 1:off 2:off 3:on 4:off 5:off 6:off

三. 关闭iptables防火墙

[root@zhang ~]# /etc/init.d/iptables stop
iptables: Setting chains to policy ACCEPT: filter [ OK ]
iptables: Flushing firewall rules: [ OK ]
iptables: Unloading modules: [ OK ]

或者

[root@zhang ~]# service iptables stop

关闭开机自启动

[root@zhang ~]# chkconfig iptables off

检查

[root@zhang ~]# /etc/init.d/iptables status
 iptables: Firewall is not running.[root@zhang ~]# chkconfig --list iptables
 iptables 0:off 1:off 2:off 3:off 4:off 5:off 6:off

四. Linux最小化原则

最小化原则:既多一事不如少一事,具体为:

1) 安装Linux系统最小化,既选包最小化,yum安装软件最小化;

2) 开机自启动程序服务最小化,既无用的服务不启动(少开一扇窗)

3) 操作命令最小化原则,rm –f test.txt,不用rm –rf test

4) 登陆Linux最小化,禁止root从远程终端登录,平时没有需求不用root,用普通用户登录。

5) 文件及目录的权限设置最小化。

6) 各种网络服务,系统配置参数合理,不要最大化。

五. 更改ssh服务端远程登录的配置

SSHD的配置文件在/etc/ssh/目录下

ssh_config:客户端

sshd_config:服务端

[root@zhang ]# vim sshd_config

修改的内容

Port 2222               #更改SSH远程连接的端口
PermitRootLogin no       #设置是否允许root通过ssh登录,这个选项从安全角度来讲应设成"no"。
PermitEmptyPasswords no  #设置是否允许用口令为空的帐号登录。
UseDNS no                #关闭UseDNS加速SSH登录
GSSAPIAuthentication no  #是否允许使用基于GSSAPI的用户认证.默认值为"no".仅用于SSH-2.
[root@zhang ssh]# /etc/init.d/sshd restart
Stopping sshd: [ OK ]
Starting sshd: [ OK ]

当前连接不重启不会中断,占用的连接没断开不会断开

六. 通过sudo管理权限

让一个用户可以拥有原本他没有执行这个命令的权限,这个命令的权限可能是其他用户的,它可以用其他用户执行,用sudo执行的权限都是需要当前执行sudo用户的密码。

sudo 是一种程序,用于提升用户的权限,在linux中输入sodu就是调用这个程序提升权限,是一个命令解析器,sudo cd是错误的,因为cd是内置的,不是系统里面的,sudo可以运行系统带的命令,但无法用系统中一个软件中的命令

创建一个普通用户

[root@zhang ~]# useradd zhang

非交互式设置密码

[root@zhang ~]# echo "123456"|passwd --stdin zhang
Changing password for user zhang.
passwd: all authentication tokens updated successfully.#把echo的输出通过—stdin参数传输为zhang这个用户的密码
[root@zhang ~]# su - zhang
[zhang@zhang~]$ whoami
zhang

注:

1)超级管理员用户切换到普通用户不需要密码,普通用户切换普通用户需要密码,普通用户切换超级管理员用户也需要密码

2)普通用户的权限比较小,只能做基本的信息查看,无法更改

3)#超级管理员 $普通用户

[root@zhang ~]# visudo
#在99行下面添加以下内容
zhang ALL=(ALL) ALL
#如果是命令使用下面的方式:AnSheng ALL=(ALL) /bin/touch(多个权限用“,”分开,ALL所有权限,NOPASSWD: ALL免密码)

七.时间同步

CentOS系统时间同步的步骤如下:

新装的CentOS系统服务器可能设置了错误的,需要调整时区并调整时间.

如下是CentOS系统使用NTP来从一个时间服务器同步

注:需要有外网

yum  install  -y  ntpdate  

cp /usr/share/zoneinfo/Asia/Shanghai  /etc/localtime

ntpdate us.pool.ntp.org  


下面解析一下,第一句是把当前时区调整为上海就是+8区,想改其他时区也可以去看看/usr/share/zoneinfo目录;

然后第二句是利用ntpdate同步标准时间.

加入定时计划任务,每隔10分钟同步一下时钟
crontab -e
0-59/10 * * * * /usr/sbin/ntpdate us.pool.ntp.org | logger -t NTP

这样,我们就可以来解决在CentOS系统中时间不准确的问题了。

八. 隐藏Linux版本信息显示

>/etc/issue  或 cat /dev/null >etc/issue1
[root@zhang ~]# cat /etc/issueCentOS release 6.5 (Final)
Kernel \r on an \m
[root@zhang ~]# >/etc/issue #清空/etc/issue
[root@zhang ~]# cat /etc/issue
[root@zhang ~]#

也可以编辑/etc/motd文件,来隐藏真正的版本信息。

/etc/motd即messageoftoday(布告栏信息)。 
每次用户登录时,/etc/motd文件的内容会显示在用户的终端。系统管理员可以在文件中编辑系统活动消息。

[root@zhang ~]# vi /etc/motd

RHEL release 6.5 (Final)   (随便写,写什么显示什么) welcome back.

                                                                                                                                                "/etc/motd" 2L, 39C written 保存重启即可


九. 内核调优

1、Limit

永久地,通过将一个相应的 ulimit 语句添加到由登录 shell 读取的文件中, 即特定于 shell 的用户资源文件,如:

1)、解除 Linux 系统的最大进程数和最大文件打开数限制:

        vi /etc/security/limits.conf

        # 添加如下的行

        * soft noproc 11000

        * hard noproc 11000

        * soft nofile 4100

        * hard nofile 4100

       说明:* 代表针对所有用户,noproc 是代表最大进程数,nofile 是代表最大文件打开数

2)、让 SSH 接受 Login 程式的登入,方便在 ssh 客户端查看 ulimit -a 资源限制:

        a、vi /etc/ssh/sshd_config

             把 UserLogin 的值改为 yes,并把 # 注释去掉

        b、重启 sshd 服务:

              /etc/init.d/sshd restart

3)、修改所有 linux 用户的环境变量文件:

    vi /etc/profile

    ulimit -u 10000

    ulimit -n 4096

    ulimit -d unlimited

    ulimit -m unlimited

    ulimit -s unlimited

    ulimit -t unlimited

    ulimit -v unlimited

 保存后运行#source /etc/profile 使其生效

/**************************************

有时候在程序里面需要打开多个文件,进行分析,系统一般默认数量是1024,(用ulimit -a可以看到)对于正常使用是够了,但是对于程序来讲,就太少了。

修改2个文件。

 

1)/etc/security/limits.conf

vi /etc/security/limits.conf

加上:

* soft nofile 8192

* hard nofile 20480

 

2)/etc/pam.d/login

session required /lib/security/pam_limits.so

/**********

另外确保/etc/pam.d/system-auth文件有下面内容

session required /lib/security/$ISA/pam_limits.so

这一行确保系统会执行这个限制。

 

/***********

3)一般用户的.bash_profile

#ulimit -n 1024

重新登陆ok

Ps:修改limits.conf 文件后,需要重启系统生效


2、sysctl.conf

#该参数设置系统的TIME_WAIT的数量,如果超过默认值则会被立即清除

net.ipv4.tcp_max_tw_buckets = 20000

#定义了系统中每一个端口最大的监听队列的长度,这是个全局的参数

net.core.somaxconn = 65535

#对于还未获得对方确认的连接请求,可保存在队列中的最大数目

net.ipv4.tcp_max_syn_backlog = 262144

#在每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目

net.core.netdev_max_backlog = 30000

#能够更快地回收TIME-WAIT套接字。此选项会导致处于NAT网络的客户端超时,建议为0

net.ipv4.tcp_tw_recycle = 0

#系统所有进程一共可以打开的文件数量

fs.file-max = 6815744

#防火墙跟踪表的大小。注意:如果防火墙没开则会提示error: "net.netfilter.nf_conntrack_max" is an unknown key,忽略即可


修改此参数增加socket缓存区的内存大小

net.ipv4.tcp_mem  =   379008       505344  758016

net.ipv4.tcp_wmem = 4096        16384   4194304

net.ipv4.tcp_rmem = 4096          87380   4194304

net.core.wmem_default = 8388608

net.core.rmem_default = 8388608

net.core.rmem_max = 16777216

net.core.wmem_max = 16777216

net.ipv4.tcp_tw_reuse


是否socket reuse,此函数的作用是Server重启时可以快速重新使用监听的端口。如果没有设置此参数,会导致server重启时发生端口未及时释放而启动失败 net.ipv4.tcp_tw_recycle


使用socket快速回收,短连接Server需要开启此参数。此参数表示开启TCP连接中TIME-WAIT sockets的快速回收,Linux系统中默认为0,表示关闭。打开此参数可能会造成NAT用户连接不稳定,请谨慎测试后再开启。 其他重要配置


net.ipv4.tcp_syncookies=1                     

# 表示开启SYN Cookies 。当出现SYN等待队列溢出时,启用coolies来处理,可防范少量SYN×××,默认为0表示关闭;

net.ipv4.tcp_max_syn_backlog=81920

表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数。

net.ipv4.tcp_synack_retries=3

#  tcp_synack_retries 显示或设定 Linux 核心在回应 SYN 要求时会尝试多少次重新发送初始 SYN,ACK 封包后才决定放弃。这是所谓的三段交握 (threeway handshake) 的第二个步骤。即是说系统会尝试多少次去建立由远端启始的 TCP 连线。tcp_synack_retries 的值必须为正整数,并不能超过 255。因为每一次重新发送封包都会耗费约 30 至 40 秒去等待才决定尝试下一次重新发送或决定放弃。tcp_synack_retries 的缺省值为 5,即每一个连线要在约 180 秒 (3 分钟) 后才确定逾时

net.ipv4.tcp_syn_retries=3

#  对于一个新建连接,内核要发送多少个 SYN 连接请求才决定放弃。不应该大于255,默认值是5,对应于180秒左右时间。(对于大负载而物理通信良好的网络而言,这个值偏高,可修改为2.这个值仅仅是针对对外的连接,对进来的连接,是由tcp_retries1 决定的)

net.ipv4.tcp_fin_timeout = 30

#  表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。

net.ipv4.tcp_keepalive_time = 1200

# 表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时。

net.ipv4.tcp_tw_reuse = 1

#  表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;

net.ipv4.tcp_tw_recycle = 1

# 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。

net.ipv4.ip_local_port_range = 20000 65000

#  表示用于向外连接的端口范围。缺省情况下很小:32768到61000,改为1024到65000。

net.ipv4.tcp_max_tw_buckets = 200000

表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息。默认为180000。设为较小数值此项参数可以控制TIME_WAIT套接字的最大数量,避免服务器被大量的TIME_WAIT套接字拖死。

net.ipv4.route.max_size = 5242880