CentOS 日常运维十大技能

文章目录

一、安装部署

方式:U盘,光盘和网络安装

其中网络安装已经成为了目前批量部署的首选方式:主要工具有Cobbler和PXE+kickstart

可以参考如下链接内容:

http://www.cnblogs.com/mchina/p/centos-pxe-kickstart-auto-install-os.html

二、初始化配置

2.1 禁用服务

chkconfig --level 35 iptables off
chkconfig --level 35 iptabless off
service iptables stop
chkconfig --level 35 postfix off

2.2 禁用SeLinux

vi /etc/selinux/config SELINUX-disabled

2.3 配置YUM源配置

# vi local.repo
[local]
name=local
basurl-file:///mnt/server
enabled=1
gpgcheck=0

可以配置为光盘,内部YUM源或EPEL等

2.4 常用软件安装

# yum install ftp telnet make makeauto imake gcc compat-libstdc++-33 libstdc++ libXp kernel kernel-devel kernel-headers rsh ksh lsof openssh-clients -y
# yum install iptraf.x86_64 unzip.x86_64 libaio_x86_64 eject sysfsutils dmidecode pciutils dstat lsscsi -y

2.5 安装xwindows

#yum groupinstall "X Window System" -y
#yum groupinstall Desktop -y (可以不安装桌面)
#yum install xorg-x11-apps -y (包含了xclock)

2.6 配置ntp

*/10 * * * * /usr/sbin/ntpdate 10.0.0.1

Crontab 添加如上记录,指定内部ntp服务器

2.7 SSH 登录设置

修改ssh 禁用DNS 选项:

echo "UseDNS no" >> /etc/ssh/sshd_config service sshd restart

添加允许指定用户登录:

echo "AllowUsers user1" >> /etc/ssh/sshd_config
service sshd restart

修改ssh端口

vi /etc/sysconfig/iptables 
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 6022 -j ACCEPT 
service iptables restart 
测试两个端口是否都能连上,连上后再将22端口删除

2.8 上传扫描工具

rescan-scsi-bus.sh

网络上有该脚本,下载自行使用

2.9 修改历史记录格式

echo "export HISTTIMEFORMAT='%F %T'" >> /etc/profile

三、安全加固

本次安全加固内容主要参考的是Redhat和Centos系列版本系统:

参考链接
http://www.centoscn.com/CentosSecurity/CentosSafe/2015/0315/4881.html

3.1 注释掉系统不需要的用户和用户组

注意:不建议直接删除,当你需要某个用户时,自己重新添加会很麻烦。

cp /etc/passwd /etc/passwdbak
vi /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
#adm:x:3:4:adm:/var/adm:/sbin/nologin
#lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
#sync:x:5:0:sync:/sbin:/bin/sync
#shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
#halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
#operator:x:11:0:operator:/root:/sbin/nologin
#games:x:12:100:games:/usr/games:/sbin/nologin
#ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin #注释掉ftp匿名账号
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-bus-proxy:x:999:998:systemd Bus Proxy:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:998:997:User for polkitd:/:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
chrony:x:997:995::/var/lib/chrony:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
mysql:x:1000:1000::/home/mysql:/sbin/nologin
www:x:1001:1001::/home/www:/bin/bash
redis:x:1002:1002::/home/redis:/sbin/nologin
cp /etc/group /etc/groupbak
vi /etc/group
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:
#adm:x:4:
tty:x:5:
disk:x:6:
#lp:x:7:
mem:x:8:
kmem:x:9:
wheel:x:10:
cdrom:x:11:
mail:x:12:postfix
man:x:15:
dialout:x:18:
floppy:x:19:
#games:x:20:
tape:x:30:
video:x:39:
ftp:x:50:
lock:x:54:
audio:x:63:
nobody:x:99:
users:x:100:
utmp:x:22:
utempter:x:35:
input:x:999:
systemd-journal:x:190:
systemd-bus-proxy:x:998:
systemd-network:x:192:
dbus:x:81:
polkitd:x:997:
ssh_keys:x:996:
#dip:x:40:
tss:x:59:
sshd:x:74:
postdrop:x:90:
postfix:x:89:
chrony:x:995:
ntp:x:38:
chrony:x:995:
ntp:x:38:
mysql:x:1000:
www:x:1001:
redis:x:1002:

3.2 关闭系统不需要的服务

systemctl list-unit-files | grep enable 过滤查看启动项如下

