系统管理
- 预习内容
- 1.iptables规则备份和恢复
- 2.firewalld的9个zone
- 2.1开启firewalld
- 2.2 firewalld中的zone
- 3.firewalld关于zone的操作
- 4.firewalld中关于service的操作
- 5.linux任务计划cron
- 5.1 crontab 选项:
- 5.2 crontab 的格式
- 5.3 crontab命令中的一些常用特殊符号:
- 5.4 crontab 备份
- 6. Centos 7之前系统服务管理工具chkconfig
- 6.1显示所有运行级系统服务的运行状态信息
- 6.2 参数用法
- 6.3 服务某个级别关闭
- 6.4 删除一个服务
- 6.5 增加一个服务
- 7. Centos 7系统服务管理工具systemd
- 7.1列出所有的服务名称
- 7.2 列出所有units,且type为service的项
- 7.3 几个常用的服务相关的命令
- 8. unit介绍
- 9.target介绍
- 课后总结
- 1. 系统放行一个80端口
- 2.firewall-cmd 如何添加自定义规则
- 3.系统服务启动顺序
预习内容
10.19 iptables规则备份和恢复 10.20 firewalld的9个zone 10.21 firewalld关于zone的操作 10.22 firewalld关于service的操作 10.23 linux任务计划cron 10.24 chkconfig工具 10.25 systemd管理服务 10.26 unit介绍 10.27 target介绍 扩展 firewalld自定义iptables规则 https://blog.51cto.com/jevic/1785162 提供一个iptables系列文章的博客 https://www.zsythink.net/archives/tag/iptables/page/2/ anacron https://www.jianshu.com/p/3009a9b7d024?from=timeline systemd自定义启动脚本 http://www.jb51.net/article/100457.htm
1.iptables规则备份和恢复
iptables备份数据到配置文件/etc/sysconfig/iptables,使用如下命令
代码语言:javascript复制[root@linux-001 ~]# service iptables save
iptables备份规则到另外一个文件,而不是配置文件
代码语言:javascript复制[root@linux-001 ~]# iptables-save > my.ipt
[root@linux-001 ~]# cat my.tpt
# Generated by iptables-save v1.4.21 on Wed Apr 17 03:35:23 2019
*nat
:PREROUTING ACCEPT [267:82430]
:INPUT ACCEPT [260:81921]
:OUTPUT ACCEPT [25:8200]
:POSTROUTING ACCEPT [26:8252]
-A PREROUTING -d 192.168.141.128/32 -p tcp -m tcp --dport 1122 -j DNAT --to-destination 192.168.100.100:22
-A POSTROUTING -s 192.168.100.100/32 -j SNAT --to-source 192.168.141.128
COMMIT
# Completed on Wed Apr 17 03:35:23 2019
# Generated by iptables-save v1.4.21 on Wed Apr 17 03:35:23 2019
*filter
:INPUT ACCEPT [2610:326613]
:FORWARD ACCEPT [827:68276]
:OUTPUT ACCEPT [1817:173008]
COMMIT
# Completed on Wed Apr 17 03:35:23 2019
[root@linux-001 ~]#
iptables恢复文件数据
代码语言:javascript复制[root@linux-001 ~]# iptables -t nat -F
[root@linux-001 ~]# iptables -t nat
iptables v1.4.21: no command specified
Try `iptables -h' or 'iptables --help' for more information.
[root@linux-001 ~]# iptables -t nat -nvL
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
[root@linux-001 ~]#
[root@linux-001 ~]# iptables-restore < my.tpt
[root@linux-001 ~]# iptables -t nat -nvL
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 DNAT tcp -- * * 0.0.0.0/0 192.168.141.128 tcp dpt:1122 to:192.168.100.100:22
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 SNAT all -- * * 192.168.100.100 0.0.0.0/0 to:192.168.141.128
[root@linux-001 ~]#
2.firewalld的9个zone
2.1开启firewalld
在之前的iptables中,我们关闭掉了firewalld,并且设置开机不可启动,安装了iptables-service,开启了iptables,并且设置了开机启动。这次我们反的操作,把iptables关闭掉,开启firewalld。
代码语言:javascript复制[root@linux-001 ~]# systemctl stop iptables.service
[root@linux-001 ~]# systemctl disable iptables.service
Removed symlink /etc/systemd/system/basic.target.wants/iptables.service.
[root@linux-001 ~]#
[root@linux-001 ~]# systemctl enable firewalld.service
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@linux-001 ~]# systemctl start firewalld.service
[root@linux-001 ~]# iptables -nvL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
28 2056 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
1 92 INPUT_direct all -- * * 0.0.0.0/0 0.0.0.0/0
1 92 INPUT_ZONES_SOURCE all -- * * 0.0.0.0/0 0.0.0.0/0
1 92 INPUT_ZONES all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate INVALID
0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
0 0 FORWARD_direct all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 FORWARD_IN_ZONES_SOURCE all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 FORWARD_IN_ZONES all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 FORWARD_OUT_ZONES_SOURCE all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 FORWARD_OUT_ZONES all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate INVALID
0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT 20 packets, 1904 bytes)
pkts bytes target prot opt in out source destination
20 1904 OUTPUT_direct all -- * * 0.0.0.0/0 0.0.0.0/0
Chain FORWARD_IN_ZONES (1 references)
pkts bytes target prot opt in out source destination
0 0 FWDI_public all -- ens37 * 0.0.0.0/0 0.0.0.0/0 [goto]
0 0 FWDI_public all -- ens33 * 0.0.0.0/0 0.0.0.0/0 [goto]
0 0 FWDI_public all -- * 0.0.0.0/0 0.0.0.0/0 [goto]
Chain FORWARD_IN_ZONES_SOURCE (1 references)
pkts bytes target prot opt in out source destination
Chain FORWARD_OUT_ZONES (1 references)
pkts bytes target prot opt in out source destination
0 0 FWDO_public all -- * ens37 0.0.0.0/0 0.0.0.0/0 [goto]
0 0 FWDO_public all -- * ens33 0.0.0.0/0 0.0.0.0/0 [goto]
0 0 FWDO_public all -- * 0.0.0.0/0 0.0.0.0/0 [goto]
Chain FORWARD_OUT_ZONES_SOURCE (1 references)
pkts bytes target prot opt in out source destination
Chain FORWARD_direct (1 references)
pkts bytes target prot opt in out source destination
Chain FWDI_public (3 references)
pkts bytes target prot opt in out source destination
0 0 FWDI_public_log all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 FWDI_public_deny all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 FWDI_public_allow all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0
Chain FWDI_public_allow (1 references)
pkts bytes target prot opt in out source destination
Chain FWDI_public_deny (1 references)
pkts bytes target prot opt in out source destination
Chain FWDI_public_log (1 references)
pkts bytes target prot opt in out source destination
Chain FWDO_public (3 references)
pkts bytes target prot opt in out source destination
0 0 FWDO_public_log all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 FWDO_public_deny all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 FWDO_public_allow all -- * * 0.0.0.0/0 0.0.0.0/0
Chain FWDO_public_allow (1 references)
pkts bytes target prot opt in out source destination
Chain FWDO_public_deny (1 references)
pkts bytes target prot opt in out source destination
Chain FWDO_public_log (1 references)
pkts bytes target prot opt in out source destination
Chain INPUT_ZONES (1 references)
pkts bytes target prot opt in out source destination
0 0 IN_public all -- ens37 * 0.0.0.0/0 0.0.0.0/0 [goto]
1 92 IN_public all -- ens33 * 0.0.0.0/0 0.0.0.0/0 [goto]
0 0 IN_public all -- * 0.0.0.0/0 0.0.0.0/0 [goto]
Chain INPUT_ZONES_SOURCE (1 references)
pkts bytes target prot opt in out source destination
Chain INPUT_direct (1 references)
pkts bytes target prot opt in out source destination
Chain IN_public (3 references)
pkts bytes target prot opt in out source destination
1 92 IN_public_log all -- * * 0.0.0.0/0 0.0.0.0/0
1 92 IN_public_deny all -- * * 0.0.0.0/0 0.0.0.0/0
1 92 IN_public_allow all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0
Chain IN_public_allow (1 references)
pkts bytes target prot opt in out source destination
1 92 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 ctstate NEW
Chain IN_public_deny (1 references)
pkts bytes target prot opt in out source destination
Chain IN_public_log (1 references)
pkts bytes target prot opt in out source destination
Chain OUTPUT_direct (1 references)
pkts bytes target prot opt in out source destination
[root@linux-001 ~]#
[root@linux-001 ~]# iptables -t nat -nvL
Chain PREROUTING (policy ACCEPT 1 packets, 328 bytes)
pkts bytes target prot opt in out source destination
1 328 PREROUTING_direct all -- * * 0.0.0.0/0 0.0.0.0/0
1 328 PREROUTING_ZONES_SOURCE all -- * * 0.0.0.0/0 0.0.0.0/0
1 328 PREROUTING_ZONES all -- * * 0.0.0.0/0 0.0.0.0/0
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 OUTPUT_direct all -- * * 0.0.0.0/0 0.0.0.0/0
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 POSTROUTING_direct all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 POSTROUTING_ZONES_SOURCE all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 POSTROUTING_ZONES all -- * * 0.0.0.0/0 0.0.0.0/0
Chain OUTPUT_direct (1 references)
pkts bytes target prot opt in out source destination
Chain POSTROUTING_ZONES (1 references)
pkts bytes target prot opt in out source destination
0 0 POST_public all -- * ens37 0.0.0.0/0 0.0.0.0/0 [goto]
0 0 POST_public all -- * ens33 0.0.0.0/0 0.0.0.0/0 [goto]
0 0 POST_public all -- * 0.0.0.0/0 0.0.0.0/0 [goto]
Chain POSTROUTING_ZONES_SOURCE (1 references)
pkts bytes target prot opt in out source destination
Chain POSTROUTING_direct (1 references)
pkts bytes target prot opt in out source destination
Chain POST_public (3 references)
pkts bytes target prot opt in out source destination
0 0 POST_public_log all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 POST_public_deny all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 POST_public_allow all -- * * 0.0.0.0/0 0.0.0.0/0
Chain POST_public_allow (1 references)
pkts bytes target prot opt in out source destination
Chain POST_public_deny (1 references)
pkts bytes target prot opt in out source destination
Chain POST_public_log (1 references)
pkts bytes target prot opt in out source destination
Chain PREROUTING_ZONES (1 references)
pkts bytes target prot opt in out source destination
0 0 PRE_public all -- ens37 * 0.0.0.0/0 0.0.0.0/0 [goto]
1 328 PRE_public all -- ens33 * 0.0.0.0/0 0.0.0.0/0 [goto]
0 0 PRE_public all -- * 0.0.0.0/0 0.0.0.0/0 [goto]
Chain PREROUTING_ZONES_SOURCE (1 references)
pkts bytes target prot opt in out source destination
Chain PREROUTING_direct (1 references)
pkts bytes target prot opt in out source destination
Chain PRE_public (3 references)
pkts bytes target prot opt in out source destination
1 328 PRE_public_log all -- * * 0.0.0.0/0 0.0.0.0/0
1 328 PRE_public_deny all -- * * 0.0.0.0/0 0.0.0.0/0
1 328 PRE_public_allow all -- * * 0.0.0.0/0 0.0.0.0/0
Chain PRE_public_allow (1 references)
pkts bytes target prot opt in out source destination
Chain PRE_public_deny (1 references)
pkts bytes target prot opt in out source destination
Chain PRE_public_log (1 references)
pkts bytes target prot opt in out source destination
[root@linux-001 ~]#
2.2 firewalld中的zone
firewalld 默认有 9 个 zone,默认的 zone 为 public,zone 可以理解为 firewalld 的单位:规则集。
代码语言:javascript复制## 查看firewalld种的zone ##
[root@linux-02 ~]# firewall-cmd --get-zones
block dmz drop external home internal public trusted work
[root@linux-02 ~]#
## 查看默认的zone是什么 ##
[root@linux-02 ~]# firewall-cmd --get-default-zone
public
[root@linux-02 ~]#
firewalld种zone的区别如下图:
3.firewalld关于zone的操作
firewall-cmd --set-default-zone=work //设定默认zone firewall-cmd --get-zone-of-interface=ens33 //查指定网卡 firewall-cmd --zone=public --add-interface=lo //给指定网卡设置zone firewall-cmd --zone=dmz --change-interface=lo //针对网卡更改zone firewall-cmd --zone=dmz --remove-interface=lo //针对网卡删除zone firewall-cmd --get-active-zones //查看系统所有网卡所在的zone
代码语言:javascript复制## 设定默认zone ##
[root@linux-02 ~]# firewall-cmd --set-default-zone=work
success
[root@linux-02 ~]# firewall-cmd --get-default-zone
work
## 查指定网卡的zone ##
[root@linux-02 ~]# firewall-cmd --get-zone-of-interface=ens33
work
[root@linux-02 ~]# firewall-cmd --get-zone-of-interface=ens37
work
[root@linux-02 ~]# firewall-cmd --get-zone-of-interface=lo
no zone
## 给指定网卡设置zone ##
[root@linux-02 ~]# firewall-cmd --zone=dmz --add-interface=ens37
The interface is under control of NetworkManager, setting zone to 'dmz'.
success
[root@linux-02 ~]# firewall-cmd --get-zone-of-interface=ens37
dmz
## 给指定网卡更改zone ##
[root@linux-02 ~]# firewall-cmd --zone=public --change-interface=ens37
The interface is under control of NetworkManager, setting zone to 'public'.
success
[root@linux-02 ~]# firewall-cmd --get-zone-of-interface=ens37
public
## 删除指定网卡的zone ##
[root@linux-02 ~]# firewall-cmd --zone=public --remove-interface=ens37
The interface is under control of NetworkManager, setting zone to default.
success
[root@linux-02 ~]# firewall-cmd --get-zone-of-interface=ens37
work
## 查看所有网卡的zone ##
[root@linux-02 ~]# firewall-cmd --get-active-zones
work
interfaces: ens33 ens37
4.firewalld中关于service的操作
firewall-cmd --get-services //查看所有的servies firewall-cmd --list-services //查看当前zone下有哪些service firewall-cmd --zone=public --add-service=http //把http增加到public zone下面 firewall-cmd --zone=public --remove-service=http ls /usr/lib/firewalld/zones/ //zone的配置文件模板 firewall-cmd --zone=public --add-service=http --permanent //更改配置文件,之后会在/etc/firewalld/zones目录下面生成配置文件
代码语言:javascript复制## 查看所有的service ##
[root@linux-02 ~]# firewall-cmd --get-service
RH-Satellite-6 amanda-client amanda-k5-client bacula bacula-client bgp bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc ceph ceph-mon cfengine condor-collector ctdb dhcp dhcpv6 dhcpv6-client dns docker-registry docker-swarm dropbox-lansync elasticsearch freeipa-ldap freeipa-ldaps freeipa-replication freeipa-trust ftp ganglia-client ganglia-master git gre high-availability http https imap imaps ipp ipp-client ipsec irc ircs iscsi-target jenkins kadmin kerberos kibana klogin kpasswd kprop kshell ldap ldaps libvirt libvirt-tls managesieve mdns minidlna mongodb mosh mountd ms-wbt mssql murmur mysql nfs nfs3 nmea-0183 nrpe ntp openvpn ovirt-imageio ovirt-storageconsole ovirt-vmconsole pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy proxy-dhcp ptp pulseaudio puppetmaster quassel radius redis rpc-bind rsh rsyncd samba samba-client sane sip sips smtp smtp-submission smtps snmp snmptrap spideroak-lansync squid ssh syncthing syncthing-gui synergy syslog syslog-tls telnet tftp tftp-client tinc tor-socks transmission-client upnp-client vdsm vnc-server wbem-https xmpp-bosh xmpp-client xmpp-local xmpp-server zabbix-agent zabbix-server
## 查看当前zone下都有哪些service ##
[root@linux-02 ~]# firewall-cmd --list-services
ssh dhcpv6-client
## 查看public的zone下都有哪些service ##
[root@linux-02 ~]# firewall-cmd --zone=public --list-services
ssh dhcpv6-client
## 把http增加到public的zone下 ##
[root@linux-02 ~]# firewall-cmd --zone=public --add-service=http
success
[root@linux-02 ~]# firewall-cmd --zone=public --list-services
ssh dhcpv6-client http
## 把public所在的zone下的http service删除 ##
[root@linux-02 ~]# firewall-cmd --zone=public --remove-service=http
success
[root@linux-02 ~]# firewall-cmd --zone=public --list-services
ssh dhcpv6-client
## 把增加的service保存到配置文件当中去,配置文件在/etc/firewalld/zones/下 ##
[root@linux-02 ~]# firewall-cmd --zone=public --add-service=http --permanent
success
[root@linux-02 ~]# ls /etc/firewalld/zones/
public.xml public.xml.old
[root@linux-02 ~]# cat /etc/firewalld/zones/public.xml
<?xml version="1.0" encoding="utf-8"?>
<zone>
<short>Public</short>
<description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
<service name="ssh"/>
<service name="dhcpv6-client"/>
<service name="http"/>
</zone>
## firewalld中zones的模板在/usr/bin/firewalld/zones/ ##
[root@linux-02 ~]# ls /usr/lib/firewalld/zones/
block.xml dmz.xml drop.xml external.xml home.xml internal.xml public.xml trusted.xml work.xml
[root@linux-02 ~]# ls /usr/lib/firewalld/services/
amanda-client.xml ftp.xml libvirt-tls.xml pop3.xml ssh.xml
amanda-k5-client.xml ganglia-client.xml libvirt.xml postgresql.xml syncthing-gui.xml
bacula-client.xml ganglia-master.xml managesieve.xml privoxy.xml syncthing.xml
bacula.xml git.xml mdns.xml proxy-dhcp.xml synergy.xml
bgp.xml gre.xml minidlna.xml ptp.xml syslog-tls.xml
bitcoin-rpc.xml high-availability.xml mongodb.xml pulseaudio.xml syslog.xml
bitcoin-testnet-rpc.xml https.xml mosh.xml puppetmaster.xml telnet.xml
bitcoin-testnet.xml http.xml mountd.xml quassel.xml tftp-client.xml
bitcoin.xml imaps.xml mssql.xml radius.xml tftp.xml
ceph-mon.xml imap.xml ms-wbt.xml redis.xml tinc.xml
ceph.xml ipp-client.xml murmur.xml RH-Satellite-6.xml tor-socks.xml
cfengine.xml ipp.xml mysql.xml rpc-bind.xml transmission-client.xml
condor-collector.xml ipsec.xml nfs3.xml rsh.xml upnp-client.xml
ctdb.xml ircs.xml nfs.xml rsyncd.xml vdsm.xml
dhcpv6-client.xml irc.xml nmea-0183.xml samba-client.xml vnc-server.xml
dhcpv6.xml iscsi-target.xml nrpe.xml samba.xml wbem-https.xml
dhcp.xml jenkins.xml ntp.xml sane.xml xmpp-bosh.xml
dns.xml kadmin.xml openvpn.xml sips.xml xmpp-client.xml
docker-registry.xml kerberos.xml ovirt-imageio.xml sip.xml xmpp-local.xml
docker-swarm.xml kibana.xml ovirt-storageconsole.xml smtp-submission.xml xmpp-server.xml
dropbox-lansync.xml klogin.xml ovirt-vmconsole.xml smtps.xml zabbix-agent.xml
elasticsearch.xml kpasswd.xml pmcd.xml smtp.xml zabbix-server.xml
freeipa-ldaps.xml kprop.xml pmproxy.xml snmptrap.xml
freeipa-ldap.xml kshell.xml pmwebapis.xml snmp.xml
freeipa-replication.xml ldaps.xml pmwebapi.xml spideroak-lansync.xml
freeipa-trust.xml ldap.xml pop3s.xml squid.xml
[root@linux-02 ~]#
需求:ftp服务自定义端口1121,需要在work zone下面放行ftp 解决思路:
- cp /usr/lib/firewalld/services/ftp.xml /etc/firewalld/services
- vi /etc/firewalld/services/ftp.xml //把21改为1121
- cp /usr/lib/firewalld/zones/work.xml /etc/firewalld/zones/
- vi /etc/firewalld/zones/work.xml //增加一行<service name=“ftp”/>
- firewall-cmd --reload //重新加载
- firewall-cmd --zone=work --list-services
[root@linux-02 ~]# cp /usr/lib/firewalld/services/ftp.xml /etc/firewalld/services/
[root@linux-02 ~]# vim /etc/firewalld/services/ftp.xml
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>FTP</short>
<description>FTP is a protocol used for remote file transfer. If you plan to make your FTP server publicly available, enable this option. You need the vsftpd package installed for this option to be useful.</description>
<port protocol="tcp" port="1121"/>
<module name="nf_conntrack_ftp"/>
</service>
[root@linux-02 ~]# cp /usr/lib/firewalld/zones/work.xml /etc/firewalld/zones/
[root@linux-02 ~]# vim /etc/firewalld/zones/work.xml
<?xml version="1.0" encoding="utf-8"?>
<zone>
<short>Work</short>
<description>For use in work areas. You mostly trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
<service name="ssh"/>
<service name="dhcpv6-client"/>
<service name="ftp"/>
</zone>
[root@linux-02 ~]# firewall-cmd --reload
success
[root@linux-02 ~]# firewall-cmd --zone=work --list-services
ssh dhcpv6-client ftp
5.linux任务计划cron
5.1 crontab 选项:
选项 | 含义 |
---|---|
-u | 用户 |
-e | 创建定时任务 |
-l | 查看定时任务 |
-r | 删除定时任务 |
systemctl start crond.service
5.2 crontab 的格式
字段名称 | 说明 | 取值范围 |
---|---|---|
分钟 | 每小时的第几分钟执行 | 0-59 |
小时 | 每日的第几个小时执行 | 0-24 |
天 | 每月的第几天执行 | 1-31 |
月份 | 每年的第几月执行 | 1-12 |
星期几 | 每周的第几天执行 | 0-6(0和7都代表星期日) |
执行的命令 | 欲执行的命令及参数 |
## crontab格式:分钟 小时 日期 月份 星期几 执行命令 ##
[root@linux-02 ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
## 创建一个定时任务 ##
[root@linux-02 ~]# crontab -e
* * * * * command path // 前五个字段可以取整数值,指定何时开始工作,第六个域是字符串,即命令字段,其中包括了crontab调度执行的命令。 各个字段之间用spaces和tabs分割。
## 查看定时任务 ##
[root@linux-02 ~]# crontab -l
30 2 * * * sh /root/oss.sh
5.3 crontab命令中的一些常用特殊符号:
符号 | 说明 |
---|---|
* | 表示任何时刻 |
, | 表示分割,如第二段 2,5 代表2点和5点 |
- | 表示一个段,如第二段里: 1-5,就表示1到5点 |
/n | 表示每个n的单位执行一次,如第二段里,*/1, 就表示每隔1个小时执行一次命令。也可以写成1-23/1. |
5.4 crontab 备份
每个用户创建的定时任务在 /var/spool/cron/此目录下以用户名命名,如果需要备份可以直接复制此文件即可。
6. Centos 7之前系统服务管理工具chkconfig
chkconfig命令主要用来更新(启动或停止)和查询系统服务的运行级信息。谨记chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接。
6.1显示所有运行级系统服务的运行状态信息
代码语言:javascript复制[root@linux-02 ~]# chkconfig --list
注:该输出结果只显示 SysV 服务,并不包含
原生 systemd 服务。SysV 配置数据
可能被原生 systemd 配置覆盖。
要列出 systemd 服务,请执行 'systemctl list-unit-files'。
查看在具体 target 启用的服务请执行
'systemctl list-dependencies [target]'。
netconsole 0:关 1:关 2:关 3:关 4:关 5:关 6:关
network 0:关 1:关 2:开 3:开 4:开 5:开 6:关
6.2 参数用法
–add 增加所指定的系统服务,让chkconfig指令得以管理它,并同时在系统启动的叙述文件内增加相关数据。 –del 删除所指定的系统服务,不再由chkconfig指令管理,并同时在系统启动的叙述文件内删除相关数据。 –level<等级代号> 指定读系统服务要在哪一个执行等级中开启或关毕。 等级0表示:表示关机 等级1表示:单用户模式 等级2表示:无网络连接的多用户命令行模式 等级3表示:有网络连接的多用户命令行模式 等级4表示:不可用 等级5表示:带图形界面的多用户模式 等级6表示:重新启动 需要说明的是,level选项可以指定要查看的运行级而不一定是当前运行级。对于每个运行级,只能有一个启动脚本或者停止脚本。当切换运行级时,init不会重新启动已经启动的服务,也不会再次去停止已经停止的服务。
6.3 服务某个级别关闭
代码语言:javascript复制[root@linux-02 ~]# chkconfig --level 3 network off
[root@linux-02 ~]# chkconfig --list
注:该输出结果只显示 SysV 服务,并不包含
原生 systemd 服务。SysV 配置数据
可能被原生 systemd 配置覆盖。
要列出 systemd 服务,请执行 'systemctl list-unit-files'。
查看在具体 target 启用的服务请执行
'systemctl list-dependencies [target]'。
netconsole 0:关 1:关 2:关 3:关 4:关 5:关 6:关
network 0:关 1:关 2:开 3:关 4:开 5:开 6:关
[root@linux-02 ~]# chkconfig --level 345 network off
[root@linux-02 ~]# chkconfig --list
注:该输出结果只显示 SysV 服务,并不包含
原生 systemd 服务。SysV 配置数据
可能被原生 systemd 配置覆盖。
要列出 systemd 服务,请执行 'systemctl list-unit-files'。
查看在具体 target 启用的服务请执行
'systemctl list-dependencies [target]'。
netconsole 0:关 1:关 2:关 3:关 4:关 5:关 6:关
network 0:关 1:关 2:开 3:关 4:关 5:关 6:关
[root@linux-02 ~]#
6.4 删除一个服务
代码语言:javascript复制[root@linux-02 ~]# chkconfig --del network
[root@linux-02 ~]# chkconfig --list
注:该输出结果只显示 SysV 服务,并不包含
原生 systemd 服务。SysV 配置数据
可能被原生 systemd 配置覆盖。
要列出 systemd 服务,请执行 'systemctl list-unit-files'。
查看在具体 target 启用的服务请执行
'systemctl list-dependencies [target]'。
netconsole 0:关 1:关 2:关 3:关 4:关 5:关 6:关
[root@linux-02 ~]#
6.5 增加一个服务
代码语言:javascript复制[root@linux-02 ~]# chkconfig --add network
[root@linux-02 ~]# chkconfig --list
注:该输出结果只显示 SysV 服务,并不包含
原生 systemd 服务。SysV 配置数据
可能被原生 systemd 配置覆盖。
要列出 systemd 服务,请执行 'systemctl list-unit-files'。
查看在具体 target 启用的服务请执行
'systemctl list-dependencies [target]'。
netconsole 0:关 1:关 2:关 3:关 4:关 5:关 6:关
network 0:关 1:关 2:开 3:开 4:开 5:开 6:关
7. Centos 7系统服务管理工具systemd
RHEL7里面,初始进程变成了systemd。RHEL6和之前的版本使用的初始进程是init,init是一个线性的启动过程,一个接一个的启动,比较慢;systemd则可以多进程启动,速度提高很多。另外,systemd还有简化了开发,集成日志等优点。
7.1列出所有的服务名称
代码语言:javascript复制[root@linux-02 ~]# systemctl list-unit-files
UNIT FILE STATE
proc-sys-fs-binfmt_misc.automount static
dev-hugepages.mount static
dev-mqueue.mount static
proc-sys-fs-binfmt_misc.mount static
sys-fs-fuse-connections.mount static
sys-kernel-config.mount static
sys-kernel-debug.mount static
tmp.mount disabled
brandbot.path disabled
systemd-ask-password-console.path static
systemd-ask-password-plymouth.path static
systemd-ask-password-wall.path static
session-1.scope static
session-32.scope static
session-37.scope static
arp-ethers.service disabled
auditd.service enabled
autovt@.service enabled
blk-availability.service disabled
brandbot.service static
console-getty.service disabled
console-shell.service disabled
container-getty@.service static
cpupower.service disabled
crond.service enabled
……
runlevel0.target disabled
runlevel1.target disabled
runlevel2.target enabled
runlevel3.target enabled
runlevel4.target enabled
runlevel5.target static
runlevel6.target disabled
shutdown.target static
sigpwr.target static
sleep.target static
slices.target static
smartcard.target static
sockets.target static
sound.target static
suspend.target static
swap.target static
sysinit.target static
system-update.target static
time-sync.target static
timers.target static
umount.target static
fstrim.timer disabled
systemd-readahead-done.timer indirect
systemd-tmpfiles-clean.timer static
226 unit files listed.
lines 204-229/229 (END)
7.2 列出所有units,且type为service的项
代码语言:javascript复制[root@linux-02 ~]# systemctl list-units --all --type=service
UNIT LOAD ACTIVE SUB DESCRIPTION
auditd.service loaded active running Security Auditing Service
cpupower.service loaded inactive dead Configure CPU power related settings
crond.service loaded active running Command Scheduler
dbus.service loaded active running D-Bus System Message Bus
● display-manager.service not-found inactive dead display-manager.service
dracut-shutdown.service loaded inactive dead Restore /run/initramfs
ebtables.service loaded inactive dead Ethernet Bridge Filtering tables
emergency.service loaded inactive dead Emergency Shell
● exim.service not-found inactive dead exim.service
firewalld.service loaded active running firewalld - dynamic firewall daemon
getty@tty1.service loaded active running Getty on tty1
● ip6tables.service not-found inactive dead ip6tables.service
● ipset.service not-found inactive dead ipset.service
● iptables.service not-found inactive dead iptables.service
irqbalance.service loaded inactive dead irqbalance daemon
kdump.service loaded active exited Crash recovery kernel arming
kmod-static-nodes.service loaded active exited Create list of required static device nodes f
microcode.service loaded inactive dead Load CPU microcode update
network.service loaded active exited LSB: Bring up/down networking
NetworkManager-wait-online.service loaded active exited Network Manager Wait Online
NetworkManager.service loaded active running Network Manager
plymouth-quit-wait.service loaded inactive dead Wait for Plymouth Boot Screen to Quit
plymouth-quit.service loaded inactive dead Terminate Plymouth Boot Screen
plymouth-read-write.service loaded inactive dead Tell Plymouth To Write Out Runtime Data
plymouth-start.service loaded inactive dead Show Plymouth Boot Screen
……
LOAD = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB = The low-level unit activation state, values depend on unit type.
83 loaded units listed.
To show all installed unit files use 'systemctl list-unit-files'.
7.3 几个常用的服务相关的命令
systemctl enable crond.service //让服务开机启动 systemctl disable crond //不让开机启动 systemctl status crond //查看状态 systemctl stop crond //停止服务 systemctl start crond //启动服务 systemctl restart crond //重启服务 systemctl is-enabled crond //检查服务是否开机启动
8. unit介绍
Systemd由一个叫做单元(Unit)的概念,它保存了服务、设备、挂载点和操作系统其他信息的配置文件,并能够处理不同单元之间的依赖关系。大部分单元都静态的定义在单元文件中,也有一些是动态生成的。单元有多种状态:
- 处于活动的则是(active),当前正在运行
- 停止的则是(inactive),当前已经停止
- 启动中的则是(activing),当前正在启动
- 停止中的则是(deactiving),当前正在停止
- 失败的则是(failed)状态,意思说单元启动过程中遇到错误比如找不到文件、路径或者进程运行中崩溃了等。
系统所有unit的文件位置 /usr/lib/systemd/system 一共有11中单元类型: service 系统服务 target 多个unit组成的组 device 硬件设备 mount 文件系统挂载点 automount 自动挂载点 path 文件或路径 scope 不是由systemd启动的外部进程 slice 进程组 snapshot systemd快照 socket 进程间通信套接字 swap swap文件 timer 定时器
单元类型 | 说明 |
---|---|
service单元 | 用于封装一个后台服务进程,比如通过systemctl start firewalld启动防火墙,这种就属于service单元。 |
socket单元 | 用于封装一个后台服务进程,比如通过systemctl start firewalld启动防火墙,这种就属于service单元。 |
target单元 | 用于将多个单元在逻辑上组合在一起让它们同时启动。 |
device单元 | 用于封装一个设备文件,可用于基于设备启动。并不是每一个设备文件都需要一个device单元,但是每一个被udev规则标记的设备都必须作为一个device单元出现。 |
mount单元 | 用于封装一个文件系统挂载点(向后兼容/etc/fstab) |
automount单元 | 用于封装一个文件系统自动挂载点,只有该文件系统被访问时才会进行挂载,它取代了传统的autofs服务。 |
timer单元 | 用于封装一个基于时间触发的动作,它取代了atd、crond等计划任务。 |
swap单元 | 用于封装一个交换分区或者交换文件,它与mount类似。 |
path单元 | 用于根据文件系统上特定对象的变化来启动其他服务。 |
slice单元 | 用于控制特定的CGroup内所有进程的总体资源占有。 |
scope单元 | 它与service单元类似,但是由systemd根据D-bus接口接收到的信息自动创建,可用于管理外部创建的进程。 |
9.target介绍
前面学习systemctl的时候,对service结尾的特定服务可以执行start,stop,restart等操作;另外还有一类后缀是以target的结尾,这些target 服务可以视作一批服务的集合,里面预定义了哪些服务运行,哪些不运行。这个概念非常类似RHEL6级之前的runlevel的概念。
查看系统中的target
查看指定target包含哪些unit:
RHEL6之前的版本,可以在/etc/rc.d里面查看7个运行级别,每个运行级别对应不同的功能,比如0是关机,1是单用户,2是多用户(没网络),3是多用户,4没用,5是图形界面,6是重启。 可以使用 init 0 直接关机等等。RHEL7里面,target有类似等同的定义:
查看默认的target:
代码语言:javascript复制[root@linux-02 ~]# systemctl get-default
multi-user.target
查看一个service属于哪个target
课后总结
1. 系统放行一个80端口
代码语言:javascript复制 ## 使用firewall 添加80端口 ##
[root@linux-001 ~]# firewall-cmd --add-port=80/tcp
## 使用iptables添加80端口 ##
[root@linux-001 ~]# iptables -A INPUT -p tcp -dport 80 -j ACCEPT
## firewall 添加的80端口保存在配置文件中并且重新加载生效使其主机重启也生效 ##
[root@linux-001 ~]# firewall-cmd --permanent --add-port=80/tcp && firewall-cmd --reload
## firewall 添加http 服务保存在配置文件中并且重新加载生效使其主机重启也生效 ##
[root@linux-001 ~]# firewall-cmd --permanent --add-service=http && firewall-cmd --reload
2.firewall-cmd 如何添加自定义规则
以下只是针对自定义规则的简单说明和举例,其实也就是帮助文档里面的东西;详细的说明自行参考 firewall-cmd --help
传递的参数 与 iptables, ip6tables 以及 ebtables 一致!
Centos7 Firewall 用户操作接口依然调用系统内核的iptables模块来设定规则!
直接选项
–direct需要是直接选项的第一个参数。
将命令传递给防火墙。参数 可以是 iptables, ip6tables 以及 ebtables 命令行参数。
firewall-cmd --direct --passthrough { ipv4 | ipv6 | eb }
为表 增加一个新链 。
firewall-cmd --direct --add-chain { ipv4 | ipv6 | eb }
从表 中删除链 。
firewall-cmd --direct --remove-chain { ipv4 | ipv6 | eb }
查询 链是否存在与表 . 如果是,返回0,否则返回1.
firewall-cmd --direct --query-chain { ipv4 | ipv6 | eb }
如果启用,此命令将有返回值。此命令没有输出信息。
获取用空格分隔的表 中链的列表。
firewall-cmd --direct --get-chains { ipv4 | ipv6 | eb }
为表 增加一条参数为 的链 ,优先级设定为 。
firewall-cmd --direct --add-rule { ipv4 | ipv6 | eb }
参考示例:
方式-:[reload 生效,修改后重启才可生效]
firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 1 -s 192.168.1.0/24 -p tcp --dport=22 -j ACCEPT
firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 2 -p tcp --dport=22 -j DROP
方式二:[重载或重启后失效]
iptables -t filter -I INPUT_direct -s 192.168.1.20 -p tcp --dport=22 -j ACCEPT
iptables -A INPUT_direct -p tcp --dport=22 -j DROP
从表 中删除带参数 的链 。
firewall-cmd --direct --remove-rule { ipv4 | ipv6 | eb }
firewall-cmd --direct --remove-rule ipv4 filter INPUT 2 -p tcp --dport=22 -j DROP
查询带参数 的链 是否存在表 中
firewall-cmd --direct --query-rule { ipv4 | ipv6 | eb }
获取表 中所有增加到链 的规则,并用换行分隔。
firewall-cmd --direct --get-rules { ipv4 | ipv6 | eb }
此部分扩展链接:https://blog.51cto.com/jevic/1785162
3.系统服务启动顺序
Linux内核加载启动后,用户空间的第一个进程就是初始化进程,这个程序的物理文件约定位于/sbin/init,当然也可以通过传递内核参数来让内核启动指定的程序。这个进程的特点是进程号为1,代表第一个运行的用户空间进程。不同发行版采用了不同的启动程序,主要有以下几种主流选择:
以 Ubuntu 为代表的 Linux 发行版采用 upstart CentOS7.0 版本之前的 System V init CentOS7.0 版本的 systemd