Linux centos7/rhel7新特性詳解(1)

2018-07-31 14:46 更新

RHEL7/CENTOS7新特性:

1、身份管理

kerberos的跨平臺(tái)信任機(jī)制:kerberos將完全兼容微軟活動(dòng)目錄,實(shí)現(xiàn)完全使用活動(dòng)目錄進(jìn)行認(rèn)證。

REALMD:該功能簡(jiǎn)化了RHEL 加入微軟活動(dòng)目錄的配置,支持自動(dòng)發(fā)現(xiàn)域信息。

RHEL 7增加了兩個(gè)關(guān)鍵性的新特征改善了RHEL對(duì)AD的處理方式?,F(xiàn)在,RHEL7AD之間建立了跨域信任(Cross-realm trusts),因此AD用戶可以在Linux端無(wú)需登錄就能訪問(wèn)資源。RHEL 7增加的另外一個(gè)AD相關(guān)的功能是realmd,實(shí)現(xiàn)自動(dòng)化查詢與添加AD(或其他紅帽認(rèn)證服務(wù))DNS信息。

2、性能管理

性能輔助工具:RHEL7 提供了一個(gè)新的框架和一個(gè)新的通用圖形界面來(lái)提供性能輔助管理??梢允占⒎治鱿到y(tǒng)瓶頸。

調(diào)優(yōu)和調(diào)優(yōu)配置:RHEL7 提供了動(dòng)態(tài)調(diào)優(yōu)方案,來(lái)解決系統(tǒng)性能瓶頸問(wèn)題。系統(tǒng)管理員也可以手動(dòng)修改系統(tǒng)預(yù)置的方案來(lái)達(dá)到調(diào)優(yōu)的效果

3、虛擬化

增強(qiáng)RHEL7虛擬機(jī):完全兼容vmwarevshpere架構(gòu),RHEL7 自帶 open vmtool 、3D圖形驅(qū)動(dòng)和OpenGLX11 的支持。使得RHEL7 部署在vmware平臺(tái)更加方便。RHEL 7 同時(shí)支持vmware esxi 之間快速通信。

虛擬I/O:為每臺(tái)虛擬機(jī)提供了調(diào)用底層PCI 設(shè)備的接口,實(shí)現(xiàn)內(nèi)核級(jí)別的隔離。提高了機(jī)器的安全性和兼容性
虛擬機(jī)USB3.0接口支持
QCOW2格式文件型快照支持
嵌套虛擬化支持,可以在KVM中安裝配置OpenStack
加強(qiáng)了對(duì)VMWARE的技術(shù)支持,自帶open-vm-tools替換vm-tools
支持最熱的技術(shù)Docker
Docker是基于目前流行的應(yīng)用虛擬化技術(shù)。應(yīng)用被打包在Docker中,與系統(tǒng)和其他應(yīng)用完全隔離,因此可以在系統(tǒng)之間遷移并正常運(yùn)行。

4、文件系統(tǒng)

RHEL7 選擇XFS作為其默認(rèn)的文件系統(tǒng),。

RHEL7.0在安裝的時(shí)候就默認(rèn)使用了XFS,并不是說(shuō)原有的EXT文件系統(tǒng)不再使用,RHEL7仍然是支持ext4.而是面對(duì)未來(lái)爆炸式增長(zhǎng)的數(shù)據(jù)量,ext文件系統(tǒng)已經(jīng)顯得原來(lái)越力不從心。XFS文件系統(tǒng)完全為大數(shù)據(jù)而生,單個(gè)文件系統(tǒng)最大可以支持到8EB大小,單個(gè)文件的大小最大可達(dá)到16T,并且提供了豐富的日志系統(tǒng),是應(yīng)對(duì)大數(shù)據(jù)存儲(chǔ)的強(qiáng)大的文件系統(tǒng)。

XFS是擴(kuò)展性高、高性能的文件系統(tǒng)。也是rhel7/centos7的默認(rèn)文件系統(tǒng)。

可通過(guò)工具xfsdumpxfsrestore來(lái)備份和恢復(fù)xfs文件系統(tǒng),

6、網(wǎng)絡(luò)管理

新增網(wǎng)絡(luò)管理接口NMCLI

7、服務(wù)管理

使用systemctl 調(diào)用服務(wù)腳本

RHEL7中使用systemd取代了原有的sysV,由systemd來(lái)管理系統(tǒng)中的服務(wù)。Systemd定義了與原來(lái)sysV init進(jìn)程完全不同的方式對(duì)服務(wù)和系統(tǒng)進(jìn)程進(jìn)行管理。使得系統(tǒng)中的服務(wù)可以自動(dòng)解決服務(wù)之間的依賴關(guān)系,并且可以支持服務(wù)的并行啟動(dòng)!也就是說(shuō),RHEL7.0比原有的sysV操作系統(tǒng)啟動(dòng)速度更快,更穩(wěn)定,同時(shí)也可以完美的支持Docker

8、RHEL7桌面

使用最新的Gnome 3為默認(rèn)桌面環(huán)境,使用最新的KDE 4.10為備選桌面環(huán)境。

一、RHEL7安裝體驗(yàn):

生產(chǎn)服務(wù)器如果是大內(nèi)存(4G以上內(nèi)存),建議安裝64位版本rhel-server-7.0-x86_64-dvd.iso

啟動(dòng)加載后如下圖:

   

                        

界面說(shuō)明:

InstallRed Hat Enterprise Linux 7.0   安裝RHEL7系統(tǒng)

Testthis media & install Red Hat Enterprise Linux 7.0  測(cè)試安裝介質(zhì)及安裝RHEL7系統(tǒng) (相對(duì)于RHEL6來(lái),將檢測(cè)媒介提前到初始安裝頁(yè)面中)

Troubleshooting 故障排除

選擇Troubleshooting可以從下面界面看到:

安裝基本的圖形模式

安裝救援系統(tǒng)

從本地驅(qū)動(dòng)器啟動(dòng)

內(nèi)存測(cè)試

返回菜單

返回菜單,選擇第一項(xiàng)Install Red HatEnterprise Linux 7.0 按回車,系統(tǒng)開(kāi)始安裝見(jiàn)下圖:

安裝過(guò)程語(yǔ)言的選擇,正式生產(chǎn)服務(wù)器建議安裝英文版本,這里保持默認(rèn)英文點(diǎn)擊下一步

