第十章 日常运维-系统管理(3)

一、iptables规则备份和恢复
二、firewalld的9个zone
三、firewalld关于zone的操作
四、firewalld关于service的操作
五、linux任务计划cron
六、chkconfig工具
七、systemd管理服务
八、unit介绍
九、target介绍

一、iptables规则备份和恢复

1.1 设定的防火墙规则只是保存在内存中,并没有保存到配置文件中,也就说当系统重启后以前设定的规则就没有了,所以
设定好规则后要先保存规则,以免重启后规则丢失。

1.2 保存和备份iptables规则

1.2.1 保存规则

#service iptables save 会把刚写入的规则保存到默认文件/etc/sysconfig/iptables中

1.2.2 备份规则:iptables-save

格式:#iptables-save > filename.ipt

1.2.3 恢复到刚才备份的规则:iptables-restore 

格式:#iptables-restore < filename.ipt

二、firewalld的9个zone

2.1 在Centos7中使用firewalld防火墙

2.1.1 关闭iptables,开启firewalld

  • # systemctl stop iptables.service   //停止iptables防火墙
  • # systemctl disable iptables.service   //取消iptables的开机启动
  • # systemctl status iptables.service   //验证iptables的状态已关闭

  • # systemctl start firewalld.service   //启动firewalld
  • # systemctl enable firewalld.service   //将firewalld设为开机启动
  • # systemctl status firewalld.service 或者firewall-cmd --state  //验证firewalld状态

2.2 firewalld的9个zones

firewalld默认的9个zone说明:
drop(丢弃) 任何接收的网络数据包都被丢弃,没有任何回复。仅能有发送出去的网络连接。
block(限制) 任何接收的网络连接都被 IPv4 的 icmp-host-prohibited 信息和 IPv6 的icmp6-adm-prohibited 信息所拒绝。
public(公共) 在公共区域内使用,不能相信网络内的其他计算机不会对您的计算机造成危害,只能接收经过选取的连接。
external(外部) 特别是为路由器启用了伪装功能的外部网。您不能信任来自网络的其他计算,不能相信它们不会对您的计算机造成危害,只能接收经过选择的连接。
dmz(非军事区) 用于您的非军事区内的电脑,此区域内可公开访问,可以有限地进入您的内部网络,仅仅接收经过选择的连接。
work(工作) 用于工作区。您可以基本相信网络内的其他电脑不会危害您的电脑。仅仅接收经过选择的连接。
home(家庭) 用于家庭网络。您可以基本信任网络内的其他计算机不会危害您的计算机。仅仅接收经过选择的连接。
internal(内部) 用于内部网络。您可以基本上信任网络内的其他计算机不会威胁您的计算机。仅仅接受经过选择的连接。
trusted(信任) 可接受所有的网络连接。

2.2.1 安装时,firewalld 里的默认zone被设定为公共区域。

查看所有zone命令:firewall-cmd --get-zones

查看默认zone:firewall-cmd --get-default-zone

三、firewalld关于zone的操作

3.1 firewalld有两个基础的概念,分别是zone和service,每一个zone里面有不同的iptables规则。
3.1.1 设定系统默认的zone
# firewall-cmd --set-default-zone=work   //设定默认zone为work
# firewall-cmd --get-default-zone   //验证设定成功
3.1.2 查看指定网卡的zone
# firewall-cmd --get-zone-of-interface=ens33     //查看指定网卡zone
3.1.3 给指定网卡设置zone
# firewall-cmd --zone=public --add-interface=ens33
# firewall-cmd --get-zone-of-interface=ens33
3.1.4 给指定网卡变更zone
# firewall-cmd --zone=public --change-interface=ens33

# firewall-cmd --get-zone-of-interface=ens33
3.1.5 删除指定网卡的zone
# firewall-cmd  --zone=public --remove-interface=ens33
# firewall-cmd --get-zone-of-interface=ens33
//删除ens33接口所在的zone,ens33接口变为默认zone

3.2 查看活动zone的列表
# firewall-cmd --get-active-zones
3.3 查看某区域下绑定的接口
# firewall-cmd --zone=work --list-interface

3.4 查看指定区域的所有设置
# firewall-cmd --zone=work --list-all


3.5 查看指定区域开放的端口
# firewall-cmd --zone=dmz --add-port=8080/tcp   //将8080端口加入dmz区域
# firewall-cmd --zone=dmz --list-ports   //验证

四、firewalld关于service的操作

4.1 一项服务可以是本地和目的地端口的列表,如果服务被允许的话,也可以是一系列自动加载的防火墙辅助模块。预先定
义的服务的使用,让客户更容易被允许或者被禁止进入服务。与对开放端口或者值域,或者端口截然不同,使用预先定
义服务,或者客户限定服务,或许能够让管理更容易。