systemctl stop acpid chkconfig acpid off #停止服务,取消开机启动 #电源进阶设定,常用在 Laptop 上
systemctl stop autofs chkconfig autofs off #停用自动挂载档桉系统与週边装置
systemctl stop bluetooth chkconfig bluetooth off #停用Bluetooth蓝芽
systemctl stop cpuspeed chkconfig cpuspeed off #停用控制CPU速度主要用来省电
systemctl stop cups chkconfig cups off #停用 Common UNIX Printing System 使系统支援印表机
systemctl stop ip6tables chkconfig ip6tables off #禁止IPv6

3.3 给下面的文件加上不可更改属性,从而防止非授权用户获得权限

chattr +i /etc/passwd 
chattr +i /etc/shadow 
chattr +i /etc/group 
chattr +i /etc/gshadow 
chattr +i /etc/services
# lsattr查看权限锁定设置,chattr -i xxx 取消权限锁定设置

3.4 限制不同文件的权限

chattr +a .bash_history #避免删除.bash_history或者重定向到/dev/null
chattr +i .bash_history
chmod 700 /usr/bin 恢复 chmod 555 /usr/bin
chmod 700 /bin/ping 恢复 chmod 4755 /bin/ping
chmod 700 /usr/bin/vim 恢复 chmod 755 /usr/bin/vim
chmod 700 /bin/netstat 恢复 chmod 755 /bin/netstat
chmod 700 /usr/bin/tail 恢复 chmod 755 /usr/bin/tail
chmod 700 /usr/bin/less 恢复 chmod 755 /usr/bin/less
chmod 700 /usr/bin/head恢复 chmod 755 /usr/bin/head
chmod 700 /bin/cat 恢复 chmod 755 /bin/cat
chmod 700 /bin/uname 恢复 chmod 755 /bin/uname
chmod 500 /bin/ps 恢复 chmod 755 /bin/ps

3.5 禁止使用Ctrl+Alt+Del快捷键重启服务器

vim /etc/init/control-alt-delete.conf 
#modify the existing line:
exec /sbin/shutdown -r now "Control-Alt-Delete pressed"
To:
exec /usr/bin/logger -p security.info "Control-Alt-Delete pressed"

3.6 使用yum update更新系统时不升级内核,只更新软件包

注意:由于系统与硬件的兼容性问题,有可能升级内核后导致服务器不能正常启动,这是非常可怕的,没有特别的需要,建议不要随意升级内核。

cp /etc/yum.conf /etc/yum.confbak
echo "exclude=kernel*" >> /etc/yum.conf

3.7 关闭Centos自动更新

chkconfig --list yum-updatesd #显示当前系统状态
yum-updatesd 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭
service yum-updatesd stop #关闭 开启参数为start
停止 yum-updatesd: [确定]
service yum-updatesd status #查看是否关闭
yum-updatesd 已停
chkconfig --level 35 yum-updatesd off #禁止开启启动(系统模式为3、5)
chkconfig yum-updatesd off #禁止开启启动(所有启动模式全部禁止)
chkconfig --list yum-updatesd #显示当前系统状态
yum-updatesd 0:关闭 1:关闭 2:启用 3:关闭 4:启用 5:关闭 6:关闭

3.8 关闭多余的虚拟控制台

我们知道从控制台切换到 X 窗口,一般采用 Alt-F7 ,为什么呢?因为系统默认定义了 6 个虚拟控制台,所以 X 就成了第7个。实际上,很多人一般不会需要这么多虚拟控制台的,修改/etc/inittab ,注释掉那些你不需要的。

cp /etc/inittab /etc/inittabbak
vi /etc/inittab

# Run gettys in standard runlevels
1:2345:respawn:/sbin/mingetty tty1
#2:2345:respawn:/sbin/mingetty tty2
#3:2345:respawn:/sbin/mingetty tty3
#4:2345:respawn:/sbin/mingetty tty4
#5:2345:respawn:/sbin/mingetty tty5
#6:2345:respawn:/sbin/mingetty tty6

3.9 修改history命令记录

cp /etc/profile /etc/profilebak
vi /etc/profile
找到 HISTSIZE=1000 改为 HISTSIZE=50

3.10 隐藏服务器系统信息

在缺省情况下,当你登陆到linux系统,它会告诉你该linux发行版的名称、版本、内核版本、服务器的名称。为了不让这些默认的信息泄露出来,我们要进行下面的操作,让它只显示一个"login:"提示符。

删除/etc/issue和/etc/issue.NET这两个文件,或者把这2个文件改名,效果是一样的。
mv /etc/issue /etc/issuebak
mv /etc/issue.net /etc/issue.netbak

3.11 优化Linux内核参数

cp /etc/sysctl.conf /etc/sysctl.confbak
vi /etc/sysctl.conf #在文件末尾添加以下内容