單擊continue

進(jìn)入到了安裝匯總頁(yè)面,從此頁(yè)面顯示三大塊分別為:

LOCALIZATION 本地化:可以看在此下面配置時(shí)間時(shí)區(qū),鍵盤設(shè)置以及語(yǔ)言

SOFTWARE 軟件:SOFTWARE下面可以到安裝來(lái)源和自定義軟件安裝,默認(rèn)系統(tǒng)選擇最小化的安裝

SYSTEM  系統(tǒng):安裝目標(biāo)設(shè)備和網(wǎng)絡(luò)配置

附:

可以在system系統(tǒng)中的installation destination進(jìn)行磁盤分區(qū)管理:自動(dòng)分區(qū)和手動(dòng)分區(qū)

這里我創(chuàng)建如下分區(qū):

/boot 分區(qū)     500MB

swap分區(qū)      4096MB(一般設(shè)置為內(nèi)存的2倍)

/分區(qū)剩余全部空間

備注:生產(chǎn)服務(wù)器建議單獨(dú)再劃分一個(gè)/data分區(qū)存放數(shù)據(jù)

點(diǎn)擊左上角的done,進(jìn)入下面的界面

點(diǎn)擊accept changes,回到安裝匯總頁(yè)面,點(diǎn)擊begin installation,進(jìn)入下面界面:

選擇user settingsroot password,設(shè)置root賬戶的口令。

安裝完成之后,點(diǎn)擊reboot重啟

在用U盤裝完CentOS后,重新開(kāi)機(jī)啟動(dòng)后顯示:
Initialsetup of CentOS 
Linux 7 (core)
1) [x]Creat user 2) [!] License information
(no userwill be created) (license not accepted)
Pleasemake your choice from above [‘q’ to quit | ‘c’to continue | ‘r’ to refresh]:
解決方法:
輸入“1”,按Enter鍵
輸入“2”,按Enter鍵
輸入“q”,按Enter鍵
輸入“yes”,按Enter鍵

重啟后進(jìn)入到初始安裝界面,配置license 及注冊(cè)設(shè)置。

系統(tǒng)首次初始化后,就進(jìn)入了啟動(dòng)界面

第一項(xiàng)是正常啟動(dòng)系統(tǒng),第二項(xiàng)是以恢復(fù)啟動(dòng)系統(tǒng)。

1:系統(tǒng)默認(rèn)編碼設(shè)置文件,由/etc/sysconfig/i18n 更改為 /etc/locale.conf該文件主定義你當(dāng)前系統(tǒng)的語(yǔ)言環(huán)境變量設(shè)置,這里是LANG=”en_US.UTF-8”、系統(tǒng)預(yù)置了那些

語(yǔ)言支持,

2:常用命令安裝:查看anaconda-ks.cfg,確定是否裝base軟件組

顯示部份信息如下:

若沒(méi)安裝base軟件組,則一些常規(guī)命令如ifconfig等就無(wú)法使用??梢允褂?/span>yumgroupinstall base安裝base軟件組。


二、rhel7默認(rèn)運(yùn)行級(jí)別和終端分辨率修改

修改默認(rèn)運(yùn)行級(jí)別:

rhel7.0 做了很多大的改變,打開(kāi)inittab看下

# inittab is no longer used whenusing systemd.      

/etc/inittab 這個(gè)文件已經(jīng)不再使用,systemd對(duì)linux來(lái)說(shuō)就是一個(gè)init程序,可以作為sysVinit和Upstat的替代。

systemd使用比sysvinit的運(yùn)行級(jí)別更為自由的target概念作為替代

第三運(yùn)行級(jí):multi-user.target

第五運(yùn)行級(jí):graphical.target

#前者是符號(hào)鏈接指向了后面的target

runlevel3.target-> multi-user.target

runlevel5.target-> graphical.target

如下圖所示:


修改開(kāi)機(jī)默認(rèn)運(yùn)行級(jí)別:

方法1

默認(rèn)級(jí)別轉(zhuǎn)換為3(文本模式)

ln -sf /lib/systemd/system/multi-user.target/etc/systemd/system/default.target

或者默認(rèn)級(jí)別轉(zhuǎn)換為5(圖形模式)

ln -sf /lib/systemd/system/graphical.target/etc/systemd/system/default.target

重啟:reboot

方法2:

systemctl set-default multi-user.target

用這個(gè)systemctl命令來(lái)查看默認(rèn)目標(biāo)。

systemctl get-default

切換運(yùn)行級(jí)別:

方法1:

切換到:運(yùn)行級(jí)3

這兩種都可以

systemctlisolate multi-user.target
systemctlisolate runlevel3.target

切換到:運(yùn)行級(jí)5

這兩種都可以

systemctlisolate graphical.target
systemctlisolate runleve5.target

方法2:

init  [0123456]

#查看當(dāng)前運(yùn)行的級(jí)別

runlevel //仍然可用

修改安字符終端分辨率:

由于是在VM里面安裝的,完了之后終端界面的分辨率非常高,很難操作

因?yàn)镽HEL7用了grub2,而不再是grub了,在grub2中要修改的文件是/boot/grub2/grub.cfg;

這里有一張分辨率的對(duì)照表(在grub.cfg中添加vga=ask,系統(tǒng)重啟后就會(huì)詢問(wèn)要設(shè)置的分辨率。)

修改前:

修改后,在后面添加vga=0x???(問(wèn)號(hào)代表分辨率代碼),

附:如何實(shí)現(xiàn)rhel7圖形界面自動(dòng)登陸:

首先找到/etc/gdm/custom.conf文件

然后在custom.conf文件里在daemon下加入下面的內(nèi)容:

AutomaticLoginEnable=true 
AutomaticLogin=root

三、設(shè)置主機(jī)名

rhel7不再使用/etc/sysconfig/network設(shè)置主機(jī)名,而是使用/etc/hostname文件,下面就介紹有關(guān)rhel7設(shè)置主機(jī)名的幾種方法。

方法:1

修改/etc/hostname文件設(shè)置主機(jī)名。

方法:2

執(zhí)行hostnamectl命令

使用hostnamectl命令,
hostnamectl set-hostname name,再通過(guò)hostname或者h(yuǎn)ostnamectl status
命令查看更改是否生效。

方法:3

執(zhí)行nmtui命令

使用nmtui命令會(huì)彈出一工具界面