4.2 关于service的操作

4.2.1 # firewall-cmd --get-services   //列出系统里所有的service

//或者# ls -l /usr/lib/firewalld/services/ | awk '{print $9}' | sed -r 's#(.*)\.xml$#\1#'

4.2.2 # firewall-cmd --list-services   //查看默认zone下的service

4.2.3 # firewall-cmd --zone=work --list-services   //查看指定zone下的service

4.2.4 给指定zone来添加(删除)服务
//可增加 permanent选项并重新加载防火墙,使之成为永久性设置。
//firewall-cmd --reload   ///重载防火墙不中断已建立连接
//firewall-cmd --complete-reload   //不仅仅中断您已经移除的服务,还会中断所有已经建立的连接。

①# firewall-cmd --zone=public --add-service=ftp (只是加在了内存中)或# firewall-cmd --zone=public --add-service=ftp --permanent (加在配置文件中,永久生效) //增加ftp服务
# firewall-cmd  --zone=public --list-services   //验证

②//或在/etc/firewalld/zones/public.xml文件中增加如下行
<service name="ftp"/>

#firewall-cmd --reload   ///重载防火墙

4.2.5 从指定zone移除服务
①# firewall-cmd --zone=public --remove-service=ftp  

②//或从/etc/firewalld/zones/public.xml文件中移除如下行
// <service name="ftp"/>
将添加后的服务保存到配置文件(会在/etc/firewalld/zones目录生成一个配置文件)

4.2.6 /etc/firewalld/zones目录下的配置文件说明
# ls /etc/firewalld/zones/
public.xml public.xml.old   //以.old结尾的文件类似模板,当你第一次使用permanent的时候他会重新写一份配置文件,之后添加服务都会添加到xml这个配置文件里。
4.2.7 zones模板路径:/usr/lib/firewalld/zones(9种,这些文件不能编辑)
# ls /usr/lib/firewalld/zones/
block.xml drop.xml home.xml public.xml work.xml
dmz.xml external.xml internal.xml trusted.xml

注:# ls /etc/firewalld/zones/   //默认区的文件
public.xml public.xml.old
//如需加入工作区文件,需将/usr/lib/firewalld/zones中文件复制到/etc/firewalld/zones/
#cp /usr/lib/firewalld/zones/work.xml /etc/firewalld/zones/    // /etc/firewalld/zones/work.xml可编辑
 

扩展练习:
需求:ftp服务自定义端口改为1121,在work zone下面放行ftp

#cp /usr/lib/firewalld/zones/work.xml /etc/firewalld/zones/

在文件中把端口改为1121

增加一行:<service name="ftp"/>

#firewall-cmd --reload   ///重载防火墙

总结:zone是一个规则集合,每个zone下面有不同的service,而每个sevice下面可以设定不同的服务(如ftp、http),
service也是可以自定义的。(多数是端口)

五、linux任务计划cron
5.1 对于需要周期性执行的任务可以使用crontab命令,该命令所使用的服务是crond。因此在使用之前一定要先启动crond服
务。

5.2 查看crond服务状态

# systemctl status crond.service

//如果没有启动,则通过systemctl start crond.service 命令启动
当使用者执行crontab命令时,系统会按如下步骤操作

  • 1.先查找/etc/corn.allow文件,在该文件中存在的用户可以使用crontab,不在该文件中的用户不能使用crontab(即使用没
  • 有写在/etc/cron.deny中)
  • 2.如果没有/etc/cron.allow就寻找/etc/cron.deny文件,在该文件中存在的用户不能使用crontab,在该文件中不存的用户就
  • 可以用crontab
  • 3.如果两个文件都不存在,则只有root可以使用crontab。
  • 4.多数linux版本默认的文件是/etc/cron.deny,而且该文件为空
  • # ls /etc/cron.*
  • # cat /etc/cron.deny


5.3 crontab建立例行性任务的方式
5.31.针对用户的例行性任务,用crontab -e命令来管理任务
5.3.2 针对系统的例行性任务,可以通过/etc/crontab文件来管理任务
针对用户的例行性任务
语法: crontab [-u username] [-e][-l][-r][-u]
选项说明
-u:只用root才有权限使用这个参数,用于帮助其他用户建立或删除crontab
-e:进入配置文件
-l:查看crontab的工作内容
-r:移除crontab的工作内容,如果要删除某一项的内容,只能使用crontab -e进入配置文件手动删除
crontab的模式是:分 时 日 月 周 命令
分范围0-59,
时范围0-23,
日范围1-31,
月范围1-12,
周1-7
"-"表示一个时间段范围,可用格式1-5,表示一个范围1到5
","表示分割时段的意思,可用格式1,2,3,表示1或者2或者3
"*"表示任何时间都能够接受,任何时间都可以执行该命令可用格式。"/n"代表每隔n个时间单位。*/2表示被2整除的数字,
比如小时,那就是每隔2小时

