CentOS7的新特性介绍

和以前的版本相比,CentOS7主要加入以下新特性。
(1) 从CentOS6.x在线升级到 CentOS7;
(2) 加入了linux容器(LinuX Containers, LXC)支持,使用轻量级的Docker进行容器实现;
(3) 默认的XFS文件系统;
(4) 使用systemd后台程序管理linux系统和服务;
(5) 使用firewalld后台程序管理防火墙服务。


本文主要介绍利用systemd 和firewalld管理linux系统和服务的相关用法。


1. systemd是linux系统的一个超级后台程序,它是系统初始化时的控制单元,主要用于管理linux系统后台程序和服务。使用pstree命令查看系统程序时,发现systemd是所有程序的祖辈程序。


(1) systemctl是管理systemd程序的基本命令。如果系统安装了systemd-ui包,也可以使用与systemctl对应的命令systemadm命令调出界面,进行systemd管理。
systemctl 命令的主要用法如下。其中unit可以是服务(.service),装载点(.mount),装置(.device)或套接字(.socket), 定时器(.timer)和系统快照(.snapshot)等。这些unit可以看作是其对应的服务、装置等等配置文件,systemd依据这些unit文件控制或监视对应程序的运行。使用systemctl 命令管理unit对应的程序时,应包含上述 .* 形式的后缀名来指明是服务还是装置等,如果没有后缀名,则默认为服务。

systemctl  (or) systemctl list-units    ## To list all the running units
systemctl  --failed   ## To list all the failed units
systemctl list-unit-files ## To show all installed unit files
systemctl list-unit-files  --type=service  ## To show all installed service unit files
systemctl start/stop/restart service_name.service   ## To start/stop/restart a service with name service_name
systemctl status service_name.service   ## To view the current status of a service
systemctl reload service_name.service   ## Reload the configuration file for a service
systemctl enable/disable service_name.service   ## To make a service run/don’t run at booting time
systemctl  daemon-reload   ## Restart systemd


(2) 在systemd管理下,运行级别也成为一种unit(.target)出现。而使用systemctl管理运行级别,也取代了原来init的方式。

systemctl isolate multi-user.target   ## switch to multi user run level (runlevel 3)
systemctl isolate graphical.target ## swith to graphical run level (runlevel 5)
systemctl  set-default levelname.target   ## Set levelname as the default run level


(3) systemd 还自带了系统日志功能(journald),取代了syslog后台程序。journald的配置文件位于

/etc/systemd/journal.conf

如果不修改该文件,则使用默认值处理日志。例如Storage域默认值为auto,该选项的意义是系统将自动将日志文件写入/var/log/journal/目录下,但如果该目录不存在,不会创建该目录,也不写入日志文件。这样日志文件每次重启都会被清空。所以如果我们要持久化日志文件,就应该手动创建/var/log/journal/,或者修改Storage域的值。该文件每个域的意义可参看 man journald.conf
可以使用
journalctl
命令查看日志。 主要用法有以下内容。

journalctl –b [-num] ## if num is omitted, show all messages from this boot. 
## Or else show logs from the boot which were happened num times before this boot.
journalctl  -f   ## Follow new messages
journalctl /usr/lib/systemd/systemd ## Show all messages by a specific executable
journalctl _PID=pid ## Show all messages by a specific process
journalctl –u netcfg  ## Show all messages by a specific unit
journalctl _TRANSPORT=kernel ## Show kernel ring buffer

可以利用journald 的日志功能debug某个启动失败的unit,也可以修改系统启动时日志等级,debug系统启动过程中出现的问题。


2. CentOS 7使用firewalld动态管理系统防火墙,支持network/firewall分段(zones)管理信任级别,支持界面(firewall-config命令)管理规则。firewall完全替代了iptables的功能。
firewalld分级管理网络连接信任程度,每一个网络连接都在一个防火墙级别下工作。为每一个级别设定其独特的防火墙规则,防火墙规则可以是针对预定义的服务、端口和传输协议、端口转发等方面。默认各个防火墙级别的规则,从最不信任到最信任排列如下。


Drop: 只允许计算机通过网络连接向外发送数据包。所有外部传来的数据包将被丢弃,无应答。
Block: 任何进入到网络连接的数据都被拒绝,只返回ipv4的icmp-host-prohibited报文或ipv6的icmp6-host-prohibited报文。
Public:只允许选中连接的数据包进入通信。选中规则可以使用firewall-cmd自定义。
External: 用在路由器等启用伪装的网络,只允许选中的连接接入。
Dmz: 用以限制隔离区(dmz)中的电脑被外部访问,只允许选中的连接。
Work: 用于工作网络,假定大多数联网计算机都是正常的,只允许被选中的连接。
Home: 用在家庭网络,只允许被选中的连接。
Internal:适用内部局域网。
Trusted:允许所有的网络连接。