選擇第三項(xiàng)"set system hostname"修改主機(jī)名

修改后選擇"ok"退出nmtui工具。

執(zhí)行systemctl restart systemd-hostnamed
執(zhí)行hostname或hostnamectl查看。

方法:4

執(zhí)行nmcli命令

nmcli general hostname查看主機(jī)名
nmcli general hostnamemy-server 設(shè)置主機(jī)名
執(zhí)行systemctl restartsystemd-hostnamed使修改生效

四、設(shè)置IP地址、網(wǎng)關(guān)和DNS

RHEL7里面的網(wǎng)卡命名方式從eth0,1,2的方式變成了enoXXXXX的格式。 en 代表的是enthernet (以太網(wǎng)),o 代表的是onboard (內(nèi)置),那一串?dāng)?shù)字是主板的某種索引編號(hào)自動(dòng)生成,以便保證其唯一性。和原先的命名方式對(duì)比,這種新的方式比較長(zhǎng),難以記憶,不過(guò)優(yōu)點(diǎn)在于編號(hào)唯一,做系統(tǒng)遷移的時(shí)候不容易出錯(cuò)。

說(shuō)明:RHEL 7.0默認(rèn)安裝好之后是沒(méi)有自動(dòng)開(kāi)啟網(wǎng)絡(luò)連接的!

方法1、進(jìn)入網(wǎng)絡(luò)置配文件目錄,修改網(wǎng)卡配置文件,如下圖所示:

TYPE="Ethernet|Bridge"網(wǎng)絡(luò)接口類型
BOOTPROTO="static|none"  #啟用靜態(tài)IP地址(BOOTPROTO=dhcp啟用動(dòng)態(tài)獲取IP)
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes|no"  是否支持IPV6
USERCTL="yes|no"   是否允許普通用戶控制此接口
PEERDNS="yes|no"  是不是接受DHCP服務(wù)器指派的DNS服務(wù)器地址
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
NAME="eno16777736"
UUID="8071cc7b-d407-4dea-a41e-16f7d2e75ee9" 設(shè)備標(biāo)識(shí)號(hào)
ONBOOT="yes"  #開(kāi)啟自動(dòng)啟用網(wǎng)絡(luò)連接(默認(rèn)值為no)
IPADDR0="192.168.21.128"  #設(shè)置IP地址   只有在BOOTPROTO={none|static}設(shè)置才有效
PREFIX0="24"  #設(shè)置子網(wǎng)掩碼   此設(shè)置也可用 PREFIX=n (n為掩碼位數(shù))
GATEWAY0="192.168.21.2"  #設(shè)置網(wǎng)關(guān)      要與IP地址屬于同一網(wǎng)段
DNS1="8.8.8.8"  #設(shè)置主DNS
DNS2="8.8.4.4"  #設(shè)置備DNS
HWADDR="00:0C:29:EB:F2:B3"
IPV6_PEERDNS="yes"
IPV6_PEERROUTES="yes"
service networkrestart   #重啟網(wǎng)絡(luò)

查看ip信息:

Ifconfig命令或
ip  addr  show 或
ip  addr show dev 網(wǎng)絡(luò)設(shè)備名或
ip addr查看所有網(wǎng)卡信息。

#ip  addr show dev eno16777736

1.接口狀態(tài) 

2.硬件

3.IPv4地址與子網(wǎng)

4.廣播地址,范圍,設(shè)備名稱

5.IPv6信息

ip 命令現(xiàn)實(shí)關(guān)于網(wǎng)絡(luò)性能的統(tǒng)計(jì)信息,接收(RX)發(fā)送(TX)數(shù)據(jù)包。

用nmcli connection show網(wǎng)卡信息

測(cè)試網(wǎng)絡(luò)是否正常:

ping www.baidu.com  #測(cè)試網(wǎng)絡(luò)是否正常

traceroute 和 mtr 顯示出我們到達(dá)一個(gè)網(wǎng)絡(luò)所經(jīng)過(guò)的路由信息

yum -y install traceroute

yum -y install mtr

traceroutewww.baidu.com

mtr是Red Hat自帶的工具,結(jié)合了"traceroute"和"ping"功能于一身診斷工具

第一列:顯示的是IP地址和本機(jī)域名,這點(diǎn)和tracert很像

第二列:是顯示的每個(gè)對(duì)應(yīng)IP的丟包率
第三列:snt設(shè)置每秒發(fā)送數(shù)據(jù)包的數(shù)量,默認(rèn)值是10 可以通過(guò)參數(shù) -c來(lái)指定

第四列:顯示的最近一次的返回時(shí)延
第五列:是平均值這個(gè)應(yīng)該是發(fā)送ping包的平均時(shí)延
第六列:是最好或者說(shuō)時(shí)延最短的
第七列:是最差或者說(shuō)時(shí)延最常的
第八列:是標(biāo)準(zhǔn)偏差

ethtool:查看網(wǎng)路接口設(shè)備本身的屬性

ethtool  網(wǎng)卡接口名稱

方法2:執(zhí)行nmtui命令

使用nmtui命令會(huì)彈出一工具界面

重啟network服務(wù)。

方法3:通過(guò)nm-connection-editor來(lái)配置連接(注:必須在圖形界面下運(yùn)行)

配置好了,重啟網(wǎng)絡(luò)服務(wù),執(zhí)行ifconfig或ip addr發(fā)現(xiàn)已經(jīng)獲取了新的地址。

一旦該連接建立成功,在/etc/sysconfig/networks-scripts下面就會(huì)自動(dòng)創(chuàng)建同名的配置文件

方法4:nmcli命令

nmcli是個(gè)很強(qiáng)大的命令,后面一大堆選項(xiàng)和對(duì)象可以配置??纯磶椭臋n,對(duì)象可以是綜合信息,網(wǎng)絡(luò),信號(hào)和連接。這里我們主要是學(xué)習(xí)連接的配置使用

如何配置連接,還是先看看幫助,他后面可以跟show,up, down, add, modify, edit, delete, reload,

看看device有哪些參數(shù)

查看具體的設(shè)備信息可以通過(guò) nmcli connection show 設(shè)備名來(lái)查看

添加一個(gè)新連接,先先看看幫助

修改現(xiàn)有連接,可以先先看看幫助

nmcliconnection modify --help

 附:修改RHEL7的網(wǎng)卡名稱