5.4 操作

5.4.1 查看计划任务列表: crontab -l
5.4.2 添加计划任务: crontab -e
//使用方式类似vim
//格式: 分 时 日 月 周 用户 命令
//命令最好使用绝对路径

例:

  • //每天凌晨三点,执行123.sh脚本文件,正确的和错误的日志都输出到123.log文件中

0 3 * * * /bin/bash /usr/local/sbin/123.sh >/tmp/123.log 2>/tmp/123.log

  • //因为是每天三点执行脚本,所以可以写成追加,每天都去记录日志

0 3 * * * /bin/bash /usr/local/sbin/123.sh >>/tmp/123.log 2>>/tmp/123.log

  • //若想1-10号,双月去执行该脚本,后面就不在执行了——>只要 被2 整除,就符合条件

0 3 1-10 */2 * /bin/bash /usr/local/sbin/123.sh >>/tmp/123.log 2>>/tmp/123.log

  • //只要周2和周5执行该文件

0 3 1-10 */2 2,5 /bin/bash /usr/local/sbin/123.sh >>/tmp/123.log 2>>/tmp/123.log
5.4.3 删除计划任务: crontab -r
5.5 针对系统的例行性任务,直接编辑/etc/crontab。基本上这个服务的最低侦测限制是分钟。cron会每分钟读取一次/etc/crontab与/var/spool/cron里的资料内容。
# cat /etc/crontab
//PATH表示输入执行文件的搜索路径
//MAILTO表示/etc/crontab中命令发生错误时或执行结果有STDOUT/STDERR时,发送一封邮件给用户
5.5.1 /etc/crontab文件中的命令支持两种执行命令的方式

①直接执行命令

# crontab -e
//用法和vim差不多
②目录规则
//以建立一个每隔5分钟执行一次的命令为例
//建立/root/five目录
# mkdir /root/five
# vim /etc/crontab
//增加*/5 * * * *root runparts /root/file

注:格式中为何没有年份?
因为用星期就可以确定日期的唯一性,比如说今年的6月18号和明年的6月18号的星期肯定是不同的,这样就可以确定某一天的唯一性。

任务计划不执行的原因分析:
不执行的原因很有可能是你写的脚本里面,没有使用绝对路径导致不执行。如果你使用的命令不在PATH里面,就无法找到该命令。所以要么将命令写一个绝对路径,要么将命令的路径加入到PATH变量里面去。
建议:
命令都用绝对路径的形式
写脚本的时候,添加日志记录功能。

六、chkconfig工具
6.1 Centos6及以前版本系统中运行级别
等级0表示:表示关机
等级1表示:单用户模式
等级2表示:多用户模式,少nfs服务
等级3表示:多用户模式,不带图形
等级4表示:是一种保留的级别
等级5表示:带图形界面的多用户模式
等级6表示:重新启动
在centos6中的 /etc/inittab 中定义开机的默认运行级别
在centos7中,已经没有用运行级的概念了,只是为了向上兼容。系统服务的脚本存放在 /etc/init.d/ 下面


6.2 chkconfig命令主要用来查询或设置系统服务的运行级别,但是并不会立即启动或停止一个服务。chkconfig主要用在
Centos6及以前的系统中,Centos7中使用的比较少,已经在向systemd过渡。
用法:chkconfig [--list][--type类型] [名称]
chkconfig --add 名称
chkconfig --del 名称
chkconfig --override 名称
chkconfig [--level级别] [--type类型] 名称 on|off|resetpriorities
6.3 命令使用

6.3.1 显示系统服务列表
# chkconfig --list


6.3.2 关闭指定服务的自动启动
# chkconfig mysql off
# chkconfig --list mysql


6.3.3 指定服务在某一运行级的关闭与开启
# chkconfig mysql off --level 2   //要2级别关闭
# chkconfig --list mysql

//开启
# chkconfig mysql on --level 2
# chkconfig --list mysql

6.4 0和1和6级别不能设置成开启
0级别在关机状态是不可能开启的
1级别是单用户模式,服务是不可能开启的
6级别在重启的时候,是不可能开启的——>重启相当于先关闭在启动(重启的那一刻是先关闭才对)。
一个脚本加入到服务列表中
首先该启动脚本要放入到 /etc/init.d 这个目录下——>只有在这个目录下,才可以添加到服务列表中去。

其次脚本格式有如下要求
1.是一个shell脚本
2.固定格式:
//启动和关闭顺序自己定义即可,这里是 64 36
# chkconfig: 2345 64 36
# description: A very fast and reliable SQL database engine.
最后用chkconfig add将相应的脚本加入到服务列表
# chkconfig --list
# chkconfig --add mysql

# chkconfig --list   //验证

