2018-06-13 (第十五课)

2018-06-15  本文已影响0人  chocolee911

目录

  1. iptables 规则的备份与恢复
    1.1 iptables 规则的保存
    1.2 iptables 规则的备份:iptables-save
    1.3 iptables 规则的还原:iptables-restore
  2. firewalld
    2.1 关闭 iptables,启动 firewalld
    2.2 firewalld 的9个 zone
    2.3 对 zone 的操作
    2.4 对 service 的操作
    2.5 示例
  3. crontab
    3.1服务的操作
    3.2 相关文件
    3.3 选项
    3.4 示例
  4. chkconfig
    4.1 相关文件
    4.2 相关命令
  5. systemd
    5.1 什么是systemd
    5.2 systemd 下的服务管理命令
    5.3 unit
    5.4 target\
  6. 扩展知识

1. iptables 规则的备份与恢复

使用命令在 iptables 中改动了规则后,如果不进行规则的保存,重启服务后修改的规则将失效。如果要永久改变规则,可以手动修改 /etc/sysconfig/iptables 文件或者使用命令将当前的规则保存至该文件中。

1.1 iptables 规则的保存:service iptables save

[root@localhost ~]# iptables -nvL
Chain INPUT (policy ACCEPT 54 packets, 3980 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 DROP       all  --  *      *       1.1.1.1              0.0.0.0/0           

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 37 packets, 3756 bytes)
 pkts bytes target     prot opt in     out     source               destination    
[root@localhost ~]# cat /etc/sysconfig/iptables
# sample configuration for iptables service
# you can edit this manually or use system-config-firewall
# please do not ask us to add additional ports/services to this default configuration
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
[root@localhost ~]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]

这回再看一下配置文件,已经保存进来了
[root@localhost ~]# cat /etc/sysconfig/iptables
# Generated by iptables-save v1.4.21 on Fri Jun 15 08:40:18 2018
*filter
:INPUT ACCEPT [128:9758]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [94:9932]
-A INPUT -s 1.1.1.1/32 -j DROP
COMMIT
# Completed on Fri Jun 15 08:40:18 2018

1.2 iptables 规则的备份:iptables-save

[root@localhost ~]# iptables-save > /tmp/ipt.txt
[root@localhost ~]# cat /tmp/ipt.txt
# Generated by iptables-save v1.4.21 on Fri Jun 15 08:47:31 2018
*filter
:INPUT ACCEPT [256:19623]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [185:18672]
-A INPUT -s 1.1.1.1/32 -j DROP
COMMIT
# Completed on Fri Jun 15 08:47:31 2018

1.3 iptables 规则的还原:iptables-restore

[root@localhost ~]# iptables -nvL
Chain INPUT (policy ACCEPT 22 packets, 1660 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 16 packets, 1468 bytes)
 pkts bytes target     prot opt in     out     source               destination         
[root@localhost ~]# iptables-restore < /tmp/ipt.txt 
[root@localhost ~]# iptables -nvL
Chain INPUT (policy ACCEPT 24 packets, 1688 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 DROP       all  --  *      *       1.1.1.1              0.0.0.0/0           

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 15 packets, 1428 bytes)
 pkts bytes target     prot opt in     out     source               destination         

2. firewalld (该章仅做好上课笔记,内容暂时还不太会用到)

2.1 关闭 iptables,启动 firewalld