RHEL7安裝完成之后,默認(rèn)的網(wǎng)卡名稱是eno16777736

輸入如下命令,進(jìn)入對(duì)應(yīng)目錄,編輯文件:

vim /etc/sysconfig/grub

然后,往這個(gè)文件中添加“net.ifnames=0biosdevname=0”內(nèi)容,作用是禁用該可預(yù)測(cè)命名規(guī)則,如下圖所示:

接著執(zhí)行下面的命令,效果如下:

然后,重啟系統(tǒng)后查看網(wǎng)卡名稱

五、服務(wù)控制

Systemd對(duì)linux來(lái)說(shuō),就是一個(gè)init程序,可以作為sysVinit和Upstat的替代

RHEL7監(jiān)視和控制systemd的主要命令是systemctl,該命令可以用于查看系統(tǒng)狀態(tài)和管理系統(tǒng)及服務(wù)。

RHEL7的服務(wù)systemctl腳本存放在:/usr/lib/systemd/,有系統(tǒng)(system)和用戶(user)之分,像需要開(kāi)機(jī)不登陸就能運(yùn)行的程序,存在系統(tǒng)服務(wù)里,即:/usr/lib/systemd/system目錄下。每一個(gè)服務(wù)以.service結(jié)尾,一般會(huì)分為3部分:[Unit]、[Service]和[Install]

[Unit]部分主要是對(duì)這個(gè)服務(wù)的說(shuō)明,內(nèi)容包括Description和After,Description用于描述服務(wù),After用于描述服務(wù)類別

 

[Service]部分是服務(wù)的關(guān)鍵,是服務(wù)的一些具體運(yùn)行參數(shù)的設(shè)置,這里Type=forking是后臺(tái)運(yùn)行的形式,PIDFile為存放PID的文件路徑,ExecStart為服務(wù)的具體運(yùn)行命令,ExecReload為重載命令,ExecStop為停止命令,注意:[Service]部分的啟動(dòng)、重啟、停止命令全部要求使用絕對(duì)路徑,使用相對(duì)路徑則會(huì)報(bào)錯(cuò)!

 

[Install]部分是服務(wù)安裝的相關(guān)設(shè)置,可設(shè)置為多用戶的.

注意: 如果服務(wù)沒(méi)有Install段落,一般意味著應(yīng)該通過(guò)其它服務(wù)自動(dòng)調(diào)用它們

使用systemd時(shí),可通過(guò)正確編寫單元配置文件來(lái)解決其依賴關(guān)系。典型的情況是,服務(wù)A要求服務(wù)B在A啟動(dòng)之前運(yùn)行。在此情況下,向服務(wù)A配置文件中的 [Unit] 段添加Requires=B 和 After=B 即可

 

我們對(duì)service和chkconfig兩個(gè)命令都不陌生,RHEL7系統(tǒng)中systemctl 是管制服務(wù)的主要工具,它整合了chkconfig 與 service功能于一體。

systemctl命令的基本操作格式是:

systemctl   動(dòng)作服務(wù)名.service

查看一下--help的信息

systemd提供更優(yōu)秀的框架以表示系統(tǒng)服務(wù)間的依賴關(guān)系實(shí)現(xiàn)系統(tǒng)初始化時(shí)服務(wù)的并行啟動(dòng),同時(shí)達(dá)到降低Shell的系統(tǒng)開(kāi)銷的效果,systemd的目標(biāo)是盡可能啟動(dòng)更少進(jìn)程;盡可能將更多進(jìn)程并行啟動(dòng)。

 

分析系統(tǒng)狀態(tài):

systemctl 或systemctl list-units  #輸出激活的單元
systemctl list-units--type=service #列出active狀態(tài)的服務(wù)
systemctl list-unit-files列出所有已安裝服務(wù)
systemctl --failed #顯示啟動(dòng)失敗的服務(wù)
systemd-cgls以樹形列出正在運(yùn)行的進(jìn)程

所有可用的單元文件存放在 /usr/lib/systemd/system/ 和 /etc/systemd/system/ 目錄(后者優(yōu)先級(jí)更高)

使用單元:

一個(gè)單元可以是系統(tǒng)服務(wù)(.service)、掛載點(diǎn)(.mount)、sockets(.sockets)。

使用 systemctl 控制單元時(shí),通常需要使用單元文件的全名,包括擴(kuò)展名(例如sshd.service)。但是有些單元可以在systemctl中使用簡(jiǎn)寫方式。如果無(wú)擴(kuò)展名,systemctl 默認(rèn)把擴(kuò)展名當(dāng)作 .service。例如sshd和sshd.service 是等價(jià)的。

掛載點(diǎn)會(huì)自動(dòng)轉(zhuǎn)化為相應(yīng)的 .mount 單元。例如 /home 等價(jià)于 home.mount。

設(shè)備會(huì)自動(dòng)轉(zhuǎn)化為相應(yīng)的 .device 單元,所以 /dev/sda2 等價(jià)于 dev-sda2.device。

systemctl start <單元>      #立即啟動(dòng)單元
systemctl stop <單元>      #立即停止單元
systemctl restart <單元>    #重啟單元
systemctl reload <單元>     #重新讀取單元配置
systemctl status <單元>     #輸出單元運(yùn)行狀態(tài)
systemctl is-enabled <單元>   #檢查單元是否配置為自動(dòng)啟動(dòng)
systemctl enable <單元>     #開(kāi)機(jī)自動(dòng)啟動(dòng)單元
systemctl disable <單元>     #取消開(kāi)機(jī)自動(dòng)激活單元
systemctl is-active<單元>    #查看單元是不是正在運(yùn)行
systemctl daemon-reload      #重新載入 systemd,掃描新的或有變動(dòng)的單元

電源管理:

systemctl reboot    #重啟
systemctl poweroff     #退出系統(tǒng)并停止電源

例如:

systemctl is-enablediptables.servicesystemctl is-enabled servicename.service 
#查詢服務(wù)是否開(kāi)機(jī)啟動(dòng)systemctl enable *.service 
#開(kāi)機(jī)運(yùn)行服務(wù)systemctl disable *.service 
#取消開(kāi)機(jī)運(yùn)行systemctl start *.service 
#啟動(dòng)服務(wù)systemctl stop *.service 
#停止服務(wù)systemctl restart *.service 
#重啟服務(wù)systemctl reload *.service 
#重新加載服務(wù)配置文件systemctl status *.service 
#查詢服務(wù)運(yùn)行狀態(tài)systemctl mask *.service 
#禁用指定服務(wù)systemctl unmask *.service  
#激活指用服務(wù)