删除服务列表中的服务
# chkconfig --del mysql
# chkconfig --list

七、systemd管理服务
7.1 Systemd 是 Linux 系统中最新的初始化系统(init),它主要的设计目标是克服 sysvinit 固有的缺点,提高系统的启动速
度。
systemd 的目标是:
尽可能启动更少的进程
尽可能将更多进程并行启动

7.2 查看systemd信息
7.2.1 # systemctl list-dependencies   //显示单元依赖关系


7.2.2 # systemctl list-sockets   //显示sockets信息和哪些是活动的


7.2.3 # systemctl list-jobs   //查看活动的system任务
7.2.4 # systemctl list-unit-files   //查看单元文件及状态


7.2.5 # systemctl list-units   //显示单元是否载入及状态


7.2.6 # systemctl get-default   //显示默认的目标

7.3 管理服务
7.3.1 # systemctl list-units --all --type=service   //列出所有的服务
7.3.2 # systemctl status firewalld.service   //查看服务状态
7.3.3 # systemctl stop firewalld.service   //停止服务
7.3.4 # systemctl start firewalld.service   //启动服务
7.3.5 # systemctl restart firewalld.service //重启服务
7.3.6 # systemctl reload firewalld.service   //重载服务的配置文件
7.3.7 # systemctl disable firewalld.service   //将服务取消开机自动启动
7.3.8 # systemctl enable firewalld.service   //将服务设置为开机自动启动
7.3.9 # systemctl is-enabled   //检查是否开机启动
7.3.10 # systemctl show firewalld.service   //显示服务或单元详细信息

7.4 改变系统状态
systemctl reboot   //重启
systemctl poweroff   //关机
systemctl emergency   //进入紧急模式
systemctl default   //恢复默认目标

7.5 查看日志消息
# journalctl   //显示收集的所有日志消息


7.6 查看网络服务的消息
# journalctl -u network.service

7.7 动态跟踪消息(类似于tail -f /var/log/message)
# journalctl -f

7.8 仅仅显示内核消息
# journalctl -k


八、unit介绍
系统初始化需要做的事情非常多。需要启动后台服务,比如启动 SSHD 服务;需要做配置工作,比如挂载文件系统。这
个过程中的每一步都被 systemd 抽象为一个配置单元,即 unit。可以认为一个服务是一个配置单元;一个挂载点是一个
配置单元;一个交换分区的配置是一个配置单元;等等。

8.1 systemd 将配置单元归纳为以下一些不同的类型:
service 系统服务
target 多个unit组成的组
device 硬件设备
mount 文件系统挂载点
automount 自动挂载点
path 文件或路径
scope 不是由systemd启动的外部进程
slice 进程组
snapshot systemd快照
socket 进程间通信套接字
swap swap文件
timer 定时器
8.2 systemd中与unit相关的命令
8.2.1 # systemctl list-units   //列出正在运行的unit


8.2.2 //若要列出所有的units,则需要加 --all
列出所有,包括失败的或者inactive的
# systemctl list-units --all


8.2.3 列出inactive的unit
# systemctl list-units --all --state=inactive


8.2.4 列出状态为active的service
# systemctl list-units --type=service
//其中failed是一个特例,也会列出来


8.2.5 查看某个服务是否为active
# systemctl is-active firewalld.service


九、target介绍
在Centos7之前的版本,使用运行级别代表特定的操作模式。运行级别被定义为七个级别,用数字0到6表示,每个级别可
以启动特定的一些服务。Centos7使用target替换运行级别。
9.1 一个service属于一种类型的unit
多个unit组成了一个target
一个target里面包含了多个service
9.2 列出系统中所有的target
# systemctl list-unit-files --type=target


9.3 查看指定target下面有哪些unit
# systemctl list-dependencies multi-user.target


9.4 查看所有的target
# systemctl list-units --type=target --all


9.5 查看系统默认的target
# systemctl get-default 
9.6 设置默认的target
# systemctl set-default multi-user.target


9.7 查看服务属于哪个target
#cat /usr/lib/systemd/system/sshd.service 看[install]部分


十、扩展
扩展链接:
Anacron
https://www.jianshu.com/p/3009a9b7d024?from=timeline
xinetd守护进程
http://blog.sina.com.cn/s/blog_465bbe6b010000vi.html
systemd自定义启动脚本
http://www.jb51.net/article/100457.htm
参考:
http://www.jinbuguo.com/systemd/systemd.html
http://mtoou.info/hingsystemd/
http://fedoraproject.org/wiki/Systemd/zhcn
https://www.ibm.com/developerworks/cn/linux/1407_liuming_init3/index.html
https://www.freedesktop.org/wiki/Software/systemd

猜你喜欢

转载自blog.csdn.net/dwy2018/article/details/82193845
今日推荐