默认的各个防火墙级别的配置文件在/lib/firewalld/zones中保存。用户自定义防火墙级别时,应该保存在/etc/firewalld/zones中。系统启动firewalld时,按照网络连接配置文件(/etc/sysconfig/network-scripts/ifcfg *)中ZONE域设定的级别(ZONE域未被设定时,系统使用默认的级别)读取上述两个文件夹中对应级别的配置文件,初始化防火墙规则。

firewall-cmd 命令是管理firewalld行为的主要命令,一般需要root权限才能执行,主要用法如下。
firewall-cmd  --state   ## To check if the firewalld were running or not
firewall-cmd  --reload   ## Keep current running firewalld status, and reload firewalld configuration
firewall-cmd  --complete-reload  ## Reload firewalld and abandon current status
firewall-cmd  --get-zones  ## To show all supported zones
firewall-cmd  --get-services  ## To show all supported services which can be add to the zone
firewall-cmd --list-all-zones  ## To list all zones with enabled features (services)
firewall-cmd  [--zone= zone_name] –list-all   ## Print zone zone_name with its enabled features
firewall-cmd --get-default-zone / --set-default-zone=zone_name   ## Get/Set the default zone set for all  
##new network connections
firewall-cmd  --get-active-zones   ## Get current active zone with belonging interfaces (connections) 
firewall-cmd  --get-zone-of-interface=interface_name  ## Get zone related to interface interface_name
firewall-cmd  [--zone=zone_nm] --add-interface=interface_nm ## Add interface_nm to zone_nm, use 
##default if zone options is omitted
firewall-cmd  [--zone=zone_nm] --change-interface=interface_nm  ## Reassign zone for interface_nm
firewall-cmd  [--zone=zone_nm] --list-services  ## List the enabled services in a zone
## To enable a service in zone_nm for n seconds, if zone is not set, the default zone be used, if timeout is 
##not set, the service will be affective until manually disable or the time when PC is shut down
firewall-cmd  [--zone=zone_nm] --add-service=service_nm [--timeout=n_seconds] 
## To enable a service in zone_nm permanently, if zone is not set, the default zone be used
firewall-cmd  --permanent [--zone=zone_nm] --add-service=service_nm 
firewall-cmd [--zone=zone_nm] --remove-service=service_nm  ## Disabled service_nm for current runtime
## Disabled service_nm  in zone_nm permanently
firewall-cmd  --permanent [--zone=zone_nm] --remove-service=service_nm 
## To enable a port or port range from port_no_start to port_no_end in zone_nm for n seconds 
firewall-cmd  [--zone=zone_nm] --add-port=port_no_start[-port_no_end]/protocol_nm 
[--timeout=n_seconds] 
## To enable a port or port range from port_no_start to port_no_end in zone_nm permanently
firewall-cmd --permanent  [--zone=zone_nm] --add-port=port_no_start[-port_no_end]/protocol_nm 
## To disable a port or port range from port_no_start to port_no_end 
firewall-cmd  [--zone=zone_nm] --remove-port=port_no_start[-port_no_end]/protocol_nm 
## To disable a port or port range from port_no_start to port_no_end in zone_nm permanently
firewall-cmd --permanent  [--zone=zone_nm] --remove-port=port_no_start[-port_no_end]/protocol_nm 
## To enable port forwarding or port mapping in a zone
firewall-cmd [--zone=] --add-forward-port=port=[-]:proto= 
{ :toport=[-] | :toaddr=
| :toport=[-]:toaddr=
}

3. Public级别下允许远程SSH连接的一个实例。CentOS 7默认安装了SSH服务器,无需另行安装。


为了增加安全性,更改SSH服务的默认端口。SSH默认端口为22,但可以通过手动更改配置的方式更改为其它端口。

vi /etc/ssh/sshd_config

在其中添加

Port 5432

保存后退出。

如果启用了SElinux安全工具,还要允许ssh端口的网络通信。

semanage   port    -a    -t    ssh_port_t    -p   tcp 5432

然后利用systemctl启动或重新载入ssh服务。

systemctl start/reload sshd.service

这样SSH服务就开始侦听端口5432了。但是,这时由于Public防火墙规则中并未允许SSH服务,因此实际上远程SSH是不可用的。可以利用firewall-cmd进行开始SSH服务和端口的操作。

firewall-cmd --permanent --zone=public --add-service=ssh ## No necessary, ssh is enabled by default
firewall-cmd  --permanent --zone=public --add-port=5432/tcp  ## No necessary, ssh is in public by default
firewall-cmd  --reload  ## Reload and enforce the preceding configurations

经过上面的操作之后,就可以远程SSH控制了。




你可能感兴趣的:(Linux,系统)