注:*代表某個(gè)服務(wù)的名字,如http的服務(wù)名為httpd

案例:

查看服務(wù)的狀況

停止 sshd服務(wù),查看狀態(tài)

狀態(tài)表示為dead服務(wù)已經(jīng)停止。

disable 服務(wù),禁止開(kāi)機(jī)自動(dòng)運(yùn)行

開(kāi)機(jī)自動(dòng)加載,并啟動(dòng)該服務(wù)

通過(guò)mask來(lái)禁用該服務(wù),這樣一旦服務(wù)終止,則無(wú)法再啟動(dòng),必須通過(guò)unmask解除禁用才能使用systemctl start sshd 來(lái)運(yùn)行服務(wù)

除了上面提到的基本功能,systemctl還可以查詢當(dāng)前加載的模塊單元,注意后綴為service的才是我們需要管理的服務(wù)

可以通過(guò) type來(lái)過(guò)濾掉其他類型的單元

systemctl list-unit-files –typeservice

六:防火墻

Redhat Enterprise Linux7已經(jīng)默認(rèn)使用firewalld作為防火墻,其使用方式已經(jīng)變化。

基于iptables的防火墻被默認(rèn)不啟動(dòng),但仍然可以繼續(xù)使用。

RHEL7中有幾種防火墻共存:firewalld、iptables、ebtables等,默認(rèn)使用firewalld作為防火墻,管理工具是firewall-cmd。RHEL7的內(nèi)核版本是3.10,在此版本的內(nèi)核里防火墻的包過(guò)濾機(jī)制是firewalld,使用firewalld來(lái)管理netfilter,不過(guò)底層調(diào)用的命令仍然是iptables等。因?yàn)檫@幾種daemon是沖突的,所以建議禁用其他幾種服務(wù)

例如若要禁用iptables、ip6tables、ebtables防火墻,方法如下圖

查看這幾種服務(wù)是否正在運(yùn)行

RHEL7雖然有iptables但是不建議使用了,使用新的firewalld服務(wù)。

查看firewalld軟件包是否安裝

Firewalld提供了支持網(wǎng)絡(luò)/防火墻區(qū)域(zone)定義網(wǎng)絡(luò)鏈接以及接口安全等級(jí)的防火墻管理工具。擁有運(yùn)行時(shí)配置和永久配置選項(xiàng)。它也支持允許服務(wù)或者應(yīng)用程序直接添加防火墻規(guī)則的接口。以前的 system-config-firewall防火墻模型是靜態(tài)的,每次修改都要求防火墻完全重啟。這個(gè)過(guò)程包括內(nèi)核 netfilter 防火墻模塊的卸載和新配置所需模塊的裝載等。相反,firewall daemon 動(dòng)態(tài)管理防火墻,不需要重啟整個(gè)防火墻便可應(yīng)用更改。因而也就沒(méi)有必要重載所有內(nèi)核防火墻模塊了。

什么是區(qū)域:網(wǎng)絡(luò)區(qū)域定義了網(wǎng)絡(luò)連接的可信等級(jí)。

 數(shù)據(jù)包要進(jìn)入到內(nèi)核必須要通過(guò)這些zone中的一個(gè),而不同的zone里定義的規(guī)則不一樣(即信任度不一樣,過(guò)濾的強(qiáng)度也不一樣)。可以根據(jù)網(wǎng)卡所連接的網(wǎng)絡(luò)的安全性來(lái)判斷,這張網(wǎng)卡的流量到底使用哪個(gè)zone,比如上圖來(lái)自eth0的流量全部使用zone1的過(guò)濾規(guī)則,eth1的流量使用zone2。一張網(wǎng)卡同時(shí)只能綁定到一個(gè)zone

預(yù)定義的服務(wù):服務(wù)是端口和/或協(xié)議入口的組合。

 

端口和協(xié)議:定義了 tcp 或 udp 端口,端口可以是一個(gè)端口或者端口范圍。          

 

ICMP 阻塞:可以選擇 Internet控制報(bào)文協(xié)議的報(bào)文。這些報(bào)文可以是信息請(qǐng)求亦可是對(duì)信息請(qǐng)求或錯(cuò)誤條件創(chuàng)建的響應(yīng)。

 

偽裝:私有網(wǎng)絡(luò)地址可以被映射到公開(kāi)的IP地址。這是一次正規(guī)的地址轉(zhuǎn)換。

 

端口轉(zhuǎn)發(fā):端口可以映射到另一個(gè)端口以及/或者其他主機(jī)。

 

在進(jìn)行firewalld配置之前,我想來(lái)討論一下區(qū)域(zones)這個(gè)概念。默認(rèn)情況就有一些有效的區(qū)域。由firewalld 提供的區(qū)域按照從不信任到信任的順序排序。

丟棄區(qū)域(Drop Zone):如果使用丟棄區(qū)域,任何進(jìn)入的數(shù)據(jù)包將被丟棄。這個(gè)類似與我們之前使用iptables -j drop。使用丟棄規(guī)則意味著將不存在響應(yīng)。
阻塞區(qū)域(Block Zone):阻塞區(qū)域會(huì)拒絕進(jìn)入的網(wǎng)絡(luò)連接,返回icmp-host-prohibited,只有服務(wù)器已經(jīng)建立的連接會(huì)被通過(guò)即只允許由該系統(tǒng)初始化的網(wǎng)絡(luò)連接。
公共區(qū)域(Public Zone):只接受那些被選中的連接,默認(rèn)只允許 ssh 和 dhcpv6-client。這個(gè) zone 是缺省 zone
外部區(qū)域(External Zone):這個(gè)區(qū)域相當(dāng)于路由器的啟用偽裝(masquerading)選項(xiàng)。只有指定的連接會(huì)被接受,即ssh,而其它的連接將被丟棄或者不被接受。
隔離區(qū)域(DMZ Zone):如果想要只允許給部分服務(wù)能被外部訪問(wèn),可以在DMZ區(qū)域中定義。它也擁有只通過(guò)被選中連接的特性,即ssh。
工作區(qū)域(Work Zone):在這個(gè)區(qū)域,我們只能定義內(nèi)部網(wǎng)絡(luò)。比如私有網(wǎng)絡(luò)通信才被允許,只允許ssh,ipp-client和 dhcpv6-client。
家庭區(qū)域(Home Zone):這個(gè)區(qū)域?qū)iT用于家庭環(huán)境。它同樣只允許被選中的連接,即ssh,ipp-client,mdns,samba-client和 dhcpv6-client。
內(nèi)部區(qū)域(Internal Zone):這個(gè)區(qū)域和工作區(qū)域(Work Zone)類似,只有通過(guò)被選中的連接,和home區(qū)域一樣。
信任區(qū)域(Trusted Zone):信任區(qū)域允許所有網(wǎng)絡(luò)通信通過(guò)。記?。阂?yàn)閠rusted是最被信任的,即使沒(méi)有設(shè)置任何的服務(wù),那么也是被允許的,因?yàn)閠rusted是允許所有連接的

