简介
我们在系统安装完成后,为了方便管理以及安全的目的需要对系统做一些简单的优化配置。
一、创建普通用户,利用sudo进行管理
因为,生产环境中root账号是不允许直接登陆的,而且不安全,所以为了安全及方便,我们新建普通用户进行任务操作。
步骤一:创建普通用户
useradd support
passwd support
步骤二:添加sudo权限
visudo,相当于vi /etc/sudoers
support ALL=(root) NOPASSWD:ALL =====>意思是允许support用户在任何地方,以root用户无密码的允许所有命令。
二、配置网络yum源
因为生产环境中,我们经常遇到需要安装一些软件包,此时就需要使用到yum仓库。
但是Centos默认的是去他的官网上下载更新程序包的,在国内由于速度较慢,我们一般会使用国内镜像。
步骤:
cd /etc/yum.repos.d
mv CentOS-Base.repo CentOS-Base.repo.ori
wget http://mirrors.163.com/.help/CentOS6-Base-163.repo ====>也可以手动去下载
mv CentOS-Base-163.repo CentOS-Base.repo
三、设置运行级别为3
一般Centos6版本都是遵循此种风格的,总共六种运行级别:
1:关机模式
2:多用户模式,但是他没有网络服务
3:多用户模式
4:保留模式,没有使用
5:界面模式
6:重启模式
在生产环境中,一般设置为3,多用户模式
命令:
runlevel:查看当前系统的运行级别
init:临时切换运行级别
vi /etc/inittab ====>修改默认的运行级别
四、关闭selinux
selinux是美国国家安全局(NSA)在LInux社区的帮助下开发的一套访问控制体系,目的是实现安装的访问控制
但是,开启此服务使用不是很方便,生产环境中我们一般是关闭这个服务的。
步骤:
sed -i 's#SELINUX=enforcing#SELINUX=disabled#' /etc/selinux/config ===>永久生效,但是必须重启
setenforce 0 ====>立即生效,但是重启就会失效
getenforce ====>查看selinux状态
五、临时关闭防火墙
关闭防火墙的命令:
/etc/init.d/iptables stop
查看防火墙的状态
/etc/init.d/iptables staus
六、设置系统语言环境
在生产环境中,如果没有特殊的需求,我们一般使用的英文字符集。例如: "en_US.UTF-8"
步骤:
echo 'LANG="en_US.UTF-8"' > /etc/sysconfig/i18n
注意:设置完字符集后,我们在远程连接服务器时,需要将远程连接工具的字符集设置与系统一致
七、清理开启自启动服务
因为在开机的初始化过程中,他会去读取系统默认的运行级别,然后根据这个级别,去启动许多相关的服务。这个是系统
Centos6系统的特点,但是生产环境中,为了安全我们会遵循最小化原则。最小化原则:
1)安装Linux系统最小化,即选包最小化,yum安装软件包也要最小化,无用的包不装
2)开机自启动服务最小化,即无用的服务不开启
3)操作命令最小化。如:用rm -r test.txt 而不用 rm -rf test.txt
4)登录Linux用户最小化。平时没有需求不用root登录,用普通用户登录即可
5)普通用户授权权限最小化,即只给必须的管理系统的命令
6)Linux系统文件及目录的权限设置最小化,禁止随意创建,更改,删除
生产环境一般刚装完系统的自启动服务期望的处理结果就是如下内容(5个):
sshd:是远程连接服务,必须要开启,因为我们需要远程连接服务器的
network:网络服务,我们和外部交互就需要开启此网络服务
rsyslog:日志记录服务,系统会利用这个机制将系统的相关信息记录在日志文件中
crond:这个服务是支持系统设置计划任务
sysstat:这个服务是一组软件包,他提供了检测系统性能及效率的一组工具。例如:
iostat:可以查看CPU使用率及磁盘吞吐率
mpstat:可以查看处理器相关的信息
sar:可以收集并报告系统信息的
精简的步骤:
利用循环停止除了上面5个服务外的其他服务:
for item in `chkconfig --list| awk '{print$1}' |grep -Ev "crond|sysstat|sshd|network|rsyslog"`; do chkconfig --leve 3 $item off; done
利用bash执行字符串的方式:
chkconfig --list | awk '{print $1}' | grep -Ev 'crond|sysstat|sshd|network|rsyslog' |sed -r 's/(.*)/chkconfig --level 3 1 off/' | bash
注意:前面的方法是利用for循环来实现的,后面的是将这几个服务拼接成字符串然后交给bash解释器执行。
|bash前面的一串命令是将这个5个服务拼接成chkconfig --level 3 xxxx off的字符串,然后给bash解释器执行。
sed -r 是开启扩展正则,()就不需要加转义了,s///将前面的.*匹配到的内容替换成后面字符串,1代表引用前面的第一个分组。
八、sshd服务优化
在生产环境中,为了安全我们一般是不允许使用root用户直接远程登陆的,因此我们需要禁止root远程连接。
而且,sshd默认的是使用22号端口进行连接的,这样不是很安全,所以企业一般会设置其他的端口来使用。
步骤:
cp /etc/ssh/sshd_config /etc/ssd/sshd_config.ori
修改一下内容:
Port 3389 ===>设置远程连接端口为3389
PermitRootLogin no ===>禁止root远程登陆
UseDNS no ===>不适用DNS解析,可以加速ssh连接速度
GSSAPIAuthentication no ===>也可以加速ssh连接
/etc/init.d/sshd reload
九、服务器时间同步
时间对于一个服务器来说非常重要,生产环境中为了业务不会出现错误,我们需要对服务器进行时间同步
步骤:
ntpdate 时间服务器
ntp常用服务器:
中国国家授时中心:210.72.145.44
NTP服务器(上海) :ntp.api.bz
美国:time.nist.gov
[root@Centos6 log]# ntpdate ntp.api.bz
12 Apr 16:10:18 ntpdate[27703]: step time server 182.92.12.11 offset 1465895.679147 sec
我们也可以将这个命令加入定时任务中,利用定时任务进行时间同步。
注意:在生产环境中一般采用的是使用几台服务器去同步公认的时间服务器,然后其他的所有及其都与这几台机器做时间同步。
十、加大服务器文件描述符和最大使用进程数
文件描述符:是指一个代替打开的文件的非负整数,他是一个非负整数,指代的是一个被程序打开的文件
进程数:一个用户所能开启的最大进程数量
查看用户文件描述符和进程数:
ulimit -n
ulimit -u
临时修改文件描述符和最大进程数:
ulimit -SHn 65535
ulimit -SHu 65535
ulimit -a
永久修改文件描述符和最大进程数:
echo '* - nofile 65535' >> /etc/security/limits.conf
echo '* - nproc 65535' >>/etc/security/limit.conf
注意:
*:代表所有的用户,也可以指定具体的用户。
-:代表生效的类型,hard:代表指定用户设定的最大值,soft代表指定用户的的设置值,-代表的是同时设置了hard和soft,如果是分开
设置的化,soft的值要小于hard的值
nofile:代表的就是文件描述符
nproc:代表的就是最大进程数
十一、调整内核参数
系统中的所有的信息基本都可以在/proc/sys下找到,这是一个系统信息的伪文件系统。
如果我们向修改内核的相关设置,可以向这个目录下的某些文件注入新值即可。
修改完成后,只要使用:sysctl -p命令重读内核参数即可
但是,上面的方法是临时设置的,重启系统会失效。
永久设置方法:编辑/etc/sysctl.conf文件添加相关的配置。
注意:如果你想修改内核参数的化,必须要充分了解他的作用及影响,否则不要做修改,下面提供一个样例:
net.vip4.tcp_fin_timeout = 2
net.vip4.tcp_tw_reuse = 1
net.vip4.tcp_tw_recycle = 1
net.vip4.tcp_syncookies = 1
net.vip4.tcp_keepalive_time = 600
net.vip4.ip_local_port_range = 4000 65000
net.vip4.tcp_max_syn_backlog = 16384
net.vip4.tcp_max_tw_buckets = 36000
net.vip4.route.gc_timeout = 100
net.vip4.tcp_syn_retries = 1
net.vip4.tcp_synack_retries = 1
net.core.somaxconn = 16384
net.core.netdev_max_backlog = 16384
net.ipv4.tcp_max_orphans = 16384
## 以下参数是对iptables防火墙的优化,防火墙不会提示,可以忽略不理
#net.vip4.ip_conntrack_max = 25000000
#net.vip4.netfilter.ip_conntrack_max = 25000000
#net.vip4.netfilter.ip_conntrack_tcp_timeout_established = 180
#net.vip4.netfilter.ip_conntrack_tcp_timeout_time_wait = 120
#net.vip4.netfilter.ip_conntrack_tcp_timeout_close_wait = 60
#net.vip4.netfilter.ip_conntrack_tcp_timeout_fin_wait = 120
十二、为关键文件加锁
生产环境中有些文件是非常重要的,为了安全起见,我们为他加锁,不让其他人去编辑、移动删除他。
当然,如果有其他的文件需要,也可以加锁。
步骤:
chattr +i /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/inittab
十三、清除系统登陆的提示信息
我们在登陆服务器时,他都会有一些提示信息,例如:内核和系统的版本等,为了安全我们可以清除这些信息
步骤:
> /etc/issue
十四、其他方面
网络上还有其他人设置了其他的一些方面。例如:
1、修改用户的历史命令记录数
2、远程连接超时间
3、清除多余的系统账户
4、为grub引导菜单加密码
5、禁止系统被ping