Centos7针对不同的服务提供了大量的命令设定模式。另外,万一你的Linux主机被cracker入侵、或是由于硬件损坏而挂掉了,这时候如何快速恢复系统呢?
文件与数据是最值钱的东西!
1、系统基本设置
包括语系、日期、时间、网络等,在centos6.x前可以使用setup这个图形界面来设置。但在Centos7.x就不同了。因为Centos7.x已经将很多软件的指令做的很好了。
1.1、网络设置(static与DHCP)
手动设置IP(static)
IP;
netmask;
gateway;
DNS;
自动获取(DHCP)
只需设置网卡上网方式为DHCP即可;
快捷DHCP命令:dhclient
目前主流的网卡是使用以太网协议开发出来的以太网卡(Ethernet),因此Linux称呼这种网络介质为ethN(N为数字)如eth0为我的第一张网卡。
Centos7开始对网卡编号有了另一套规则,网卡的界面代号现在与网卡的来源有关。基本上网卡名称会是这样分类的:
eno1:代表由主板BIOS内建的网卡;
ens1:代表由主板BIOS内建的PCI-E界面的网卡;
enp2s0:代表PCI-E界面的独立网卡;
eth0:如果上述名称都不适用则会到默认编号;
ifconfig -a #显示出全部网卡
手动设置IP网络参数
手动设置IP、netmask、gateway、DNS等等。然后通过nmcli来处理!你得知道nmcli是通过一个连接代号的名称来设置是否要上网,而每个连接代号会有个网卡代号,这两个东西通常设置为相同就是了。
#nmcli(command-line tool for controlling NetworkManager)
nmcli connection show
name #就是连接代号,通常与后面网卡DEVICE一样;
UUID #这个是特殊的设备识别,不用管它;
TYPE #这是网卡类型(802.3以太网);
DEVICE #网卡名称
nmcli connection show eth0
比较重要的几个参数:
connection.autoconnect [yes|no]:是否开机时启动这个连接,默认通常是yes;
ipv4.method [auto|manaual] #自动还是手动设置网络参数;
ipv4.dns [dns_server_ip] #DNS的地址;
ipv4.addresses [ip/netmask] #就是ip/netmask的组合形式;
ipv4.gateway [gw_ip] #网关地址;
nmcli connection modify eth0\ ipv4.geteway 1.1.1.1 \ xxx
nmcli connection up eth0
nmcli connection show eth0
自动获取IP
如果网络是由DHCP协议所分配,那就只需要将ipv4.method改为auto就行。
主机名修改
hostnamectl sethostname zhang.centos7
1.2、日期与时间设置
时区的显示与设置
地球是圆的,每个时刻每个地方的时间都不一样。为了统一时间,就有所谓的“GMT”(格林尼治时间)。通过 timedatectl 命令查看目前时区及其设置。
timedateclt
#CST 北京时间;
#UTC UTC时间,也可称为格林尼治标准时间;
#Timezone 时区;
#NTP ntp网络时间同步;
timedatectl list-timezones | grep -i shanghai #查找上海时区是否存在
timedatectl set-timezone Asia/Shanghai #设置时区
时间的调整
timedatectl set-time "year-month-day hour:min:sec"
过去使用 "date" 命令修改日期后,还得要使用 hwclock 去修正BIOS记录的时间。而 timedatectl 只要设置过后就搞定,方便很多。
用ntpdate手动网络校时
因为系统默认的NTP自动网络校时会启动NTP协议相关软件,会多开几个port,因此可以利用ntpdate手动校时,写入crontab也不错。
ntpdate timeserver # timeserver位所在地区提供的标准时间服务器
ntpdate cn.pool.ntp.org
hwclock -w #将正确的时间写入BIOS内
crontab -e
59 23 * * * /sbin/ntpdate cn.pool.ntp.org
1.3、语系设置
可以使用LANG或locale查看目前语系信息,其实/etc/locale.conf就是语系的配置文件。此外,系统的语系可能与你使用的软件的语系是可以不一样的。此外,还可以使用localectl命令来查看:
localectl #系统语系
locale #软件语系
localectl
set-locale LOCALE... #设置系统语系
list-locales #查询系统语系
localectl set-locale LANG=zh_CN.utf8
systemctl isolate multi-user.target
#systemctl isolate graphical.target
#isolate NAME Start one unit and stop all others
1.4、防火墙简易设定
防火墙其实是一种网络资料的过滤方式,它可以依据你服务器启动的服务来设置是否放行,也能够针对你信任的用户来放行。包括图形界面的防火墙配置合命令行界面的防火墙配置。
firewall-cmd --help #命令太多了
2、服务器硬件信息查看
升级或更换你的主机硬件的时候,你的主板插槽还够吗?内存支持到多大?需要DDR3还是DDR4等等?如果不想拆机,那如何利用软件去查看?
2.1、以系统内建的 dmidecode 解析硬件设备
系统内建的 dmidecode 软件可以解析CPU、主板、内存等相关型号,尤其在我们硬件升级上相当有帮助。
dmidecode -t
dmidecode -t 1
Tips:先使用dmidecode查看主机版型插槽规格,在购买需要的硬件。
2.2、硬件资源的收集与分析
系统硬件是由操作系统所管理的,Linux kernel在开机时就能够检测硬件并载入适当的模块来驱动硬件。而内核所检测到的各项硬件设备,后来就会被记录在/proc与/sys当中。包括/proc/cpuinfo,/proc/partitions,/proc/interrupts等等。
除了直接查看/proc下面的文件内容外,Linux有提供几个简单的指令来将内核所检测到的硬件叫出来。常见的指令如下:
gdisk #可使用 gdisk -l将分割表列出;
dmesg #查看内核运作过程当中输出的各项信息;
vmstat #分析系统(CPU/RAM/IO)目前的状态;
lspci #列出整个主机系统的PCI设备,详细列出目前的硬件设备的详细信息;
lsusb #列出目前系统上面各个USB接口的状态;
iostat # 及时列出整个CPU与周边设备的I/O状态;
lspci -s 02:03.0 -vv #查看这个设备的详细信息
#这串数字代表设备的汇流排、 插槽与相关函数功能。可通过对比/usr/share/hwdata/pci.ids文件来了解该串数字的意义。
update-pciids #使用该命令来更新pci.ids文件
avg-cpu:显示CPU的当前信息;
tps:平均每秒钟的传输次数;
KB_read/s:开机到现在平均的读取单位;
KB_wrtn/s:开机到现在平均的写入单位;
KB_read:开机到现在,总共读取的文件单位;
KB_wrtn:开机到现在,总共写入的文件单位;
通过 lspci 和 iostat 可以简略的了解到目前系统的状态还有目前主机硬件资料。
2.3、了解磁盘的健康状况
其实 linux Server 最重要的就是“文件安全”了,而文件都是放在磁盘中。所以需要时刻了解磁盘健康状况。
这个就得说一下 smartd 的服务。
smart(Self-Monitoring,Analysis and Reporting Technology System),主要用来监控目前的ATA与SCSI界面的磁盘。只是被监控的磁盘必须要支持smart协议才行,否则smartd就无法下达指令,让磁盘进行自我健康检查。VMware虚拟机暂不支持这个功能。
smartctl #smartd提供的命令
smartctl -a /dev/sda #显示全部磁盘信息
smartctl -t /dev/sda #让磁盘进行一次自检
#因为在磁盘自检时I/O会比较高,因此不建议在系统忙碌的时候进行
3、备份要点
备份是个很重要的工作,备份是系统损毁时等待救援的救星!此外,哪些文件最需要备份呢?备份使用什么设备呢?
3.1、备份资料的考虑
事实上,系统可能会由于不预期的伤害而导致系统发生错误。如硬件故障、软件故障、cracker入侵、认为操作不当等因素所致。
备份因素考虑:
备份哪些文件;
选择什么备份的设备; #同一磁盘不同分区,另一个磁盘,还是网络备份?哪一种最快,最便宜,保存的最久?
考虑备份的方式; #完整备份还是仅差异备份
备份的频率;
备份使用的工具; #tar,dump,dd,cpio等
3.2、备份哪些Linux数据
一般来说,备份最重要的数据而不用整个系统都备份。具有备份意义的文件通常分为两类,一类是系统基本配置文件,一类则是数据信息。
操作系统本身需要备份的文件:
账号与系统配置文件 ;
用户主目录,邮件目录等;
/etc/* #基本上Linux默认的重要参数都放在/etc/下;
/home/*;
/var/spool/mail/;
/var/spoll/{ at|cron };
/boot/;
/root/;
如果额外安装了其他软件/usr/local或/opt也可以备份一下;
网络服务的数据库方面:
如果你的网络软件安装都是以原厂提供的为主,那么配置文件大多是在/etc下;如果大多来自自行安装,那么/usr/local这个目录就十分重要了。
软件本身的配置文件,如/etc/,/usr/local/;
软件服务提供的服务,如WWW;
WWW数据,/var/www或/srv/www,以及系统用户主目录;
数据库,MySQL,Mongo,Redis等;
推荐备份的目录:
/etc;
/home;
/root;
/var;
/usr/local;
3.3、选择备份设备
需要考虑备份的磁盘被盗,容量,速度或其他问题。
异地备份系统,就是将你备份的数据放到其他地方去,缺点就是需要一定的带宽;
存储设备的考虑,对速度要求真么样,对存储容量大小需要多少;
4、备份的种类、频率与工具的选择
备份可粗略分为 “增量备份”和“差异备份”这两种。如果你想在系统出错时重新安装更新的系统时,仅备份关键数据也就可以了。
4.1、完整备份的增量备份(Incremental backup)
还原系统的考虑:
如果是完整备份,当系统损毁时,只要将完整备份拿出来,整个给它倒回去,连同重要的Linux系统文件等,所以不用重新安装!因此很多企业用来提供重要服务的主机都会使用完整备份,可以架设出一部一模一样的机器来。
增量备份的原则:
我们的系统用的越久,数据量就越巨大。如此一来,完整备份所需要花费的时间与存储设备的使用就会相当麻烦。所以,完整备份并不会也不太可能每天都进行。那么每天都需要备份的数据该如何进行呢?有两种方式,一种是增量备份,一种是差异备份。
所谓的增量备份,指的是系统在进行第一次完整备份后,经过一段时间的运作,比较系统与备份文件之间的差异,仅备份有差异的文件。而第二次增量备份则与第一次增量备份的数据比较,也是仅备份有差异的文件而已。
由于每次仅与前一次的备份文件比较,因此备份的资料就会少很多。
那如何还原?如在第三次备份后系统挂掉了,那首先必须还原到完整备份,再到第二次,再到第三次。
增量备份使用的软件:
完整备份常用的工具有dd,cpio,xfsdump/xfsrestore等等。
dd可以直接读取磁盘的磁区而不用理会文件系统,是相当良好的备份工具;
cpio是能够备份所有文件名,不过,得要配合find或其他文件名的命令才能处理妥当。
增量备份就得要额外使用脚本程序来处理了。可以直接进行增量备份的就是xfsdump这个指令。
举个栗子:
dd if=/dev/sda of=/dev/sdb
# 用dd来将/dev/sda备份到完全一模一样的/dev/sdb磁盘上
#由于dd是读取磁区,所以/dev/sdb这颗磁碟可以不必格式化!非常的方便!
#同理,dd也可用于刻录系统
# 只是你会等非常非常久!因为dd 的速度比较慢!
find / -print | cpio -covB > /dev/st0 #备份到st0
cpio -iduv < /dev/st0 #还原
假设/home为一个独立的文件系统,而/backupdata也是一个独立的用来备份的文件系统,那如何使用dump将/home完整备份到/backupdata呢?
xfsdump -l 0 -L 'full' -M 'full' -f /backupdata/home.dump /home #完整备份
xfsdump -l 1 -L 'full-1' -M 'full-1' -f /backupdata/home.dump1 /home
其实tar也可以用来进行完整备份。假设/backupdata是个独立的文件系统,你想要将整个系统除/proc,/tmp目录外都备份。
tar --exclude /proc --ecclude /tmjp -jcvp -f /backupdata/bakupsystem.tar.bz2 /
#exclude(排除)
4.2、完整备份的差异备份(Differential backup)
差异备份与累积备份有点类似,也是需要进行第一次的完整备份后才能够进行,只是差异备份指的是:每次的备份都是与原始的完整备份比较的结果。所以系统运作越久,离完整备份时间越长,那么该次的差异备份文件可能就越大。
如果是使用xfsdump的话,那么每次备份的等级(level)就都是level 1,tar则要使用-N选项。
tar -N '2017-06-06' -jpcv -f /backupdata/home.tar.bz2 /home
#只要在比20170606还要新的在/home目录下文件才会被打包进home.tar.bz2中;
#目录还是会被记录下来,但是目录内旧的文件不会备份;
此外,也可以通过rsync命令来进行镜像备份。rsync可以对两个目录进行镜像(mirror),是一个非常快速的备份工具。
rsync -av 源 目 #sync(同步)
rsync -av /home /backupdata/
rsync -av /home /backupdata/ #再次进行会快很多。如果文件没有变动,几乎不会进行任何动作!
4.3、关键数据备份
完整备份虽然有许多好处,但就是需要花费很多时间。仅备份关键数据就好。如果备份当时系统已经被攻破,那么背后的文件是有问题的,还原回去也是有问题的系统。
不过,备份关键数据最麻烦的地方其实就是还原。尤其在SELinux方面的安全性。
备份关键文件推荐使用tar,如果想要分门别类将各种服务的不同的时间备份使用不同的文件名,配合date指令是非常好用的。
tar -jpcvf mysql. `date +%Y%m%d`.tar.bz2 /var/lib/mysql
备份是非常重要的工作,你可不希望想到时才进行吧。交个系统自动处理就对啦。自己便是script,配合crontab执行。
5、备份策略
每部主机的任务都不相同,重要性也不一样,因此每个人的备份思考角度都不一样!但有些备份策略是非常有趣的,包括使用多个磁盘来自动备份企业数据。
鸟哥的想法 ------>并不需要把整个系统完整的备份下来,因为太耗时了。而且也没有这个必要,所以通常只需要备份重要的文件就够了。一个是每日备份经常性变动的重要数据,一个是每周备份不常变动的数据。所以就需要写两个scripts。
vi ~/backupday.sh
vi ~/backupwk.sh
vi /etc/crontab
#有些时候,在进行备份时,备份的文件可能同时被其他的网络服务所修改暂用,此时可能就会发生一些错误。可以再备份前先关掉这个服务,备份完成后再启动。
/etc/crontab #这种方法只有root能用,这种方法更加方便与直接给其他用户设置计划任务;
crontab -e #这种方式所有用户都可以使用;
crontab -e 是某个用户的周期性任务,/etc/crontab是系统的周期性任务;
5.1、远程备份的script
如果有两台以上的Linux主机,那么互相将对方的重要数据保存一份在自己的系统中也是不错的想法。这样的话就可以通过sshd这个网络服务。
使用rsync上次备份数据。由于rsync可以通过ssh来进行镜像备份,所以没有变更的数据将不需要上传,sshd本身是加密的,就比ftp要好些。
6、灾难恢复的考虑
备份就是为了防止系统挂掉,但如果系统真的挂了,那么该如何进行还原系统呢?
硬件损坏且具有完整备份的数据时:
更换好硬件,之后将备份的系统还原回去就好了。
由于软件的问题产生的被攻破安全事件:
既然系统的损毁是由于被攻击,此刻就算恢复到了正常的系统,那么系统依然存在被攻破的风险。最好进行如下操作:
1,断网,将系统完整备份到其他设备上,以备查验;
2,查阅日志文件,尝试找出各种可能的问题;
3,安装新系统;
4,系统升级与防火墙规则的指定;
5,修复日志文件中存在的bug;
6,进行各项服务与相关文件的恢复;
7,正式上线提供服务,并开始测试。
系统安全造成的问题可大可小,一定要找出问题并予以解决。