以上是系統(tǒng)定義的所有的 zone,但是這些 zone 并不是都在使用。只有活躍的 zone 才有實(shí)際操作意義。

Firewalld的原則:

如果一個(gè)客戶端訪問(wèn)服務(wù)器,服務(wù)器根據(jù)以下原則決定使用哪個(gè) zone 的策略去匹配
1.如果一個(gè)客戶端數(shù)據(jù)包的源 IP 地址匹配 zone 的 sources,那么該 zone 的規(guī)則就適
用這個(gè)客戶端;一個(gè)源只能屬于一個(gè)zone,不能同時(shí)屬于多個(gè)zone。
2.如果一個(gè)客戶端數(shù)據(jù)包進(jìn)入服務(wù)器的某一個(gè)接口(如eth0)區(qū)配zone的interfaces,
則么該 zone 的規(guī)則就適用這個(gè)客戶端;一個(gè)接口只能屬于一個(gè)zone,不能同時(shí)屬于多個(gè)zone。
3.如果上述兩個(gè)原則都不滿足,那么缺省的zone 將被應(yīng)用

你可以使用任何一種 firewalld 配置工具來(lái)配置或者增加區(qū)域,以及修改配置。工具有例如firewall-config 這樣的圖形界面工具, firewall-cmd 這樣的命令行工具,或者你也可以在配置文件目錄中創(chuàng)建或者拷貝區(qū)域文件,/usr/lib/firewalld/zones 被用于默認(rèn)和備用配置,/etc/firewalld/zones被用于用戶創(chuàng)建和自定義配置文件。

命令行工具firewall-cmd支持全部防火墻特性,基本應(yīng)用如下:

一般應(yīng)用:

1、  獲取firewalld狀態(tài)

2、在不改變狀態(tài)的條件下重新加載防火墻:

如果你使用--complete-reload,狀態(tài)信息將會(huì)丟失。

3、獲取支持的區(qū)域列表

這條命令輸出用空格分隔的列表

4、獲取所有支持的服務(wù)

這條命令輸出用空格分隔的列表。

服務(wù)是firewalld所使用的有關(guān)端口和選項(xiàng)的規(guī)則集合。被啟動(dòng)的服務(wù)會(huì)在firewalld服務(wù)開(kāi)啟或者運(yùn)行時(shí)自動(dòng)加載。默認(rèn)情況下,很多服務(wù)是有效的。使用下面命令可列出有效的服務(wù)。

想要列出默認(rèn)有效的服務(wù),也可以進(jìn)入下面的目錄也能夠取得。

# cd /usr/lib/firewalld/services/

想要?jiǎng)?chuàng)建自己的服務(wù),需要在下面的目錄下定義它。比如,現(xiàn)在我想添加一個(gè)rhmp服務(wù),端口號(hào)1935。首先,任選一個(gè)服務(wù)復(fù)制過(guò)來(lái)。

接下來(lái)把復(fù)制過(guò)來(lái)的文件重命名為“rtmp.xml”,

接下來(lái)打開(kāi)并編輯文件的頭部、描述、協(xié)議和端口號(hào),以供RTMP服務(wù)使用,如下圖所示。

重啟firewalld服務(wù)或者重新加載設(shè)置,以激活這些設(shè)置。

# firewall-cmd --reload

為確認(rèn)服務(wù)是否已經(jīng)啟動(dòng),運(yùn)行下面的命令獲取有效的服務(wù)列表。

# firewall-cmd --get-services

5、獲取所有支持的ICMP類型

這條命令輸出用空格分隔的列表。

6、列出全部啟用的區(qū)域的特性(即查詢當(dāng)前防火墻策略)

解釋:特性可以是定義的防火墻策略,如:服務(wù)、端口和協(xié)議的組合、端口/數(shù)據(jù)報(bào)轉(zhuǎn)發(fā)、偽裝、ICMP 攔截或自定義規(guī)則等

上面的命令將會(huì)列出每種區(qū)域如block、dmz、drop、external、home、internal、public、trusted以及work。如果區(qū)域還有其它詳細(xì)規(guī)則(rich-rules)、啟用的服務(wù)或者端口,這些區(qū)域信息也會(huì)分別被羅列出來(lái)

7、輸出區(qū)域全部啟用的特性。如果省略區(qū)域,將顯示默認(rèn)區(qū)域的信息。

firewall-cmd [--zone=] --list-all

輸出指定區(qū)域啟動(dòng)的特性

8、查看默認(rèn)區(qū)域

public區(qū)域是默認(rèn)區(qū)域。

在文件/etc/firewalld/firewalld.conf中定義成DefaultZone=public。

9、設(shè)置默認(rèn)區(qū)域

firewall-cmd --set-default-zone=區(qū)域名

流入默認(rèn)區(qū)域中配置的接口的新訪問(wèn)請(qǐng)求將被置入新的默認(rèn)區(qū)域。當(dāng)前活動(dòng)的連接將不受影響。

10、獲取活動(dòng)的區(qū)域

這條命令將用以下格式輸出每個(gè)區(qū)域所含接口:

區(qū)域名

interfaces :  接口名

11、根據(jù)接口獲取區(qū)域即需要查看哪個(gè)區(qū)域和這個(gè)接口綁定即查看某個(gè)接口是屬于哪個(gè)zone的:

firewall-cmd --get-zone-of-interface=接口名

這條命令將輸出接口所屬的區(qū)域名稱。

12、將接口(網(wǎng)卡)增加到區(qū)域

firewall-cmd [--zone=] --add-interface=接口名