net.ipv4.tcp_max_syn_backlog = 65536
net.core.netdev_max_backlog = 32768
net.core.somaxconn = 32768
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2
net.ipv4.tcp_tw_recycle = 1
#net.ipv4.tcp_tw_len = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_max_orphans = 3276800
#net.ipv4.tcp_fin_timeout = 30
#net.ipv4.tcp_keepalive_time = 120
net.ipv4.ip_local_port_range = 10024 65535 
#(表示用于向外连接的端口范围。缺省情况下很小:32768到61000 注意
:这里不要将最低值设的太低,否则可能会占用掉正常的端口! )
/sbin/sysctl -p #使配置立即生效

3.12 系统优化

cp /etc/profile /etc/profilebak2
vi /etc/profile #在文件末尾添加以下内容

ulimit -c unlimited
ulimit -s unlimited
ulimit -SHn 1048576

source /etc/profile #使配置立即生效
ulimit -a #显示当前的各种用户进程限制

3.13 服务器禁止ping

cp /etc/rc.d/rc.local /etc/rc.d/rc.localbak
vi /etc/rc.d/rc.local #在文件末尾增加下面这一行
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all  
参数0表示允许 1表示禁止

3.14 防止攻击

  1. 阻止ping 如果没人能ping通您的系统,安全性自然增加了。为此,可以在/etc/rc.d/rc.local文件中增加如下一行:

    #echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
    
  2. 防止IP欺骗

    编辑host.conf文件并增加如下几行来防止IP欺骗攻击。
    order bind,hosts
    multi off
    nospoof on
    
  3. 防止DoS攻击

    对系统所有的用户设置资源限制可以防止DoS类型攻击。如最大进程数和内存使用数量等。例如
    ,可以在/etc/security/limits.conf中添加如下几行:
    
    * hard core 0
    * hard rss 5000  #( 本行或许没用,man limits.conf 显示 maximum resident set size (KB) 
    (Ignored in Linux 2.4.30 and higher)
    * hard nproc 50
    
    然后必须编辑/etc/pam.d/login文件检查下面一行是否存在。
    
    session required /lib/security/pam_limits.so
    
    上面的命令禁止调试文件,限制进程数为50并且限制内存使用为5MB。
    
    经过以上的设置,您的Linux服务器已经可以对绝大多数已知的安全问题和网络攻击具有免疫能力,
    但一名优秀的系统管理员仍然要时刻注意网络安全动态,随时对已经暴露出的和潜在安全漏洞进行修补。
    

3.15 删除MySQL历史记录

用户登陆数据库后执行的SQL命令也会被mysql记录在用户目录的.mysql_history文件里。
如果数据库用户用SQL语句修改了数据库密码,也会因.mysql_history文件而泄漏。
所以我们在shell登陆及备份的时候不要在-p后直接加密码,而是在提示后再输入数据库密码。
另外这两个文件我们也应该不让它记录我们的操作,以防万一。

cd mysql_dir
cp .bash_history .bash_historybak #备份
cp .mysql_history .mysql_historybak
rm .bash_history .mysql_history
ln -s /dev/null .bash_history
ln -s /dev/null .mysql_history

四、多路径设置

随着X86 环境的普及化,Linux 的市场占有率也越来越高,为了方便后续的设备管理我们和Linux 自带多路径软件的成熟化,我们在日常的设备多路径软件选择方面经常会首先考虑使用DM 软件,本次多路径设置主要是结合REDHAT和CENTOS自带软件DM— Multipath

参考:
Linux 操作系统层面Multipath 配置使用技巧及注意事项(点击标题可读)

五、系统异常性能指标获取

5.1 CPU占用最高的10个进程

# ps axww -o user,pid,pcpu,pmem,start,time,comm|head -1;ps axww -o user,pid,pcpu,pmem,start,time,comm|grep -v PID|sort -rn -k 3|head
# ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head
# ps auxw|head -1;ps auxw|sort -rn -k3|head -10 

5.2 内存占用最高的10个进程

$ ps axww -o user,pid,pcpu,pmem,start,time,comm|head -1;ps axww -o user,pid,pcpu,pmem,start,time,comm|grep -v PID|sort -rn -k 3|head
$ ps aux|head -1;ps aux|grep -v PID|sort -rn -k +4|head
$ ps auxw|head -1;ps auxw|sort -rn -k4|head -10   

5.3 虚拟内存使用最多的前10个进程

ps auxw|head -1;ps auxw|sort -rn -k5|head -10

5.4 查看系统负载

$ dstat --top-mem --top-io --top-cpu --nocolor 1 10

5.5 统计当前连接数

