1.安装Linux系统后调优及安全设置
1. 1 关闭SELinux功能
SELinux功能(类似防火墙)大多数生产环境的做法是关闭,安全问题通过其它手段来解决。
查看selinux的配置文件:cat /etc/selinux/config
# 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=enforcing # SELINUXTYPE= can take one of these two values: # targeted - Targeted processes are protected, # mls - Multi Level Security protection. SELINUXTYPE=targeted
SELINUX有三种状态:
- enforcing(强制执行)
- permissive(许可的)
- disabled(关闭)。
目前默认系统是enforcing(强制执行)状态,我们需要将其改为disabled。
关闭方式:
1. 修改配置文件,使关闭SELinux永久生效
[root@oldboy ~]# sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
修改配置文件可使配置永久生效,但必须要重启系统。
上面是通过sed的替换命令快速修改,也可通过vi或vim编辑器修改。
2.临时关闭SELinux,可在命令行执行如下命令:
由于修改配置SElinux后,想要其生效,必须要重启系统。
因此,可配合使用setenforce 0这个临时使其关闭的命令,这样在重启前后都可以使SELinux关闭生效,也就是说无须立刻重启服务器了,在生产场景下Linux机器是不能随意重启的。
[root@oldboy ~]# getenforce Enforcing [root@oldboy ~]# setenforce usage: setenforce [ Enforcing | Permissive | 1 | 0 ] [root@oldboy ~]# setenforce 0 # 临时将SELinux调成Permissive状态 [root@oldboy ~]# getenforce Permissive
- getenforce 查看SELinux的当前的级别状态
- setenforce 用于命令行管理SELinux的级别,后面的数字表示设置对应的级别
- 参数1对应Enforcing,表示SELinux为开启状态
- 参数0对应Permissive,给出警告提示,但不会阻止操作,相当于disable
1.2 设定运行级别
设定运行级别(runlevel)为3,即:表示使用文本命令行模式管理Linux。
cat /etc/inittab # 查看运行级别
[root@oldboy ~]# cat /etc/inittab # inittab is only used by upstart for the default runlevel. # # ADDING OTHER CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM. # # System initialization is started by /etc/init/rcS.conf # # Individual runlevels are started by /etc/init/rc.conf # # Ctrl-Alt-Delete is handled by /etc/init/control-alt-delete.conf # # Terminal gettys are handled by /etc/init/tty.conf and /etc/init/serial.conf, # with configuration in /etc/sysconfig/init. # # For information on how to write upstart event handlers, or how # upstart works, see init(5), init(8), and initctl(8). # # Default runlevel. The runlevels used are: # 0 - halt (Do NOT set initdefault to this) # 1 - Single user mode # 2 - Multiuser, without NFS (The same as 3, if you do not have networking) # 3 - Full multiuser mode # 4 - unused # 5 - X11 # 6 - reboot (Do NOT set initdefault to this) # id:3:initdefault:
这里3就是Linux默认的运行级别,如果有需求可以将其修改为其它级别。工作中常用3级别,即文本模式。
- runlevel 查看当前系统运行级别
- init 切换运行级别
- init 0 关机
- init 6 重启
- init 3 正常文本命令行模式,多用户
- init 1 系统出现问题时的单用户模式
- init 5 切换到桌面模式
1.3 精简开机系统自启动
企业环境新装Linux系统之后有必要保留的开机自启动服务有5个:
- sshd:远程连接Linux服务器时需要用到这个服务程序,所以必须要开启,否则Linux服务器就无法提供远程连接服务了。
- rsyslog:日志相关软件,这是操作系统提供的一种机制,系统的守护程序通常会使用rsyslog程序将各种信息写到各个系统日志文件中,在CentOS 6以前此服务的名称为syslog。
- network:系统启动时,若想激活/关闭各个网络接口,则必须考虑开启此服务。
- crond:该服务用于周期性地执行系统及用户配置的任务计划。有要周期性执行的任务时,就要开启,此服务几乎是声场场景必须要用的一个软件。
- sysstat:sysstat是一个软件包,包含监测系统性能及效率的一组工具,这些工具对于我们收集系统性能数据很有帮助,比如CPU使用率、硬盘和网络吞吐数据等,对这些数据的收集和分析,有利于判断系统运行是否正常,所以它是提高系统运行效率、安全运行服务器的得力助手。
- iostat 工具提供CPU使用率以及硬盘吞吐效率的数据
- mpstat 工具提供与单个或多个处理器相关的数据
- sar 工具负责收集、报告并存储系统活跃的信息
上述5个服务是安装完系统后建议保留的开机自启动服务,也几乎是一切生产服务器必须保留的开机自启动服务。
将来还可以根据服务器的业务使用场景调整相应的自启动服务。
设置开机自启动的常见方法:
1. 执行命令,然后手动选择处理的方法
- 方法1:执行ntsysv命令,然后在弹出的窗口中进行设置。 - 方法2:执行setup命令,system service,然后在弹出的窗口中进行设置。
方法1:执行 ntsysv 命令,然后在弹出的窗口中进行设置。
把* 去掉,就是取消了。
方法2:执行setup命令,system service,然后在弹出的窗口中进行设置。
按tab键将光标移动到Quit。
2. 通过一行命令或Shell脚本进行设置
在快速设置前,先来查看默认情况下Linux系统开启的服务有哪些。
由于我们工作在文本模式3级别,因此只需要查找3级别上开启的服务即可。
查看命令如下:
chkconfig --list |grep 3:on
[root@oldboy ~]# 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-availability 0:off 1:on 2:on 3:on 4:on 5:on 6:off chktestd 0:off 1:off 2:on 3:on 4:on 5:on 6:on 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 iptables 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 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
可以看到,默认情况下,开启了很多服务,我们需要保留开启的所有服务也包含其中。
这里只需要关注3级别上的设置是否为on即可(on为开启状态)。
了解了系统在3级别上开启的服务后,就可以通过命令快速实现配置了。
下面是几种通过命令或脚本设置开机自启动的方法。
第一种快速处理方法:先全关闭,再开启需要保留的。
操作思路:
先将3级别文本模式下默认开启的服务都关闭,然后开启需要开启的服务。
[root@oldboy ~]# chkconfig --list|grep 3:on|awk '{print "chkconfig",$1,"off"}'|bash [root@oldboy ~]# chkconfig --list|grep -E 'sshd|rsyslog|network|crond|sysstat'|awk '{print "chkconfig",$1,"on"}'|bash
第二种快速处理方法:Shell循环实现
操作思路:默认情况下开机需要保留的服务已经是开启状态了,因此,只需把3级别文本模式下的已开启但又不需要的服务都关掉就好了。
[root@oldboy ~]# for ser in `chkconfig --list|grep 3:on|grep -vE "sshd|sysstat|crond|network|rsyslog"|awk '{print $1}'`;do chkconfig $ser off;done
第三种快速处理方法:不要Shell循环语句也一条命令搞定
操作思路:
默认情况下开机需要保留的服务都已经是开启状态了,因此,只需把3级别文本模式下已经开启但又不需要开启的服务都关掉就好了,这里将不用循环结构而是利用命令拼出所有要处理的命令字符串,然后通过bash将其当做命令执行。
[root@oldboy ~]# chkconfig --list|grep '3:on'|egrep -v 'crond|sshd|network|rsyslog|sysstat' |awk '{print "chkconfig",$1,"off"}'|bash
将指定的要自启动的服务批量启动:
chkconfig --list|egrep 'crond|sshd|network|rsyslog|sysstat'|awk '{print "chkconfig",$1,"on"}'|bash
1.4 关闭iptables防火墙
关闭防火墙的目的是让初学者学习更方便,将来学了iptables技术后可再统一开启。
在企业环境中,一般只有配置外网IP的Linux服务器才需要开启防火墙,但即使有外网IP,高并发,高流量的业务服务器仍然不能开启防火墙,因为开启后会有较大性能损失,导致网站访问速度很慢,这种情况下只能在前端加更好的硬件防火墙了。
临时关闭防火墙:
/etc/init.d/iptables stop
[root@oldboy ~]# /etc/init.d/iptables stop iptables: Setting chains to policy ACCEPT: filter [ OK ] iptables: Flushing firewall rules: [ OK ] iptables: Unloading modules: [ OK ] [root@oldboy ~]# /etc/init.d/iptables status iptables: Firewall is not running
永久关闭防火墙:
chkconfig iptables off 开关开机自启动命令
1.5 Linux系统安全最小原则
- 安装Linux系统最小化,即选包最小化,yum安装软件包也要最小化,无用的包不装。
- 开机自启动服务最小化,即无用的服务不开启
- 操作命令最小化。 如:能用rm -f test.txt 就不用rm -f test.txt
- 登录linux用户最小化。没有特殊需求就不登录root,就普通用户登录即可
- 普通用户授权权限最小化,即只给用户必须的管理系统的命令
- Linux系统文件及目录的权限设置最小化,禁止随意创建、更改、删除文件
1.6 更改SSH服务器端远程登录的设置
pdf 89
1.7 利用sudo控制用户对系统命令的使用权限
1.8 Linux中文显示问题
调整Linux系统的字符集设置。
查看linux字符集配置文件i18n:
[root@oldboy ~]# cat /etc/sysconfig/i18n LANG="en_US.UTF-8" SYSFONT="latarcyrheb-sun16"
用sed替换掉LANG的字符集,将en_US.UTF-8改为zh_CN.UTF-8。
sed -i 's#en_US#zh_CN#g' /etc/sysconfig/i18n
用echo $LANG,发现虽然文件修改修改成功,还是LANG还是原来的,需要source启动生效。
source启动生效:
[root@oldboy ~]# . /etc/sysconfig/i18n [root@oldboy ~]# echo $LANG zh_CN.UTF-8
注意:
- zh_CN.UTF-8大小写字母
- 这个中文显示配置要与SSH客户端的配置一致
- 调整SSH客户端CRT的字符集,使其与Linux服务器端一致
1.9 设置Linux服务器时间同步
1.10 历史记录数和登录超时环境变量设置
设置闲置账号超时时间,临时生效:
export HISTSIZE=5
设定用户的命令行历史记录文件(~/.bash_history)记录指定命令数量的示例命令如下。
注意,此处的配置仅临时生效:
[root@oldboy ~]# export HISTFILESIZE=3 [root@oldboy ~]# cat ~/.bash_history # 命令行文件的对应记录数,一般10-20个为佳 ls cat /etc/sysconfig/i18n . /etc/sysconfig/il8n
将下面命令放入配置文件,可使其永久生效:
echo "export TIMEOUT=300" >>/etc/profile echo "export HISTSIZE=5" >>/etc/profile echo "export HISTFILESIZE=5" >>/etc/profile tail -3 /etc/profile source /etc/profile # 使得配置文件生效
在上述命令中,涉及的系统控制变量说明:
- TIMEOUT=300 连接的超时时间控制变量
- HISTSIZE=5 命令行的历史记录数量变量
- HISTFILESIZE=5 历史记录文件的命令数量变量(~/.bash_history)
实际工作中类似的变量还有不少,大家可以根据企业工作需求选择使用,最好执行前加上export命令。
更多的Linux系统的环境变量,大家可以执行man bash查询。
1.11 清除Linux登录时的系统信息介绍
清除Linux系统登录时的系统信息介绍:
[root@oldboy ~]# cat /etc/issue CentOS release 6.7 (Final) Kernel \r on an \m [root@oldboy ~]# >/etc/issue # 清除/etc/issue里面的系统信息说明 [root@oldboy ~]# cat /etc/issue
由于不同的版本的Linux的有漏洞,信息越明确,越容易被攻击。
1.11 调整Linux系统文件描述符数量