如果接口不屬于區(qū)域,接口將被增加到區(qū)域。如果區(qū)域被省略了,將使用默認(rèn)區(qū)域。接口在重新加載后將重新應(yīng)用。

13、修改接口所屬區(qū)域

firewall-cmd [--zone=] --change-interface=接口名

這個(gè)選項(xiàng)與--add-interface 選項(xiàng)相似,但是當(dāng)接口已經(jīng)存在于另一個(gè)區(qū)域的時(shí)候,該接口將被添加到新的區(qū)域。

14、從區(qū)域中刪除一個(gè)接口

firewall-cmd [--zone=] --remove-interface=接口名

注:如果某個(gè)接口不屬于任何Zone,那么這個(gè)接口的所有數(shù)據(jù)包使用默認(rèn)的Zone的規(guī)則

15、查詢區(qū)域中是否包含某接口

firewall-cmd [--zone=] --query-interface=接口名

如果區(qū)域被省略了,將使用默認(rèn)區(qū)域

16、列舉區(qū)域中啟用的服務(wù)

firewall-cmd [ --zone= ] --list-services

如果區(qū)域被省略了,將使用默認(rèn)區(qū)域

17、啟用應(yīng)急模式阻斷所有網(wǎng)絡(luò)連接,以防出現(xiàn)緊急狀況

18、禁用應(yīng)急模式

firewall-cmd --panic-off

19、查詢應(yīng)急模式

firewall-cmd --query-panic

其他相關(guān)的配置項(xiàng)可以查看firewall-cmd的手冊(cè)頁(yè):#man  firewall-cmd

處理運(yùn)行時(shí)區(qū)域:

運(yùn)行時(shí)模式下對(duì)區(qū)域進(jìn)行的修改不是永久有效的。重新加載或者重啟后修改將失效。

1、啟用區(qū)域中的一種服務(wù)即給某個(gè)區(qū)域開(kāi)啟某個(gè)服務(wù)

firewall-cmd [--zone=區(qū)域] --add-service=服務(wù) [--timeout=秒數(shù)]

此操作啟用區(qū)域中的一種服務(wù)。如果未指定區(qū)域,將使用默認(rèn)區(qū)域。如果設(shè)定了超時(shí)時(shí)間,服務(wù)將只啟用特定秒數(shù)。

使區(qū)域中的ipp-client 服務(wù)生效60秒:

啟用默認(rèn)區(qū)域中的http服務(wù):firewall-cmd--add-service=http

2、禁用區(qū)域中的某種服務(wù)即關(guān)閉某個(gè)服務(wù)

firewall-cmd [--zone=區(qū)域] --remove-service=服務(wù)

此舉禁用區(qū)域中的某種服務(wù)。如果未指定區(qū)域,將使用默認(rèn)區(qū)域。

:禁止默認(rèn)區(qū)域中的 http 服務(wù):

3、查詢區(qū)域中是否啟用了特定服務(wù)

firewall-cmd [--zone=區(qū)域] --query-service=服務(wù)
Yes
表示服務(wù)啟用,
no
表示服務(wù)關(guān)掉了。

4、啟用區(qū)域端口和協(xié)議組合

firewall-cmd [--zone=區(qū)域] --add-port=portid[-portid]/protocol[--timeout=seconds]

此操作將啟用端口和協(xié)議的組合。端口可以是一個(gè)單獨(dú)的端口或者是一個(gè)端口范圍 - 。協(xié)議可以是tcpudp。

5、禁用端口和協(xié)議組合

firewall-cmd [--zone=區(qū)域] --remove-port=portid[-portid]/protocol

6、查詢區(qū)域中是否啟用了端口組合

7、啟用區(qū)域中的 IP 偽裝功能

firewall-cmd [--zone=區(qū)域]--add-masquerade

此操作啟用區(qū)域的偽裝功能。私有網(wǎng)絡(luò)的地址將被隱藏并映射到一個(gè)公有IP。這是地址轉(zhuǎn)換的一種形式,常用于路由。由于內(nèi)核的限制,偽裝功能僅可用于IPv4。

8、禁用區(qū)域中的 IP 偽裝

firewall-cmd [--zone=區(qū)域]--remove-masquerade

9、查詢區(qū)域的偽裝狀態(tài)

firewall-cmd [--zone=區(qū)域]--query-masquerade

注意:?jiǎn)⒂脗窝b功能的主機(jī)同時(shí)也需要開(kāi)啟轉(zhuǎn)發(fā)服務(wù):

#echo 1 > /proc/sys/net/ipv4/ip_forward
或
#vi  /etc/sysctl.conf   添加如下內(nèi)容
net.ipv4.ip_forward  =  1
保存退出并執(zhí)行#sysctl  -p使修改生效

10、啟用區(qū)域的 ICMP 阻塞功能

firewall-cmd [--zone=區(qū)域] --add-icmp-block=icmp類型

此操作將啟用選中的 Internet 控制報(bào)文協(xié)議(ICMP)報(bào)文進(jìn)行阻塞。 ICMP 報(bào)文可以是請(qǐng)求信息或者創(chuàng)建的應(yīng)答報(bào)文,以及錯(cuò)誤應(yīng)答。

11、禁止區(qū)域的 ICMP 阻塞功能

firewall-cmd [--zone=區(qū)域] --remove-icmp-block=icmp類型

12、查詢區(qū)域的 ICMP 阻塞功能

firewall-cmd [--zone=區(qū)域] --query-icmp-block=icmp類型

13、在區(qū)域中啟用端口轉(zhuǎn)發(fā)或映射

firewall-cmd [--zone=區(qū)域] --add-forward-port=port=portid[-portid]:proto=protocol[:toport=portid[-portid]][ :toaddr=address [/mask]]

端口可以映射到另一臺(tái)主機(jī)的同一端口,也可以是同一主機(jī)或另一主機(jī)的不同端口。端口號(hào)可以是一個(gè)單獨(dú)的端口或者是端口范圍 - 。協(xié)議可以為tcpudp。目標(biāo)端口可以是端口號(hào)或者是端口范圍 - 。目標(biāo)地址可以是 IPv4地址。受內(nèi)核限制,端口轉(zhuǎn)發(fā)功能僅可用于IPv4。

意思是凡是來(lái)從external進(jìn)來(lái)的22端口的數(shù)據(jù)包全部轉(zhuǎn)發(fā)到211.106.65.50