[root@localhost ~]# systemctl stop iptables
[root@localhost ~]# systemctl disable iptables
Removed symlink /etc/systemd/system/basic.target.wants/iptables.service.
[root@localhost ~]# systemctl enable firewalld
Created symlink from /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service to /usr/lib/systemd/system/firewalld.service.
Created symlink from /etc/systemd/system/multi-user.target.wants/firewalld.service to /usr/lib/systemd/system/firewalld.service.
[root@localhost ~]# systemctl start firewalld
[root@localhost ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: active (running) since Fri 2018-06-15 08:53:57 CST; 9s ago
     Docs: man:firewalld(1)
 Main PID: 1256 (firewalld)
   CGroup: /system.slice/firewalld.service
           └─1256 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid...

Jun 15 08:53:57 localhost.localdomain systemd[1]: Starting firewalld - dyn...
Jun 15 08:53:57 localhost.localdomain systemd[1]: Started firewalld - dyna...
Hint: Some lines were ellipsized, use -l to show in full.

2.2 firewalld 的9个 zone

firewalld 默认有 9 个 zone(zone是firewalld的单位),其实有点类似防火墙设备中的安全域

默认 zone 为 public

2.3 对 zone 的操作

2.4 对 service 的操作

2.5 示例

FTP 服务器自定义端口 1121,需要在 work zone 下面放行 FTP

cp /usr/lib/firewalld/services/ftp.xml /etc/firewalld/services
vi /etc/firewalld/services/ftp.xml
cp /usr/lib/firewalld/zones/work.xml
vi /etc/firewalld/zones/work.xml
<service name="ftp"/>
firewall-cmd --reload
firewall-cmd --zone-work --list-services

3. crontab

总有些任务需要定期执行,并且执行时用户可能并不在操作电脑,此时就要用到 Linux 的定时任务管理器—— crontab

3.1 服务的操作

3.2 相关文件

3.2.1 /etc/crontab:可在该文件中配置 crontab 任务,但权限仅限 root

用户

[root@localhost ~]# vim /etc/crontab 

  1 SHELL=/bin/bash
  2 PATH=/sbin:/bin:/usr/sbin:/usr/bin
  3 MAILTO=root
  4 
  5 # For details see man 4 crontabs
  6 
  7 # Example of job definition:
  8 # .---------------- minute (0 - 59)
  9 # |  .------------- hour (0 - 23)
 10 # |  |  .---------- day of month (1 - 31)
 11 # |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
 12 # |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,we    d,thu,fri,sat
 13 # |  |  |  |  |
 14 # *  *  *  *  * user-name  command to be executed

ps:crond 中的任务执行时,并不会调用用户自身的环境变量,它有自己的环境变量,当你用到一些需要特殊配置 PATH 变量才能使用的命令时,手工执行脚本往往是正常的,但用 crond 执行的时候就不行了,这时你要么写完整的绝对路径,要么将环境变量添加到 /etc/crontab 中

3.2.2 /var/spool/cron:所有用户的定时任务都放置在该目录下,且每个用户的定时任务配置文件以该用户的用户名命名
[root@localhost ~]# 
[root@localhost ~]# ll /var/spool/cron/
total 8
-rw------- 1 chocolee911 chocolee911 36 Jun 15 09:43 chocolee911
-rw------- 1 root        root        30 Jun 15 09:38 root

3.3 选项

[root@localhost ~]# crontab -e

      1 */1 * * * * root ls /
[root@localhost ~]# crontab -l
*/1 * * * * chocolee911 ls /
[root@localhost ~]# crontab -r
[root@localhost ~]# crontab -l
no crontab for root

上述的“增删查”仅能针对当前的用户,如果想设置其他用户的定时任务,可以使用 -u <username> 进行指定

[root@localhost ~]# crontab -l
no crontab for root
[root@localhost ~]# crontab -u chocolee911 -l
*/2 * * * * chocolee911 /usr/bin ls
*/10 * * * * chocolee911 ifconfig

ps:在制定 cron 任务时,有要求填写用户名(比如说A),但那个用户名(A)仅仅是说明执行任务时是以哪个用户(A)的权限进行执行,但 cron 任务仍然是制定任务的用户(B)的。此时在 /var/spool/cron/A 中是看不到该任务的,同样的,使用 crontab -u A -l 也是看不到这条任务的

3.4 示例

crontab 的重点在于时间的灵活配置上,下面将以一些示例进行说明

30 21 * * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每晚的21:30重启apache。

45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每月1、10、22日的4 : 45重启apache。

10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每周六、周日的1 : 10重启apache。

0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示在每天18 : 00至23 : 00之间每隔30分钟重启apache。

0 23 * * 6 /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每星期六的11 : 00 pm重启apache。

* */1 * * * /usr/local/etc/rc.d/lighttpd restart
每一小时重启apache

* 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart
晚上11点到早上7点之间,每隔一小时重启apache

0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart
每月的4号与每周一到周三的11点重启apache

0 4 1 jan * /usr/local/etc/rc.d/lighttpd restart
一月一号的4点重启apache


4. chkconfig

设定某个服务在系统的哪个 runlevel 中会启用

4.1 相关文件

# chkconfig: <runlevel> <start_seq> <stop_seq>
# description:.......

其中,chekconfig行后面的数字分别代表:启用该服务的runlevel、第几个被启动、第几个被关闭。description行为服务的描述

[root@localhost ~]# vim /etc/init.d/network 

  1 #! /bin/bash
  2 #
  3 # network       Bring up/down networking
  4 #
  5 # chkconfig: 2345 10 90
  6 # description: Activates/Deactivates all network interfaces configured to     \
  7 #              start at boot time.

4.2 相关命令

[root@localhost system]# chkconfig

Note: This output shows SysV services only and does not include native
      systemd services. SysV configuration data might be overridden by native
      systemd configuration.

      If you want to list systemd services use 'systemctl list-unit-files'.
      To see services enabled on particular target use
      'systemctl list-dependencies [target]'.

netconsole      0:off   1:off   2:off   3:off   4:off   5:off   6:off
network         0:off   1:off   2:on    3:on    4:on    5:on    6:off


5. systemd

5.1 什么是systemd

CentOS 7 之前的版本,都是采用 init 进程来启动服务的,但是这种方法有两个缺点

  1. 启动时间长。init 进程是串行启动,只有前一个进程启动完,才会启动下一个进程。
  2. 启动脚本复杂。init 进程只是执行启动脚本,不管其他事情。脚本需要自己处理各种情况,这往往使得脚本变得很长。

systemd 就是为解决这两个问题而诞生的,其设计目标是:“提供更优秀的框架以表示系统服务间的依赖关系,并依此实现系统初始化时服务的并行启动,同时达到降低Shell的系统开销的效果”

在CentOS7 中,systemd 已经取代 init,但为了进行平滑过渡,仍然可以使用 init 类的命令来启动服务

5.2 systemd 下的服务管理命令

5.3 unit

Systemd 可以管理所有系统资源,不同的资源统称为 Unit(单位)

看一下当前系统都有哪些 unit

[root@localhost system]# ls
basic.target.wants                           local-fs.target.wants
dbus-org.fedoraproject.FirewallD1.service    multi-user.target.wants
dbus-org.freedesktop.NetworkManager.service  network-online.target.wants
dbus-org.freedesktop.nm-dispatcher.service   sysinit.target.wants
default.target                               system-update.target.wants
default.target.wants                         vmtoolsd.service.requires
getty.target.wants

unit 的分类

5.4 target

5.4.1 target 的概念

启动计算机的时候,需要启动大量的 unit。如果每一次启动,都要写明本次启动需要哪些 unit,会很麻烦。而 systemd 的解决方案就是 target。

target 其实就是一组 unit,这个组中包含一些相关的 unit。启动某个 target的时候,systemd 就会启动该 target 中所有的 unit。

传统的 init 启动模式里面,有 runLevel 概念,其实跟 target 的作用相似。不同的是,runLevel 是互斥的,不可能多个 runLevel 同时启动,但是多个 target 可以同时启动。

5.4.2 target 与 run-level 的对应关系
target 与 run-level 的对应关系
5.4.3 target 与 run-level 的区别
5.4.4 target 的相关命令

6. 扩展

上一篇下一篇

猜你喜欢

热点阅读