1 CentOS7最小化安装需要安装的基础工具包:
[zwj01@localhost ~]$ sudo yum install lrzsz tree net-tools nmap vim bash-completion lsof dos2unix nc telnet ntp wget rng-tools psmisc -y
2 服务管理:
从CentOS 7开始,服务管理和防火墙配置有了很大的变化。系统服务脚本目录是/usr/lib/systemd(软件包安装的单元)和/etc/systemd/(系统管理员安装的单元,优先级更高),有系统(system)和用户(user)之分,如需要开机没有登陆的情况下就能运行的程序,定义在系统(system)服务里,即/usr/lib/systemd/system目录下,每一个服务以.service结尾。
下面以Nginx服务为例,定义为系统服务:
1)安装Nginx(略)
2)创建Nginx服务文件
[zwj@localhost system]$ sudo vim /usr/lib/systemd/system/nginx.service
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true
[Install]
WantedBy=multi-user.target
配置文件说明:
[Unit]:服务的说明
Description:描述服务
After:描述服务类别
[Service]服务运行参数的设置
Type=forking是后台运行的形式
ExecStart为服务的具体运行命令
ExecReload为重启命令
ExecStop为停止命令
PrivateTmp=True表示给服务分配独立的临时空间
注意:[Service]的启动、重启、停止命令全部要求使用绝对路径
[Install]运行级别下服务安装的相关设置,可设置为多用户,即系统运行级别为3
3)设置开机启动:
systemctl enable nginx.service
4)启动Nginx服务:
systemctl start nginx.service
查看所有已启动的服务:systemctl list-units --type=service
显示服务列表:systemctl list-unit-files
值的说明:
enable:开机启动。被systemd启用了,即systemd已把它加载入内存里了。此时systemd认识(know)它
disable:禁止开机启动。没启用,即没有被systemd加载入内存,此时这个unit仅仅只是个文本文件
static:该unit文件里没用INSTALL项,也就不能设为开机启动。
masked:类似加锁,此时该unit无论如何都启动不了。
显示某项服务的当前状态:systemctl status crond.service
显示某项服务是否Active:systemctl is-active crond.service
停止某项服务:systemctl stop crond.service
开启某项服务:systemctl start crond.service
重启某项服务:systemctl restart crond.service
禁止某项服务自启动:systemctl disable crond.service
允许某项服务自启动:systemctl enable crond.service
查看某项服务是否开机启动:systemctl is-enabled crond.service
附 1:Sysvinit (CentOS 6)运行级别和 systemd (CentOS 7)目标的对应表
Sysvinit 运行级别 | Systemd 目标 | 备注 |
---|---|---|
0 | runlevel0.target, poweroff.target | 关闭系统。 |
1, s, single | runlevel1.target, rescue.target | 单用户模式。 |
2, 4 | runlevel2.target, runlevel4.target, multi-user.target | 用户定义/域特定运行级别。默认等同于 3。 |
3 | runlevel3.target, multi-user.target | 多用户,非图形化。用户可以通过多个控制台或网络登录。 |
5 | runlevel5.target, graphical.target | 多用户,图形化。通常为所有运行级别 3 的服务外加图形化登录。 |
6 | runlevel6.target, reboot.target | 重启 |
emergency | emergency.target | 紧急 Shell |
附 2:服务类型
编写自定义的 service 文件时,可以选择几种不同的服务启动方式。启动方式可通过配置文件 [Service] 段中的 Type= 参数进行设置。
Type=simple(默认值):systemd认为该服务将立即启动。服务进程不会fork。如果该服务要启动其他服务,不要使用此类型启动,除非该服务是socket激活型。
Type=forking:systemd认为当该服务进程fork,且父进程退出后服务启动成功。对于常规的守护进程(daemon),除非你确定此启动方式无法满足需求,使用此类型启动即可。使用此启动类型应同时指定 PIDFile=,以便systemd能够跟踪服务的主进程。
Type=oneshot:这一选项适用于只执行一项任务、随后立即退出的服务。可能需要同时设置 RemainAfterExit=yes 使得 systemd 在服务进程退出之后仍然认为服务处于激活状态。
Type=notify:与 Type=simple 相同,但约定服务会在就绪后向 systemd 发送一个信号。这一通知的实现由 libsystemd-daemon.so 提供。
Type=dbus:若以此方式启动,当指定的 BusName 出现在DBus系统总线上时,systemd认为服务就绪。
Type=idle: systemd会等待所有任务(Jobs)处理完成后,才开始执行idle类型的单元。除此之外,其他行为和Type=simple 类似
3 防火墙管理:
firewalld 将配置储存在 /usr/lib/firewalld/ (系统配置,尽可能不去修改)和 /etc/firewalld/ (用户配置)中的各种 XML 文件里
安装:yum install firewalld
启动:systemctl start firewalld.service
停止:systemctl stop firewalld.service
禁止自启动:systemctl disable firewalld.service
查看当前详细状态:systemctl status firewalld.service
显示状态:firewall-cmd --state
关于区域(区域定义了网络连接的可信等级,可以把网卡对应到不同的区域。默认区域为public)
获取支持的区域列表:[root@localhost ~]# firewall-cmd --get-zones
work drop internal external trusted home dmz public block
获取活动的区域:[root@localhost ~]# firewall-cmd --get-active-zones
public
interfaces: ens160
获取默认区域:firewall-cmd --get-default-zone
设置默认区域:firewall-cmd --set-default-zone=public
修改接口所属区域:firewall-cmd --zone=home --change-interface=lo
将接口增加到区域:firewall-cmd --zone=public --add-interface=lo
显示接口所在的区域:firewall-cmd --get-zone-of-interface=lo
从区域移除一个接口:firewall-cmd --zone=public --remove-interface=lo
启用区域中的某个服务:firewall-cmd --zone=public --add-service=http
端口管理:
开启端口:firewall-cmd --zone=public --add-port=80/tcp --permanent(--permanent参数表示永久生效,否则重启后则失效)也可以直接指定服务:firewall-cmd --zone=public --add-service=http
删除端口:firewall-cmd --zone=public --remove-port=23/tcp --permanent
重新加载:firewall-cmd --reload
显示开启的服务和端口:firewall-cmd --list-all
获取所有支持的服务:firewall-cmd --get-services
端口转发
启用区域的伪装功能(用于IP和端口映射):firewall-cmd --zone=public --add-masquerade --permanent
查询区域伪状态:firewall-cmd --zone=public --query-masquerade
IP和端口转发:firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toaddr=192.168.180.131:toport=80 --permanent
本机端口转发:firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=8080
应急模式
启用应急模式阻断所有网络连接:firewall-cmd --panic-on
禁用应急模式:firewall-cmd --panic-off
查询应急模式:firewall-cmd --query-panic
禁止某个IP访问服务器:
firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address="37.49.16.122" drop'
4 网络设置
永久性修改主机名:
hostnamectl set-hostname <主机名>
内网网卡配置:
TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
#IPV6INIT=yes
#IPV6_AUTOCONF=yes
#IPV6_DEFROUTE=yes
#IPV6_PEERDNS=yes
#IPV6_PEERROUTES=yes
#IPV6_FAILURE_FATAL=no
NAME=eno33559296
UUID=fda7f900-0e7d-4b1a-8d45-76c13a
DEVICE=eno33559296
ONBOOT=yes
IPADDR=192.168.10.100
NETMASK=255.255.255.0
外网网卡配置:
TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
#IPV4_FAILURE_FATAL=no
#IPV6INIT=yes
#IPV6_AUTOCONF=yes
#IPV6_DEFROUTE=yes
#IPV6_PEERDNS=yes
#IPV6_PEERROUTES=yes
#IPV6_FAILURE_FATAL=no
NAME=eno16780032
UUID=f75f56c4-ebc5-4394-b5b5-37ebd49
DEVICE=eno16780032
ONBOOT=yes
IPADDR=183.3.221.149
NETMASK=255.255.255.128
GATEWAY=183.3.221.129
或(可以把DNS写进去)
TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
NAME=eth0
UUID=c342e706-d813-4157-b9c1-b76c6121f1a1
DEVICE=eth0
ONBOOT=yes
IPADDR=61.144.244.107
PREFIX=24
GATEWAY=61.144.244.254
DNS1=202.96.134.133
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_PRIVACY=no