ss -an | grep -v "State" | awk '{++S[$1]}END{for (a in S)print a,S[a]}'
netstat -tan|awk '/^tcp/{++S[$NF]}END{for (a in S)print a, S[a]}'

5.6 当前连接数最多的10个进程

ss -tnp |  grep -v "State" | awk -F '/' '{print $6}' | awk -F '"' '{print $2}' | awk '{++S[$1]}END{for (a in S)print a,S[a]}' | sort -nr -k2 | head
netstat -tnp | grep -v "Active" | grep -v "TIME_WAIT" | grep -v "State" | awk -F '/' '{print $NF}' | awk '{++S[$1]}END{for (a in S)print a,S[a]}' | sort -nr -k2 | head

六、LVM 介绍与基本概念

LVM 是 Linux 虚拟逻辑卷管理工具,也就是将多个物理磁盘(PV)进行合并变成一块新的大硬盘(VG),然后可以在这个大硬盘上再进行分区挂载使用,新的磁盘分区(LV)就有了一个特性,那就是可以对其进行动态扩容。

LVM 中有三个概念一定要清楚: PV 表示物理卷, VG 表示逻辑卷组, LV 表示逻辑卷。

LVM 主要有三类命令行工具

  • pv` 开头的命令用来操作 PV 物理卷
  • vg 开头的命令用来操作 VG 逻辑卷组
  • lv 开头的命令用来操作 LV 逻辑卷

6.2 基本 LVM 逻辑卷创建

  • 操作系统: CentOS 7.2
  • 硬盘1: /dev/sdb
  • 硬盘2: /dev/sdc

6.2.1 添加新硬盘并设置分区类型为 8E

$ cfdisk /dev/sdb
$ cfdisk /dev/sdc
$ partprobe

将两块新的硬盘分别进行分区,并且将分区类型设置为 8E ,也就是 Linux LVM 分区类型,然后执行 partprobe 命令更新硬盘分区信息

6.2.2 创建物理卷 (PV)

$ pvcreate /dev/sdb1
$ pvcreate /dev/sdc1

将 /dev/sdb1 和 /dev/sdc1 两块物理磁盘转换成 PV 物理卷

查看 PV 物理卷相关信息

$ pvdisplay
$ pvs
$ pvscan

6.2.3 创建 VG 卷组 (VG)

$ vgcreate -s 64M vg0 /dev/sdb1 /dev/sdc1
$ vgdisplay

-s 参数表示 PE 块的大小,一般设置为 2 的倍数即可
新的 VG 卷组的名称为 vg0,由 /dev/sdb1 和 /dev/sdc1 两块物理卷组成

6.2.4 创建 LV 逻辑卷 (LV)

$ lvcreate -n lv0 -L 10G vg0
$ lvdisplay

从 vg0 卷组创建一个名称为 lv0 的逻辑卷,分配其大小为 10GB

6.2.5 格式化和挂载新的 LV 逻辑卷磁盘

$ mkfs.xfs /dev/vg0/lv0
$ mkdir /var/data
$ mount /dev/vg0/lv0 /var/data
$ df -h

6.2.6 在 /etc/fstab 配置文件中添加开机自动挂载项

$ emacs /etc/fstab
/dev/mapper/vg0-lv0    /var/data   xfs  defaults      0 0

6.3 高级 LVM 逻辑卷管理

6.3.1 将新硬盘加入 LVM 卷组

为新硬盘分区为,分区类型为 8E

$ cfdisk /dev/sdd
$ partprobe

创建物理卷

$ pvcreate /dev/sdd1
$ pvdisplay

将新的 PV 物理卷加入到 VG 卷组

$ vgextend vg0 /dev/sdd1
$ vgdisplay

6.3.2 LV 逻辑卷动态扩容

$ umount /dev/vg0/lv0
$ lvresize -L +2G -r /dev/vg0/lv0
$ lvdisplay
$ mount /dev/vg0/lv0 /var/data
$ df -h

lvresize 命令的 -L 参数表示在原来磁盘大小的基础上再增加 2G 的容量。
lvresize 命令的 -r 参数表示当完成扩容后自动更新文件系统相关信息。

如果 lvresize 命令没有使用 -r 参数,在操作系统里面看到的磁盘大小就会和扩容之后的大小不一致,可以使用 xfs_growfs 命令让内核系统重新读取磁盘信息。

使用 xfs_growfs 命令更新磁盘分区信息

$ xfs_growfs /dev/vg0/lv0

6.3.3 删除 LV 逻辑卷

$ fuser -m /var/data
$ umount /var/data
$ lvremove /dev/vg0/lv0

Notice: 在删除 LV 逻辑卷磁盘之前一定要备份其中的数据,然后 umount 卸载掉该逻辑卷

6.3.4 删除 VG 卷组

$ vgremove vg0

Notice: 在删除 VG 逻辑卷组之前一定要先卸载掉 LV 逻辑卷

6.3.5 删除 PV 物理卷

$ pvremove /dev/sdb1

6.3.6 从 VG 卷组中删除 PV 物理卷

$ vgreduce vg0 /dev/sdb1

6.3.7 取消激活 VG 卷组

$ vgchange -an vg0

6.3.8 激活一个 LV 逻辑卷

$ lvscan
$ lvchange -ay /dev/vg0/lv0

6.4 LVM 逻辑卷问题与总结

虽然 LVM 有一些特性和优点,但也有一些坑,那就是当某一块物理磁盘损坏,会导致整个 LV 逻辑卷数据丢失,数据恢复比较困难,所以
一般建议在使用 LVM 逻辑卷之前,先在底层做 raid 磁盘镜像阵列。也有人测试过,一些数据库服务器软件在 LVM 磁盘上有性能下降的问题。

七、Linux 运维命令掌握

Linux 下面日常运维使用的命令有太多了,可以根据个人的情况进行适当的记忆:

  • 系统负载:top ,nmon,dstat 等
  • 网络:ss,netstat,route,diag,ping,ip,lsof 等
  • io:dd,iostat,fio,nmon,dstat,pvs,lvs,vgs 等
  • 内存:free,dstat等
  • 进程:ps,lsof 等
  • 配置:lscpu,lspci,dmidecode,lsscsi,udev 等
  • 设备识别:echo ‘—’ ,rescan-scsi-bus.sh
  • 诊断:strace,ltrace等

比如还有find 如何结合xargs ,tree的使用,lsblk 等等,还有很多很多,需要长期的积累,当然主要使用还是配置查看,LVM设置,网络

还有很多成熟的开源和商业产品进行管理,在此不一一列举,感觉可自行百度和google。

目前主流的python,ruby这些语言工具可以根据自身情况选择一个掌握。

八、诊断工具

在日常的运维过程当中,不免要进行所谓的性能或者故障方面问题的诊断,工具和手段包罗万象,在此列举一些日常使用的工具用于参考。

Pstack truss pmap gdb strace strace -o ssh.starce -Ttt -p 1983
ipcs 共享内存 ipcrm
ldd
logsave logsave /tmp/logsave.log ls 记录命令的输出到文件
lastlog 记录用户最后的登录时间 lastb 显示用户错误登录的记录
logwatch 监控分析日志信息
grpck /etc/group
pwck /etc/passwd
pidstat pidof
iostat -xdm 1
blockdev
curl 访问web测试

这里附上一幅Linux 开机流程图,这样很多人就可以更加清楚的了解了Linux在启动的整个流程,便于此类问题的解决。
CentOS 日常运维十大技能

九、网络必杀技

Netcat,SSH 几种隧道转发模式 ,lsof,dstat ,ethtool,iptraf,iperf,diag,route 和多个网卡路由及双网卡绑定技术值得了解,这些都是os层面运维网络方面经常会使用到的几个方面

在日常较为常用的操作就是进行双网卡的绑定,下面分享一个绑定的具体流程:

#1
cp /etc/sysconfig/network/ifcfg-eth0 /etc/sysconfig/network/ifcfg-eth0.bak
cp /etc/sysconfig/network/ifcfg-eth0 /etc/sysconfig/network/ifcfg-bond0
#2
vi /etc/sysconfig/network/ifcfg-eth0,注释所有(除以下两行内容),并将值修改如下:
BOOTPROTO='none'
STARTMODE='off'
#3
cp /etc/sysconfig/network/ifcfg-eth0 /etc/sysconfig/network/ifcfg-eth1
#4
vi /etc/sysconfig/network/ifcfg-bond0,增加或更新如下内容,其他内容可注释:
BOOTPROTO=static
IPADDR=172.16.0.183
NETMASK=255.255.255.0
STARTMODE=onboot
BONDING_MASTER=yes
BONDING_MODULE_OPTS='mode=0 miimon=100 use_carrier=0' #说明:以上配置mode=0为负载均衡模式,如果需要配置成主备模式,BONDING_MODULE_OPTS配置如下:'mode=1 miimon=100 use_carrier=0 primary=eth0'
BONDING_SLAVE0=eth0
BONDING_SLAVE0=eth1
#5
rcnetwork restart,重启网络服务生效,并进行测试。
#6
cat /proc/net/bonding/bond0 可以查看bonding的状态。
上一篇:Shell命令-文件及内容处理之head、tail


下一篇:linux常用命令总结