firewall-cmd --zone=external--add-forward-port=port=22:proto=tcp:toaddr=211.106.65.50

14、禁止區(qū)域的端口轉(zhuǎn)發(fā)或者端口映射

firewall-cmd [--zone=]--remove-forward-port=port=portid[-portid]:proto=protocol[ :toport=portid[-portid]][:toaddr=address [/mask]]

15、查詢區(qū)域的端口轉(zhuǎn)發(fā)或者端口映射

firewall-cmd [--zone=]--query-forward-port=port=portid[-portid]:proto=protocol[:toport=portid[-portid]][ :toaddr=address [/mask]]

處理永久區(qū)域:

永久選項(xiàng)不直接影響運(yùn)行時(shí)的狀態(tài)。這些選項(xiàng)僅在重載或者重啟服務(wù)時(shí)可用。為了使用運(yùn)行時(shí)和永久設(shè)置,需要分別設(shè)置兩者。選項(xiàng)--permanent需要是永久設(shè)置的第一個(gè)參數(shù)。

1、獲取永久選項(xiàng)所支持的服務(wù)

firewall-cmd --permanent --get-services

2、獲取永久選項(xiàng)所支持的ICMP類型列表

firewall-cmd --permanent --get-icmptypes

3、獲取支持的永久區(qū)域

firewall-cmd --permanent --get-zones

4、配置防火墻在public區(qū)域打開(kāi)http協(xié)議,并保存,以致重啟有效

firewall-cmd --permanent --zone=public --add-service=http

查看永久模式下public區(qū)域是否打開(kāi)http服務(wù)。

firewall-cmd --permanent --zone=public --query-service=http

5、防火墻開(kāi)放8080端口在public區(qū)域

firewall-cmd --permanent--zone=public --add-port=8080/tcp

6、命令行配置富規(guī)則:

  查看富規(guī)則:

# firewall-cmd --list-rich-rules

  創(chuàng)建富規(guī)則:

  firewall-cmd --add-rich-rule 'rule family=ipv4 sourceaddress=10.35.89.0/24 service  name=ftp  log prefix="ftp" level=info accept'  --permanent
  firewall-cmd --add-rich-rule 'rule family=ipv4 sourceaddress=10.35.89.0/24 port port=80 protocol=tcp   log prefix="80" level=info accept'--permanent
  firewall-cmd --add-rich-rule rule family="ipv4" sourceaddress="192.168.10.30" forward-port port="808"protocol="tcp" to-port="80" to-addr="10.10.10.2"

   富規(guī)則中使用偽裝功能可以更精確詳細(xì)的限制:

   firewall-cmd--add-rich-rule 'rule family=ipv4 source address=10.10.10.2/24  masquerade'

   僅允許部分IP訪問(wèn)本機(jī)服務(wù)配置

firewall-cmd --permanent--zone=public --add-rich-rule="rule family="ipv4"
source address="192.168.0.0/24"service name="http" accept"

禁止遠(yuǎn)程IP訪問(wèn)ssh

firewall-cmd --permanent--zone=public --add-rich-rule=’rule family=ipv4
source address=192.168.0.0/24service name=ssh reject’

7、刪除rich規(guī)則

firewall-cmd --permanent--zone=public --remove-rich-rule=’rule family=ipv4
source address=192.168.0.0/24service name=ssh reject’

8、僅允許部分IP訪問(wèn)本機(jī)端口配置

firewall-cmd --permanent--zone=public --add-rich-rule="rule family="ipv4" 
sourceaddress="192.168.0.0/24"port protocol="tcp"port="8080" accept"

            

9、創(chuàng)建rich規(guī)則,可以指定日志的前綴和輸出級(jí)別

firewall-cmd --permanent--zone=public --add-rich-rule="rule family="ipv4" sourceaddress="192.168.0.4/24"port port=8080 protocol="tcp" logprefix=proxy level=warning accept"
可以通過(guò)查看/var/log/messages日志文件


10、也可通過(guò)配置以下XML文件,進(jìn)行對(duì)防火墻的配置修改

#cat/etc/firewalld/zones/public.xml
<?xmlversion="1.0" encoding="utf-8"?>
<zone>
<short>Public</short>
<description>Foruse in public areas. You do not trust the other computers on networks
to notharm your computer. Only selected incoming connections areaccepted.</description>
<servicename="dhcpv6-client"/>
<servicename="ssh"/>
<rulefamily="ipv4">
<sourceaddress="192.168.0.4/24"/>
<servicename="http"/>
<accept/>
</rule>
</zone>

總結(jié)

netfilter 防火墻總是容易受到規(guī)則順序的影響,因?yàn)橐粭l規(guī)則在鏈中沒(méi)有固定的位置。在一條規(guī)則之前添加或者刪除規(guī)則都會(huì)改變此規(guī)則的位置。在靜態(tài)防火墻模型中,改變防火墻就是重建一個(gè)干凈和完善的防火墻設(shè)置,默認(rèn)鏈通常也沒(méi)有安全的方式添加或刪除規(guī)則而不影響其他規(guī)則。

動(dòng)態(tài)防火墻有附加的防火墻功能鏈。這些特殊的鏈按照已定義的順序進(jìn)行調(diào)用,因而向鏈中添加規(guī)則將不會(huì)干擾先前調(diào)用的拒絕和丟棄規(guī)則。從而利于創(chuàng)建更為合理完善的防火墻配置。

下面是一些由守護(hù)進(jìn)程創(chuàng)建的規(guī)則,過(guò)濾列表中啟用了在公共區(qū)域?qū)?/span> ssh , mdns ipp-client 的支持:

總結(jié):

圖形化配置工具

firewall daemon 主要的配置工具是firewall-config。它支持防火墻的所有特性。管理員也可以用它來(lái)改變系統(tǒng)或用戶策略。

命令行客戶端

firewall-cmd是命令行下提供大部分圖形工具配置特性的工具。

附錄:要想了解更多firewall防火墻更多知識(shí)可以查看firewall的相關(guān)手冊(cè)頁(yè),下圖所顯示的就是firewall防火墻的相關(guān)手冊(cè)頁(yè):

若要查看rich-rule手冊(cè)頁(yè)

例如:允許icmp協(xié)議的數(shù)據(jù)包通信


本文出自 “一盞燭光” 博客,謝絕轉(zhuǎn)載!

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)