一、关闭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系统之后必须自动开启的服务:
sshd 远程连接Linux服务器,,需要这个服务程序,必须开启,否则无法远程连接Linux服务器(必须开启)
rsyslog 是操作系统的一种机制,守护程序通常使用这些机制将各种信息写到各个系统日志文件(必须开启)
network 激活/关闭启动时的各个网口(必须)应考虑开启
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/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