第1章安装linux系统后调优及安全设置
1.1 关闭SELinux功能
[root@moban /]# sed -i 's/SELLINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
==》修改配置文件可使用高配置永久生效,但必须要重启系统,此步时sed快速修改方法,也可以通过vi编辑修改此文件。
[root@moban /]# grep SELINUX=disabled /etc/selinux/config
SELINUX=disabled 《===检查替换结果为disabled就表示编辑成功了。
回到root ==》vi /etc/selinux/config
1.1.1 selinux是什么?
安全工具,控制太严格了,生产环节不用它,使用跟其他的安全手段。
永久关闭(需要重启系统):
vi /etc/selinux/config
SELINUX=enforcing改为SELINUX=disabled
临时关闭
selenlore 0 命令行关闭SELINUX
getenfore 查看命令行是否关闭SELINUX
永久关闭(重启系统):
vi /etc/selinux/config
SELINUX=enforcing改为SELINUX=disabled
sed i 's#>SELINUX=enforcing#SELINUX=disabled#g'
/etc/selinux/config
临时关闭:
setenfore 0 命令行关闭SELINUX
getenfore 查看命令行是否关闭SELINUX
1.1.2 命令说明:
setenfore:用于命令行管理SELinux的级别,后面的数字表示设置对应的级别。
getenforce:查看SELinux当前的级别状态。
提示:修改配置SELINUX后,要想时期生效,必须要重启系统。因此,可配合使用sctenforce 0这个临时相当于使其关闭的命令,这样在重启前后都可以使得SELinux关闭生效了。也就是说无需立刻重启服务器了,在生产场景下Linux机器是不能随意重启的。
1.2 运行级别:
linux运行时的一种状态表示,这个标识用于数字表示7中运行级别。
0 halt,关机状态
1 single user 单用户,找回root密码
2 multiuser without nfs.多用户没有NFS网络文件系统
3 文本模式(Full multiuser mode ) ***** 工作模式
4 unused
5 图形、桌面、X11
6 reboot 重启
1.2.1 如何查看当前系统的运行级别
runlevel
[root@moban /]# runlevel
N(前一次) 3(当前)
1.2.2 更改运行级别
init
例如:init 6 就表示重启
1.3 精简开机系统启动
1.3.1 重要的开机自启动服务
sshd
远程连接Linux服务器是需要用到这个服务程序,所以必须要开启,
否则将无法远程连接Linux服务器。
rsyslog
是操作系统提供的一种机制,系统的守护程序通常会使用rsyslog
将各种信息写到各个日同日志文件中,Centos6以前此服务的名字
为syslog
network
系统启动时,若想激活/关闭各个网络接口,则应(必须)考虑开启。
crond
该服务用于周期性地执行系统用户配置的任务计划。有要周期性
执行的任务时,就要开启,此服务几乎是生产场景必须要用的一
个软件。
sysstat
sysstat是一个软件包,保护检测系统性能及效率的一组工具,
这些工具对于我们手机系统性能数据很有帮助,比如CPU使用率、
硬盘和网络吞吐数据等,这些数据的手机和分析,有利于判断系
统运行是否正常,所以它是提高系统运行效率、安全运行服务器
的得力助手。
Sysstat软件包集成的主要工具为:
iostat工具提供CPU使用率及硬盘吞吐效率的数据;
mpstat工具提供与单个或多个处理器相关的数据;
sar工具负责收集、报告并存储系统活跃的信息。
提示:上述5个服务是安装完系统后建议保留的开机启动服务,也几乎是一切服务器必须开机保留的自启动服务。将来还可以根据服务器的业务使用个场景调整相应的自启动服务,所谓调整,就是增加其他自启动服务。
1.3.2 设置开启自启动服务的常见方法
1)执行命令,然后手动选择处理的方法
方法1:执行ntsysv命令然后在弹出的窗口中进行设置。
方法2:执行setup->system service,然后在弹出的窗口中进行设置
提示:初学者可以选择上述两种方法中的一种来完成配置。
为什么要设置开机自启动?
好处:
1、节省开机时间,加快启动速度。
2、节省资源开销
3、减少安全隐患
如何做?
第一种setup
第二种ntsysv
第三种chkconfig
sed 后向引用
sed -r 's#(.*)(.*)#\1 \2#g'
1.4 关闭iptables防火墙
关闭防火墙的目的是为了让初学者更方便,将来在学了iptables技术后可再统一开启。在企业环境中,一般只有外网IP的服务器才需要开启防火墙,但即使是外网IP,对于高并发流量的业务服务器仍是不能开的,因为会有较大性能损失,导致网站访问很慢,这种情况下只能在前段加更好的硬件防火墙了。
关闭防火墙的具体操作过程如下:
[root@moban /]# /etc/init.d/iptables stop
[root@moban /]# /etc/init.d/iptables stop==service iptables stop
1.5 Linux系统安全最小原则说明
最小化原则对linux系统安全来说极其重要:即多一事不如少一事。
具体包括如下几个方面:
1)安装linux系统最小化,即选包最小化,yum安装软件包也要最小化,无用的包不装。
2)开机自启动服务最小化,即无用的服务不开启
3)操作命令最小化。例如:能用“rm -f tets.txt”就不用“rm -fr test.txt”.
4)登陆Linux用户最小化。平时没有特殊需求不登录root,用普通用户登录即可。
5)普通用户授权权限最小化,即只给用户必须的管理系统的命令,不能啥都可以干。
1.6 更改SSH服务端远程登陆的配置
windows服务器的默认远程管理端口是3389,管理员用户是administrator,普通用户是guest。linux的管理用户是root,普通用户默认有很多个,远程连接默认端口port 22
这些通常搞IT人都知道。那么***是否也知道呢?他们当然知道,甚至比我们更清楚,所以,为了
系统安全要隐藏或更改上述默认的配置才行。
[root@moban /]# cp /etc/ssh/sshd_config /etc/ssh/sshd_config.ori
更改配置前进行备份,是系统管理员的一个良好的习惯。
[root@moban /]# vi /etc/ssh/sshd_config #-》编辑sshd_config
###by moban#2016-03-10##
Prot 52113
PermitrootLogin no
PermitEmptypasswords no
UseDNS no
GSSAPIAuthentication no
### moban#2016-03-10##
执行如下命令重启sshd,是的修改的配置生效:
[root@moban /]# /etc/init.d/sshd reload
重新载入sshd [确定]
或者
/etc/init.d/sshd restart
提示:reload为平滑重启,不影响正在SSH连接的其他用户,因此要好于restart。
1.7 利用sudo控制用户对系统命令的使用权限
为了安全及管理的方便,可将需要root权限的普通用户加入sudo管理,这样用户就可以通过自己的普通账户登录实现利用root的权限来管理系统了,当然也就不需要有root账号及密码了。
执行如下visudo命令,即可打开sudo的配置文件进行编辑。
[root@moban ~]# visudo #相当于直接编辑/etc/sudoers,单用命令方式更安全,推荐
在/etc/sudoers文件的大约第98行下面添加需要提升为root权限的普通用户名及对应权限。
1.7.1 优化注意的几个方面:
安装linux系统最小化,即选包最小化,yum安装软件包也要最小化,无用的包不装。
开机自启动服务最小化,即无用的服务不开启。
操作命令最小化。例如:能用“rm -f test.txt”就不用“rm -fr test.txt”
登录linux用户最小化。平时没有特殊需求不登录root,用普通用户登录即可。
普通用户授权权限最小化,即只给用户必须的管理系统的命令,不能啥都可以干。
linux系统文件及目录的权限设置最小化,禁止随意创建、更改、删除文件
普通用户与皇帝root
普通用户当皇帝的办法有两种:
第一种是 su - root ,执行su - 或su - root相当于农民起义,推翻皇帝,改朝换代了。需要输入root密码才能登陆。
第二种是sudo ,sudo touch /etc/test.txt让普通人做只有皇帝能做的事情,需要皇帝事先授权(sudoers文件)sudo su - root 功高盖主了,也可以改朝换代,最大化授权sudo后果。
sudo设全对于bash的内置命令处理,十个难题,因为内置命令没有实体文件和路径,不过一般都有解决方法例如希望sudo cd 用sudo ls 替代,有的网友使用sudo bash后再使用内置命令,这是很危险的,不推荐。
1.8 linux中文显示设置
此项优化为可选项,即调整linux系统的字符集设置,那么。什么是字符集呢?简单的说,字符集就是一套文字符号及其编码。目前linux下常用的字符集有:
GBK:定长,双字节,不是国际标准,支持的系统不少,实际企业用的不多
UTF-8:费定长,1~4字节,广泛支持,MYSQL也是用UTF-8,企业广泛使用。
可通过快捷的命令方式在/etc/sysconfig/i18n中添加如下内容,使其支持中文显示:
[root@moban ~]# cat /etc/sysconfig/i18n
LANG="en_US.UTF-8"
SYSFONT="latarcyrheb-sun16"
source /etc/sysconfig/i18n启动设置
查看字符集设置的结果。
[root@moban ~]# cat /etc/sysconfig/i18n
LANG="zh_CN.UTF-8"
SYSFONT="latarcyrheb-sun16"
登录linux系统查看中文字符正常显示的步骤如下:
1)将服务器端字符集(/etc/sysconfig/i18n)改为LANG="zh_CN.UTF-8"。
2)将客户端字符集(CRT)调整为UTF-8.
3)命令执行setup命令看到原来中文乱码的窗口不乱了,正确显示中文字符了。
提示:
注意"zh_CN.UTF-8"的大小写字母。
这个中文显示配置要跟你自己的SSH客户端的配置一致。默认情况下就是老男孩演示的配置。
调整SSH客户端CAT的字符集,使其和linux服务端一致(UTF-8)。
1.9 设置linux服务器时间同步
手动同步系统时间
[root@moban ~]# /usr/sbin/ntpdate time.nist.gov
31 Mar 22:35:56 ntpdate[10098]: step time server 24.56.178.140 offset 82739.057723 sec
利用定时任务crond把上述的手动命令没5分钟自动执行一次:
[root@moban ~]# crontab -l
*/5 * * * * /usr/sbin/ntpdate time.nist.gov >dev/null 2>&1
1.10 linux系统变量优化
1.10.1 设置闲置账号超时时间
设置闲置账号超时时间示例命令如下,注意此处的配置仅临时生效。
[root@moban ~]# export TMOUT=10
[root@moban ~]#
timed out waiting for input: auto-logout #10秒提示超时
1.10.2 设置linux的命令行历史记录数
设置linux的命令行历史记录数命令如下,注意此处的配置仅临时生效。
[root@moban ~]# export HISTSIZE=5
[root@moban ~]# history
914 date
915 /usr/sbin/ntpdate time.nist.gov
916 crontab -l
917 export HISTSIZE=5
918 history
1.10.3 设定用户的命令行历史记录文件
设定用户的命令行历史记录文件(~/.bash_history)记录指定命令如下,注意此处的配置仅临时生效。
[root@moban ~]# export HISTFILESIZE=5
[root@moban ~]# cat ~/.bash_history
/usr/sbin/ntpdate time.nist.gov
crontab -l
export HISTSIZE=5
history
export TMOUT=10
[root@moban ~]#
把上述命令放入配置文件,使其可以永久生效。
配置文件:/etc/profile
source /etc/profile #使得配置文件生效
在上述命令中,涉及的系统控制变量说明如下:
export TMOUT=10 :连接的超时时间控制变量
export HISTSIZE=5 :命令行的历史记录数量变量
export HISTFILESIZE=5 :历史记录文件的命令数量变量(~/.bash_history)。
提示:实际工作中类似的变量还有不少,大家可以根据企业需求选择使用,最好执行前加上export命令,更多linux系统的环境变量,大家可以执行manbash查询。
1.11 调整linux系统文件描述符数量
文件描述符是由无符号整数表示的句柄,进程使用它来表示打开的文件。文件描述符与包括相关信息(如文件的打开模式、文件的位置类型、文件的初始类型等)的文件对象相关联,这些信息被称为文件的上下文。文件描述符的有效范围是0到OPEN_MAX.
对于内核而言,所有打开的文件都是通过文件描述符引用的。当打开一个现有文件或创建一个新文件时,内核向进程返回一个文件描述符。当读或写一个文件是,使用open或creat返回的文件描述符标识改文件,并将其作为参数传递给read或write。
[root@moban ~]# ulimit -n
1024 文字描述符数量
对于高并发的业务linux服务器来说,这个默认的设备值是不够的,需要调整。
1.11.1 调整方法1:
执行vim /etc/security/limits.conf命令,在文件结尾加上如下一行。
* - nofile 65535
或者直接执行命令追加到文件尾部/etc/security/limits.conf
配置完成后,需重新登陆才可以生效,用ulimit -n 命令查看。
1.11.2 调整方法2
直接把ulimit-SHn65535命令加入到/etc/rc.local,然后每次开机启动的时候生效。
[root@moban ~]# cat >>/etc/rc.local< 1.12 linux服务器内核参数优化 所谓linux服务器内核参数优化,主要是指在linux系统中针对业务服务应用而进行的系统内核参数调整,优化并无一定的标准,下面生产环境下linux常见的内核优化为例进行讲解,仅供大家参考。 优化方法是,执行vi /etc/sysctl.conf命令道文件结尾,然后拷贝如下内容并保存。 sysctl -p 是的加载的参数生效 网络状态说明及优化命令和优化细节参考资料请看: http://oldboy.blog.51cto.com/2561410/1336488 http://yangrong.blog.51cto.com/6945369/1321594 1.13 定时清理邮件服务临时目录垃圾文件 centos5系列的系统会默认安装sendmail服务,因此邮件临时存放地点的路径为/var/spool/clientmqueue/。 centos6默认情况下没有安装sendmail服务,而是改装了postfix服务,因此邮件临时存放点的路径为/var/spool/postfix/maildrop 以上两个目录很容易被垃圾文件填满导致系统的inode数量不够用,从而导致无法存放文件。 手动清理的方法如下: [root@moban ~]# find /var/spool/clientmqueue/ -type f |xargs rm -f #centos5 [root@moban ~]# find /var/spool/postfix/maildrop/ -type f |xargs rm -f #centos6 定期清理的方法为:将上述命令携程脚本,然后做成定时任务,每天晚上0点执行一次。 [root@moban ~]#echo "find /var/spool/postfix/maildrop/ -type f|xargs rm -f">/server/scripts/del_file.sh [root@moban ~]# crontab -e 00 00 * * * /bin/sh /server/scripts/del_file.sh >dev/null 2>&1 1.14 隐藏linux版本信息显示 在登录到linux主机本地(非CRT连接)前,会显示系统的版本和内核 [root@moban ~]# cat /etc/issue CentOS release 6.7 (Final) Kernel \r on an \m [root@moban ~]# cat /etc/issue.net CentOS release 6.7 (Final) Kernel \r on an \m [root@moban ~]# 执行如下命令清除linux系统版本及内核信息 [root@moban ~]# > /etc/issue [root@moban ~]# > /etc/issue.net 1.15 锁定关键系统文件,防止提权被篡改 要锁定关键系统文件,必须对账号密码文件及启动文件加锁,防止被篡改。上锁命令如下: [root@moban ~]# chattr +i /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/inittab 提示:上锁后,所用该用户都不能对文件修改删除 解锁的命令如下 [root@moban ~]# chattr -i /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/inittab 提示:上锁后,如需临时错做,可以解锁后对文件进行修改,之后再上锁。 1.16 清除多余的系统虚拟账号 操作前要先根据公司系统提供的服务确定哪些账号不需要使用,如果不确定就不要操作了,一般情况下,一个规范的系统提供的服务都比较少,因此,系统中默认的绝大多数虚拟用户都是可以删除的。例如: bin/adm/lp/halt/mail/uncp/operator/games/gopher/ftp/dbus/vcsa/abrt/ntp/saslauth/postfix/tcpdump等,这些用户本身也是无法登陆的,因此,此项优化不是必须的。 1.17 为grub菜单加密码 为grub菜单加密码的目的是防止他人修改grub做内核等启动设置,以及用单用户模式启动破解root密码等操作。实际上此步可以在安装系统的过程中设定,安装系统后的具体设定步骤如下: 1)先用/sbin/grub-md5-crypt产生一个MD5密码串,如下 [root@moban ~]# /sbin/grub-md5-crypt Password: Retype password: $1$vS9Bj$UKnQYq/V4Z2HIds8FVPJL. 2)修改grub.conf文件,命令如下: [root@moban ~]# vi /etc/grub.conf 1 # grub.conf generated by anaconda 2 # 3 # Note that you do not have to rerun grub after making changes to this file 4 # NOTICE: You have a /boot partition. This means that 5 # all kernel and initrd paths are relative to /boot/, eg. 6 # root (hd0,0) 7 # kernel /vmlinuz-version ro root=/dev/sda3 12 splashp_w_picpath=(hd0,0)/grub/splash.xpm.gz 1 # grub.conf generated by anaconda 2 # 3 # Note that you do not have to rerun grub after making changes to this file 4 # NOTICE: You have a /boot partition. This means that 5 # all kernel and initrd paths are relative to /boot/, eg. 6 # root (hd0,0) 7 # kernel /vmlinuz-version ro root=/dev/sda3 8 # initrd /initrd-[generic-]version.img 13 hiddenmenu 14 password --md5 $1$vS9Bj$UKnQYq/V4Z2HIds8FVPJL #注意:password 要加载splashp_w_picpath和title之间这段,否则可能不生效 15 title CentOS 6 (2.6.32-573.el6.x86_64) 16 root (hd0,0) 17 kernel /vmlinuz-2.6.32-573.el6.x86_64 ro root=UUID=c511f78f-2713-4ca d-8dcc-756dab643fc1 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=l atarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet 18 initrd /initramfs-2.6.32-573.el6.x86_64.img 设置完成后,下次开机需要管理grub时就会提示输入密码。 1.18 禁止linux系统被ping 此项优化不是必须的,而且又是我们自己也会通过ping来检查服务器是否异常,对于要求很高的中小企业服务器,设置禁止ping也是可以的。从安全角度来说,禁止ping还是会增加系统安全的。禁止png的命令如下: [root@moban ~]# echo "net.ipv4.icmp_echo_ignore_all=1">> /etc/sysctl.con [root@moban ~]#tail -1 /etc/sysctl.conf net.ipv4.icmp_echo_ignore_all=1 [root@moban ~]#sysctl -p #启动 其实这个禁ping的方法还不是好的额策略,因为禁止ping后,我们自己也无法通过ping检查了,比较好的策略是通过iptables设置让特定的IP可以ping,例如:让内网用户ping其他外部用户不能ping。例如:在默认策略为drop的情况下,可以执行如下命令, 为10.0.0.0/24网段允许ping iptables -t filter -I INPUT -p icmp --icmp -type 8 -i eth0 -s 10.0.0.0/24 -j ACCEPT 工作中防火墙处理 还原禁ping 删除/etc/sysctl.conf中的net.ipv4.icmp_echo_ignore_all=1 并执行如下命令 etho 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all 1.19 升级具有典型漏洞的软件版本 openssl openssh bash爆出很多软件漏洞,在企业场景需要进行修复漏洞操作,步骤如下: 1)首先检查相关软件的版本号 [root@moban ~]# rpm -qa openssl openssh bash bash-4.1.2-33.el6.x86_64 openssh-5.3p1-111.el6.x86_64 openssl-1.0.1e-42.el6.x86_64 2)执行升级已知漏洞的软件版本到最新,命令如下 [root@moban ~]# yum install openssl openssh bash -y 1.20 linux基础优化与安全重点小结 1)不用root登录管理系统,而以普通用户登录通过sudo授权管理 2)更改默认的远程连接SSH服务端口,禁止root用户远程连接,甚至更改SSH服务只监听内网IP。 3)定时自动更新服务器的时间,使其和互联网时间同步。 4)配置yum更新源,从国内看更新源下载安装软件包 5)管理SELinux及iptables(在工作场景中,如果有外部IP一般要打开iptables,高并发高流量的服务器可能无法开启)。 6)调整文件描述符的数量,进程及文件的打开都会消耗文件描述符数量。 7)定时自动清理邮件临时目录垃圾文件,防止磁盘的inodes数被小文件占满(注意cetos6和centos5要清除的目录不同) 8)精简并保留必要的开机自启动服务(如crond、sshd、network、rsyslog、sysstat) 9)linux内核参数优化/etc/sysctl.conf,执行sysctl -p 生效。 10)更改系统字符集为“zh_CN.UTF-8”,使其支持中文,防止出现乱码问题。 11)锁定关键系统文件如(/etc/passwd./etc/shadow./etc/group./etc/gshadow /etc/inittab)处理以上内容后把chattr、lsattr改名为olboy,转移走,这样就安全多了。 12)清空/etc/issue、/etc/issue.net,去除系统及内核版本登录前的屏幕显示。 13)清除多余的系统虚拟用户账号。 14)为grub引导菜单加密码 提示:上述仅为安装linux后的一些基础优化,更多针对不同业务服务器的优化思路见: http://oldboy.blog.51cto.com/2561410/1336488 http://yangrong.blog.51cto.com/6945369/1321594