Linux运维二:CentOS6.6系统安装后的基本配置与优化
CentOS6.6系统安装完成后还需要做一些配置与优化:
一:Linux内核版本号介绍
查看内核版本:
[root@Gin scripts]# uname -r 2.6.32-504.el6.x86_64
2 表示主版本号,有结构性变化才会更改
6 表示次版本号,新增功能时才变化,一般奇数表示测试版,偶数表示开发版
32 表示对次版本的修订次数或补丁包数
504 代表编译的次数,每次编译可对少数程序优化或修改
el6 用来表示版本的特殊信息,有较大的随意性
e1 代表企业版linux;pp代表测试版;fc代表fedora core;rc代表候选版本;
x86_64表示64位
二:安装系统补装工具
[root@Gin scripts]# yum install tree nmap sysstat lrzsz dos2unix -y
如果需要更新补丁则执行(更新所有软件到最新版本):yum update
注:不要轻易做,线上如非必要尽量不做,除非有已知的安全漏洞,会升级内核!简单介绍下yum update 与 yum upgrade的区别:
yum -y update:升级所有包,改变软件设置和系统设置,系统版本内核都升级
yum -y upgrade:升级所有包,不改变软件设置和系统设置,系统版本升级,内核不改变
上面5个工具的简单介绍:
tree:以树状图列出目录的内容
nmap:Nmap即网络映射器对Linux系统/网络管理员来说是一个开源且非常通用的工具。Nmap用于在远程机器上探测网络,执行安全扫描,网络审计和搜寻开放端口!详细使用文章:http://os.51cto.com/art/201401/428152.htm
sysstat:Sysstat是一个非常方便的工具,它带有众多的系统资源监控工具,用于监控系统的性能和使用情况!详细介绍文章:https://linux.cn/article-4025-1.html
lrzsz:在SecureCRT这样的ssh登录软件里, 通过在Linux界面里输入rz/sz命令来上传/下载文件
dos2unix:dos2unix命令用来将DOS格式的文本文件转换成UNIX格式
三:配置网络
通过setup命令简单配置网络
[root@Gin scripts]# setup
调出设置面板:
前面三项默认即可,配置Primary DNS Server为:8.8.8.8;Secondary DNS Server为:202.106.0.20;然后保存退出!
修改配置文件:vi /etc/sysconfig/network-scripts/ifcfg-eth0中的(上面的配置实质是在修改该文件)
ONBOOT=yes #开机启动
重启网卡:
[root@Gin scripts]# ifup eth0 或者: [root@Gin scripts]# /etc/init.d/network start
网卡重启后应该就可以连网!笔者虚拟机上使用的是NAT方式!
四:关闭防火墙
查看防火墙的状态:
[root@Gin scripts]# /etc/init.d/iptables status
临时关闭防火墙:
[root@Gin scripts]# /etc/init.d/iptables stop
关闭防火墙后,再次查看防火墙的状态:
[root@Gin scripts]# /etc/init.d/iptables status iptables: Firewall is not running.
设置开机不启动,此方法在后面介绍!
五:关闭selinux
SELinux (Security-Enhanced Linux)是美国国家安全局(NSA)对于强制访问控制的实现,这个功能让系统管理员又爱又恨,这里考虑还是先把它关闭,至于安全问题,后面通过其他手段来解决。
查看SELinux状态命令:
/usr/sbin/sestatus -v ##如果SELinux status参数为enabled即为开启状态 SELinux status: enabled ##也可以用这个命令检查 getenforce
临时关闭selinux:
[root@Gin scripts]# setenforce 0 setenforce: SELinux is disabled
永久关闭selinux:
修改/etc/selinux/config 文件,将SELINUX=enforcing改为SELINUX=disabled;或直接命令行修改:
[root@Gin scripts]# sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
生产场景中是不允许重启机器的,上面已经修改了配置文件,但需要重启机器才能生效!我们可以使用临时关闭与永久关闭的方法,来使系统既临时生效,机器重启后也生效,这样就能达到不要重启系统就能使配置生效
设置开机不启动,后文会介绍!
六:添加一个普通账号
[root@Gin scripts]# useradd gin [root@Gin scripts]# echo '123456'|passwd --stdin gin Changing password for user gin. passwd: all authentication tokens updated successfully.
七:将gin普通账户加入到sudo管理
[root@gin ~]# visudo root ALL=(ALL) ALL //在这一行的下面添加下面的这行内容 gin ALL=(ALL) ALL
给gin用户加入root环境路径:
[root@Gin scripts]$ vim ~/.bash_profile PATH=$PATH:$HOME/bin:/usr/local/sbin:/sbin:/usr/sbin [root@Gin scripts]$ source ~/.bash_profile //重新读取.bash_profile文件里的配置 [root@Gin scripts]$ echo $PATH /usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/poe/bin:/home/poe/bin:/usr/local/sbin:/sbin:/usr/sbin 这样,用gin账号登录时就不会出现命令找不到的情况
visudo命令的作用与用法,请关注本博客!
八:配置国内yum源
这里介绍两种配置方法:
配置前先备份/etc/yum.repos.d/CentOS-Base.repo文件
[root@Gin scripts]# cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.gin.20170125
1:手动配置!直接编辑/etc/yum.repos.d/CentOS-Base.repo文件
[root@gin ~]# vim /etc/yum.repos.d/CentOS-Base.repo 将该文件中以“mirrorlist=”开头的都注释掉,将baseurl开头的都取消注释,并把主域名修改为“http://mirror.sohu.com”,(也可以改成163,sina等域名),其他的不动 #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=contrib baseurl=http://mirror.sohu.com/centos/$releasever/contrib/$basearch/
2:直接下载国内其它的yum源(本例以淘宝的yum源为例)
打开网址:http://mirrors.aliyun.com/,找到centos后面的help,点击进去后就会看到CentOS各个版本,如图
由于前面已经备份过CentOS-Base.repo文件,这里就可以直接使用上面提供的命令,选择CentOS6下面的命令,复制执行即可
[root@Gin scripts]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
补充:
wget:下载命令
参数-O --output-document=FILE 下载并以不同的文件名保存
wget命令详细用法见:http://www.cnblogs.com/ginvip/p/6350189.html
yum下载文件的存放位置:默认的存放路径是:/var/cache/yum
也可以在/etc/yum.conf文件中指定:
cachedir=/var/cache/yum/$basearch/$releasever ## 存放目录,可自定义 keepcache=0 ## 0为不保存下载的文件,1为保存 metadata_expire=1800 ## 过期时间
九:清理开机自启动的服务
首先通过下面的脚本命令关闭所有的开机自启动的服务:
[root@gin ~]# for poe in `chkconfig --list|grep 3:on|awk '{print $1}'`;do chkconfig --level 3 $poe off;done
再执行如下命令开启需要开机自启的服务:
[root@gin ~]# for poe in crond network syslog sshd; do chkconfig --level 3 $poe on;done
一条命令直接搞定上面两步:
[root@ClientA ~]# chkconfig --list|grep 3:on|awk '{print $1}'|grep -Ev "sshd|network|rsyslog|crond|sysstat"|sed -r 's#(.*)#chkconfig \1 off#g'|bash
补充:
|bash前面的命令主要就是拼接字符串,拼接成的形式是:chkconfig mysqld off;前面的命令的主要作用就是排除sshd,network,syslog,crond,sysstat这5个服务,其它的服务都拼接成 chkconfig xxxx off的形式。这里拼接出来的都是字符串,要想让字符串当成命令被执行,就需要交给操作系统的解释器来执行,也就是最后面的bash的作用!
sed 后面的 -r 参数的意义就是后面的正则不需要做转义,不加-r参数的话后面的括号,都需要加 \ 来做转义
生产环境一般刚装完系统的自启动服务期望的处理结果就是如下内容(5个):
[root@gin ~]# chkconfig --list|grep 3:on crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off network 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 #远程连接,必须开启,否则将无法连接linux服务器 syslog 0:off 1:off 2:on 3:on 4:on 5:on 6:off #syslog是操作系统提供的一种机制,系统的守护程序通常会使用rsyslog将各种信息...... sysstat 0:off 1:off 2:off 3:on 4:off 5:off 6:off
十:更改ssh登陆配置
[root@gin ~]# cp /etc/ssh/sshd_config /etc/ssh/sshd_config.ori //备份ssh配置文件 [root@gin ~]# vim /etc/ssh/sshd_config //修改内容如下: Port 52113 //ssh默认的连接端口必须要修改 PermitRootLogin no //root用户黑客都知道,禁止它远程登陆 PermitEmptyPasswords no //禁止空密码登陆 UseDNS no //不使用DNS
当然,测试环境这步也就无所谓了!
十一:服务器时间同步
[root@poe poe]# /usr/sbin/ntpdate time.nist.gov #公认的时间服务器 25 Jan 11:01:56 ntpdate[1358]: step time server 216.229.0.179 offset -50.291883 sec
上面的命令只同步一次,生产场景中服务器需要每隔5-10分钟就要同步一下时间:
[root@poe poe]# echo "*/5 * * * * /usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1" >>/var/spool/cron/root [root@poe poe]# crontab -l */5 * * * * /usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1
补充:
/dev/null :空设备,位桶,黑洞
下面的3种写法是等价的:
1>/dev/null 2>/dev/null ****** 1>/dev/null 2>&1 & >/dev/null
生产场景中一般利用一台服务器去同步公认的时间服务器,其他机器都同步前面已经同步到公认时间服务器的服务器!
十二:加大服务器文件描述符
有关文件描述符的详细介绍:http://www.cnblogs.com/ginvip/p/6350222.html
文件描述符概念:
- 表示形式为整数数字,一般使用(0-65535)范围
- 进程使用的时候会占用文件描述符(标识打开的文件)
查看默认文件描述符:
[root@Gin scripts]# ulimit -n 1024
临时修改文件描述符:
[root@Gin scripts]# ulimit -SHn 65535 [root@Gin scripts]# ulimit -n 65535
永久修改文件描述符:
[root@poe ~]# echo '* - nofile 65535' >>/etc/security/limits.conf [root@gin ~]# tail -n1 /etc/security/limits.conf * - nofile 65535
十三:调整内核参数文件 /etc/sysctl.conf
这个目录主要是配置一些系统信息,而且它的内容全部是对应于/proc/sys/这个目录的子目录及文件。
配置 Linux 内核参数修改后不用重启动更新配置: /sbin/sysctl -p
以下配置仅供参考,具体还得视服务器及业务而定:
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
打开/etc/sysctl.conf 文件,在尾部,粘贴上面的内容到文件;然后执行/sbin/sysctl -p让参数生效
网络状态说明及优化命令和优化细节请看:http://www.cnblogs.com/ginvip/p/6350252.html
十四:隐藏Linux软件名及内核版本
系统默认的/etc/issue文件内容
[root@poe poe]# cat /etc/issue CentOS release 6.6 (Final) Kernel \r on an \m
使用以下命令清空该文件:
[root@Andy test]# >/etc/issue 或: [root@poe ~]# cat /dev/null > /etc/issue
伪造Linux内核信息:
[root@poe ~]# vi /etc/motd RedHat Enterprice Linux 6.6 (Final) welcom to Gin linux.
这样再次登录时就会显示上面文件内容的信息:
Last login: Wed Jan 25 12:35:11 2016 from 192.168.17.1 RedHat Enterprice Linux 6.6 (Final) welcom to Gin linux.
有关/etc/issue文件,/etc/issue.net文件,/etc/motd文件的区别见:http://www.cnblogs.com/ginvip/p/6350281.html
十五:Linux中文显示设置
可通过快捷的命令方式在/etc/sysconfig/i18n中添加如下内容,使其支持中文显示:
[root@poe ~]# cat /etc/sysconfig/i18n LANG="en_US.UTF-8" SYSFONT="latarcyrheb-sun16" [root@poe ~]# cp /etc/sysconfig/i18n /etc/sysconfig/i18n.poe.origin [root@poe ~]# sed -i 's#LANG="en_US.UTF-8"#LANG="zh_CN.UTF-8#g' /etc/sysconfig/i18n [root@poe ~]# source /etc/sysconfig/i18n
更改完了服务端的字符集,还需要修改CRT客户端的字符集:
十六:设置linux默认的历史记录数
echo 'HISTSIZE=5' >>/etc/profile echo 'HISTFILESIZE=5' >>/etc/profile
[root@poe poe]# tail -3 /etc/profile HISTSIZE=5 ## 命令行的历史记录数量变量 HISTFILESIZE=5 ## 历史记录文件的命令数量变量(~/.bash_history)
更新配置文件:
source /etc/profile
补充:
history命令的其他操作:
history -c ## 清空所有历史记录 history -d 443 ##指定删除历史记录中的第443条记录
十七:为CRT终端设置超时时间
[root@poe poe]# export TMOUT=10 #10秒没有操作就退出!临时生效
永久生效:
[root@poe poe]# echo "export TMOUT=100" >>/etc/profile [root@poe poe]# tail -1 /etc/profile [root@poe poe]# source /etc/profile
十八:锁定关键系统文件,防止提权被篡改
锁定以下文件(哪些文件需要被锁定,视情况而定)
[root@poe ~]# chattr +i /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/inittab
锁定后不能删除,不能修改,不能移动
想要更为安全,可以把chattr改名转移,防止被黑客利用,命令如下:
十九:清除多余的系统虚拟账号
操作前要先根据公司系统提供的服务确定哪些账号不需要使用,如果不确定那就不做此步优化,视情况而定
如果确定,那就可以在/etc/passwd文件中将此账户给注释掉
二十:为grub引导菜单加密码
如果安装系统时没有设置grub引导密码,可以使用如下密码添加密码:
1)先用/sbin/grub-md5-crypt产生一个md5密码串,如下:
[root@poe poe]# /sbin/grub-md5-crypt Password: Retype password: $1$ij2G9/$MDnlYqVm7HEDnbroqdTff.
2)修改grub.conf文件
注意:password要加在splashimage和title之间这段,否则可能不生效
hiddenmenu password --md5 $1$ij2G9/$MDnlYqVm7HEDnbroqdTff. title CentOS 6 (2.6.32-504.el6.x86_64)
二十一:禁止linux系统被ping
[root@poe poe]# echo "net.ipv4.icmp_echo_ignore_all=1" >>/etc/sysctl.conf [root@poe poe]# sysctl -p
此优化后期可以使用iptables来替代,一般不需要禁止ping
Linux系统安全最小化原则说明
1)安装Linux系统最小化,即选包最小化,yum安装软件包也要最小化,无用的包不装
2)开机自启动服务最小化,即无用的服务不开启
3)操作命令最小化。如:用rm -r test.txt 而不用 rm -rf test.txt
4)登录Linux用户最小化。平时没有需求不用root登录,用普通用户登录即可
5)普通用户授权权限最小化,即只给必须的管理系统的命令
6)Linux系统文件及目录的权限设置最小化,禁止随意创建,更改,删除
企业场景面试题:
1:Linux系统如何优化?
Linux基础优化其它参考:
http://oldboy.blog.51cto.com/2561410/988726
http://lspgyy.blog.51cto.com/5264172/1308977