主頁 > 作業系統 > linux入門系列15--檔案傳輸之vsftp服務

linux入門系列15--檔案傳輸之vsftp服務

2020-09-29 08:41:04 作業系統

前面的系列文章基本講完了linux管理相關的基礎知識,從本篇開始講解centos7中服務程式的部署和配置,以便為外部提供各種服務,

日常作業和娛樂中,我們所需的各種資源都離不開網路以及各種服務,我們通過網路獲取部署在其他服務器上的各種服務資源,這些服務包括檔案服務、郵件服務、媒體服務等等,

一般情況下,我們使用計算機上網的一個重要目的就是為了獲取資料,而檔案傳輸則是獲取資料的方式,因此,我們首先來了解下linux中檔案傳輸相關的知識,

一、檔案傳輸協議FTP

1.1 FTP產生背景

“無規矩不成方圓”,這說明了規則的重要性,同樣,當今的互聯網由成千上萬臺機器組成,這些機器包括個人計算機、作業站、服務器、巨型機等各種形形色色的設備,并且這些設備中使用的作業系統還不一樣,有的可能是用的windows,而有的則是Linux或其他系統,

要在這么紛繁復雜的設備之間傳輸檔案,那就必須要有一定的規則,大家都按規則辦事,傳輸的檔案才能相互識別,達到正確傳遞資訊的目的,在這種背景下,為了解決檔案傳輸的問題,檔案傳輸協議應運而生,

1.2 FTP相關概念

檔案傳輸協議(File Transfer Protocol,FTP),是一種在互聯網中進行檔案傳輸的協議,基于客戶端/服務器模式,默認使用 20、21 號埠,其中20埠是資料埠用于進行資料傳輸,21埠為命令埠,用于接收客戶端發出的相關FTP命令和引數,

本系列文章第三篇提到的所有工具都可以實作在Windows中遠程到Linux主機并上傳下載檔案,并且在Linux主機之間也可以通過scp命令上傳檔案,那為什么還需要FTP呢?個人認為應該是因為FTP一般搭建與內網之中,有具有容易搭建、方便管理的特點,并且一些FTP客戶端工具還具有檔案多點下載以及斷點續傳等功能,這些是scp做不到的,

FTP是C/S架構,也就是基于客戶端/服務器的模式,FTP服務器是按照FTP協議在互聯網上提供檔案存盤和訪問服務的主機,FTP客戶端則是向服務器發送連接請求,以建立資料傳輸鏈路的主機,

FTP協議的傳輸拓撲結構如下:

file

FTP協議作業模式有兩種:主動模式和被動模式,其中被動模式是默認的作業模式

  • 主動模式:FTP 服務器主動向客戶端發起連接請求,

  • 被動模式:FTP 服務器等待客戶端發起連接請求,

由于FTP一般部署在企業內網,如果開啟并配置了防火墻,有時候需要將FTP的作業模式設定為主動模式,才可以傳輸資料,

二、Linux下基于FTP協議工具

2.1 vsftpd服務安裝

vsftpd(very secure ftp daemon)非常安全的FTP守護行程,是一款運行在Linux系統上的免費開源的FTP服務端程式,其主要特點是:安全性高、傳輸速度快、支持虛擬用戶驗證,

默認情況Centos7中是沒有安裝vsftpd的,因此需要手動通過yum倉庫安裝,根據前文的講解可以用光碟資源自帶的yum源,也可以直接配置外網源,本例采用默認的外網yum源進行安裝,

[root@origin ~]# rpm -q vsftpd
package vsftpd is not installed
[root@origin ~]# yum install vsftpd
Loaded plugins: fastestmirror, langpacks
...省略部分內容
Installed size: 353 k
Is this ok [y/d/N]: y
Downloading packages:
vsftpd-3.0.2-25.el7.x86_64.rpm                             | 171 kB   00:00     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : vsftpd-3.0.2-25.el7.x86_64                                   1/1 
  Verifying  : vsftpd-3.0.2-25.el7.x86_64                                   1/1 
Installed:
  vsftpd.x86_64 0:3.0.2-25.el7                                                 
Complete!
[root@origin ~]# rpm -q vsftpd     
vsftpd-3.0.2-25.el7.x86_64
[root@origin ~]# 

通過rpm命令查看是否已經安裝過vsftpd,如果沒有安裝則通過yum install命令安裝即可,安裝程序中需要按提示輸入y繼續下載并安裝,

注意:從現在開始,凡是涉及到服務的配置,就要考慮防火墻和SELinux的因素,很多教程和書籍上都是直接關閉防火墻和selinux,雖然這樣在學習階段可以避免干擾,但是這樣非常不安全,另外凡是配置了服務,都要加入開機啟動中,讓其每次重啟自動生效,

安裝vsftpd服務后,會在/etc下自動生成組態檔

[root@ftpserver ~]# ll /etc/vsftpd/
total 20
-rw-------. 1 root root  125 Oct 31  2018 ftpusers
-rw-------. 1 root root  361 Oct 31  2018 user_list
-rw-------. 1 root root 5116 Oct 31  2018 vsftpd.conf
-rwxr--r--. 1 root root  338 Oct 31  2018 vsftpd_conf_migrate.sh

各個檔案的解釋

檔案名 作用
vsftpd.conf 主組態檔
ftpusers 黑名單
vsftpd_conf_migrate.sh 遷移腳本
user_list 用戶串列,與userlist_enbale和userlist_deny選項密切相關

查看主組態檔vsftpd.conf內容可以看到各項配置資訊,需要根據實際情況來進行配置,其中主要的引數和作用如下:

引數 作用
listen=[YES|NO] 是否以獨立運行的方式監聽服務
listen_address=IP地址 設定要監聽的IP地址
listen_port=21 設定FTP服務的監聽埠
download_enable=[YES|NO] 是否允許下載檔案
userlist_enable=[YES|NO] 設定用戶串列為“允許”操作
userlist_deny=[YES|NO] 設定用戶串列為“禁止”操作
max_clients=0 最大客戶端連接數,0為不限制
max_per_ip=0 同一IP地址的最大連接數,0為不限制
anonymous_enable=[YES|NO] 是否允許匿名用戶訪問
anon_upload_enable=[YES|NO] 是否允許匿名用戶上傳檔案
anon_umask=022 匿名用戶上傳檔案的umask值
anon_root=/var/ftp 匿名用戶的 FTP 根目錄
anon_mkdir_write_enable=[YES|NO] 是否允許匿名用戶創建目錄
anon_other_write_enable=[YES|NO] 是否開放匿名用戶的其他寫入權限(包括重命名、刪 除等操作權限)
anon_max_rate=0 匿名用戶的最大傳輸速率(位元組/秒),0 為不限制
local_enable=[YES|NO] 是否允許本地用戶登錄FTP
local_umask=022 本地用戶上傳檔案的umask值
local_root=/var/ftp 本地用戶的 FTP 根目錄
chroot_local_user=[YES|NO] 是否將用戶權限禁錮在FTP目錄,以確保安全
local_max_rate=0 本地用戶最大傳輸速率(位元組/秒),0為不限制

不用完全記住這些引數,需要時再來查看即可,

2.2 ftp客戶端安裝

ftp是Linux系統中以命令列界面的方式來管理FTP傳輸服務的客戶端工具,默認也是沒有安裝的,需要手動安裝,

[root@origin ~]# rpm -q ftp
package ftp is not installed
[root@origin ~]# yum install ftp
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
...省略部分內容
Total download size: 61 k
Installed size: 96 k
Is this ok [y/d/N]: y
Downloading packages:
ftp-0.17-67.el7.x86_64.rpm                                 |  61 kB   00:00     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : ftp-0.17-67.el7.x86_64                                       1/1 
  Verifying  : ftp-0.17-67.el7.x86_64                                       1/1 
Installed:
  ftp.x86_64 0:0.17-67.el7                                                     
Complete!
[root@origin ~]# rpm -q ftp     
ftp-0.17-67.el7.x86_64
[root@origin ~]# 

通過yum install命令即可安裝成功,ftp客戶端工具安裝成功后,接下來就是及操作下檔案傳輸的功能,

2.3 vsftpd三種認證模式

vsftpd作為更加安全的檔案傳輸的服務程式,允許用戶以三種認證模式登錄到FTP服務器上:匿名開放模式、本地用戶模式、虛擬用戶模式,實際生產環境中虛擬用戶模式用的較多,

  • 匿名開放模式:任何人都可以無需密碼驗證而直接登錄到FTP服務器,是一種最不安全的認證模式,

  • 本地用戶模式:是通過Linux系統本地的賬戶密碼資訊進行認證的模式,如果被黑客破解了賬戶資訊,就可以暢通無阻地登錄FTP服務器,從而完全控制整臺服務器,

  • 虛擬用戶模式:需要為FTP服務單獨 建立用戶資料庫檔案,虛擬出用來進行口令驗證的賬戶資訊,而這些賬戶資訊在 服務器系統中實際上是不存在的,僅供 FTP 服務程式進行認證使用,這樣,即使 黑客破解了賬戶資訊也無法登錄服務器,從而有效降低了破壞范圍和影響,是三種模式中最安全的一種認證模式

2.4 匿名開放模式

匿名開放模式是最不安全的一種認證模式,任何人都可以無需密碼驗證而直接登錄到FTP服務器,針對匿名用戶放開這些權限會帶來潛在危險,生產環境不建議這樣做,因此一般不會用匿名模式,盡管如此,但本節還是實際演示一下,

按之前的方法克隆準備2臺虛擬機:一臺主機名為:ftpserver ,用于安裝vsftpd服務;另外一臺主機名為:ftp,用于安裝ftp客戶端,

vsftpd 服務程式默認開啟了匿名開放模式,我們需要做的就是開放匿名用戶的上傳、下 載檔案的權限,以及讓匿名用戶創建、洗掉、更名檔案的權限,

針對匿名模式的配置主要有如下幾個引數:

引數 作用
anonymous_enable=YES 允許匿名訪問模式
anon_umask=022 匿名用戶上傳檔案的umask值
anon_upload_enable=YES 允許匿名用戶上傳檔案
anon_mkdir_write_enable=YES 允許匿名用戶創建目錄
anon_other_write_enable=YES 允許匿名用戶修改目錄名稱或洗掉目錄

配置匿名模式主要步驟如下:

2.4.1 服務器配置vsftp服務,開啟匿名模式

只需要按照上表查找主組態檔中對應的引數,如果是注射掉的就把注射去掉,如果是沒有的就新加即可,

但是考慮到該組態檔里邊的注釋資訊是在是太多了,影響配置,干脆我們把與配置無關的注射直接去掉,

[root@ftpserver ~]# mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak
[root@origin ~]# grep -v "#" /etc/vsftpd/vsftpd.conf.bak >/etc/vsftpd/vsftpd.conf
[root@ftpserver ~]# cat /etc/vsftpd/vsftpd.conf
anonymous_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
[root@ftpserver ~]# 

上邊示例中,我們先把主組態檔備份,然后通過grep命令匹配出非注釋的引數,然后再重定向將其寫入到主組態檔,這樣組態檔看起來內容就簡潔多了,

然后我們將上表的引數配置到主組態檔即可:

[root@origin ~]# vi /etc/vsftpd/vsftpd.conf
anonymous_enable=YES
anon_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES

實際上第一行已經默認開啟了,等于是添加第二到第五行即可,保存并退出,這樣就完成了vsftpd服務的配置,

配置完成后重啟服務,并添加到開機啟動,配置并開啟vsftp服務后,就可以在客戶端執行ftp命令連接到遠程的FTP服務器了,

[root@ftpserver ~]# systemctl restart vsftpd
[root@ftpserver ~]# systemctl enable vsftpd
ln -s '/usr/lib/systemd/system/vsftpd.service' '/etc/systemd/system/multi-user.target.wants/vsftpd.service'
[root@ftpserver ~]# 
[root@ftpserver ~]# ll /var/ftp/pub/
total 0
[root@ftpserver ~]# echo "ftp server content">/var/ftp/pub/ftpserver.txt
[root@ftpserver ~]# ll /var/ftp/pub/
total 4
-rw-r--r--. 1 root root 19 Jan 13 23:09 ftpserver.txt
[root@ftpserver ~]# 

在/var/ftp/pub目錄下準備檔案,供ftp客戶端下載,因為客戶端連接到FTP服務器后,默認訪問的是服務器的/var/ftp目錄(該目錄下還有一個pub目錄),

2.4.2 客戶機使用ftp服務下載檔案

在vsftpd服務程式的匿名開放認證模式下,其賬戶統一為 anonymous,密碼為空

[root@ftp ~]# ftp 192.168.78.101
ftp: connect: No route to host
ftp>

發現報錯了,此時我們首先應該想到的就是ftpserver服務器的防火墻,因此我們關閉防火墻來驗證一下

[root@ftpserver ~]# firewall-cmd --state
running
[root@ftpserver ~]# systemctl stop firewalld.service 
[root@ftpserver ~]# firewall-cmd --state
not running
[root@ftpserver ~]# 

在ftpserver服務器關閉防火墻后,在嘗試連接就可以正常連接并下載服務器上的ftpserver.txt檔案了,

[root@ftp ~]# ftp 192.168.78.101
Connected to 192.168.78.101 (192.168.78.101).
220 (vsFTPd 3.0.2)
Name (192.168.78.101:root): anonymous
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd pub
250 Directory successfully changed.
ftp> ls
227 Entering Passive Mode (192,168,78,101,132,61).
150 Here comes the directory listing.
-rw-r--r--    1 0        0              19 Jan 13 15:09 ftpserver.txt
226 Directory send OK.
ftp> get ftpserver.txt
local: ftpserver.txt remote: ftpserver.txt
227 Entering Passive Mode (192,168,78,101,115,121).
150 Opening BINARY mode data connection for ftpserver.txt (19 bytes).
226 Transfer complete.
19 bytes received in 7e-05 secs (271.43 Kbytes/sec)
ftp> 

這樣就把ftpserver服務器上的ftpserver.txt檔案下載到了當前用戶的家目錄下

[root@ftp ~]# ll
-rw-r--r--. 1 root root   19 Jan 13 23:20 ftpserver.txt
...省略部分無關的檔案
[root@ftp ~]# cat ftpserver.txt 
ftp server content
[root@ftp ~]# 

到此我們就可以使用ftp下載服務器上的檔案了,但是有個問題必須的說明一下,前邊遇到ftp連接問題時,我們直接關閉了服務器上的防火墻,但這是非常不安全的,生產環境中一般都是要求開啟防火墻,

那么防火墻是如何阻止了ftp客戶端連接呢?其實就是因為firewall防火墻默認禁止了ftp傳輸的埠號,因此可以清除防火墻的默認策略

[root@ftpserver ~]# systemctl start firewalld.service 
[root@ftpserver ~]# firewall-cmd --state              
running
[root@ftpserver ~]# iptables -F
[root@ftpserver ~]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]
[root@ftpserver ~]# 

清除防火墻默認策略并保存,這樣即使服務器不關閉防火墻也可以正常使用功能ftp功能下載檔案了,

2.4.3 通過ftp客戶端在服務器上創建目錄

接下來我們切換到pub目錄,并嘗試創建一個目錄test

ftp> cd pub
250 Directory successfully changed.
ftp> mkdir test
550 Create directory operation failed.
ftp> 

好神奇,居然報錯了,大家不用擔心,學習階段要的就是這種效果,遇到的錯誤越多,越能快速積累經驗,并建立一套分析問題和解決問題的邏輯思維套路,

分析一下,我們第一步時已經在主組態檔中添加了運行匿名用戶創建目錄和寫入檔案的權限,但為何還是會報錯呢?既然排除了是用戶權限的問題,那么是不是/var/ftp這個目錄的權限問題呢?

[root@ftpserver ~]# ll -d /var/ftp/pub
drwxr-xr-x. 2 root root 26 Jan 13 23:09 /var/ftp/pub
[root@ftpserver ~]# chown -Rf ftp /var/ftp/pub
[root@ftpserver ~]# ll -d /var/ftp/pub        
drwxr-xr-x. 2 ftp root 26 Jan 13 23:09 /var/ftp/pub
[root@ftpserver ~]# ll -d /var/ftp/
drwxr-xr-x. 3 root root 16 Jan 13 22:59 /var/ftp/

通過查看,果然發現/var/ftp目錄只有root用戶才有寫入的權限,因此我們直接把pub目錄所有者改為ftp用戶,讓ftp用戶擁有寫入的權限,我們再次來試下看能否創建檔案夾

ftp> mkdir test
550 Create directory operation failed.
ftp> 

奇怪,依然報錯,前面排除了用戶權限、目錄權限之外,我們應該想到很有可能是SELinux造成的,因此我們關閉SELinux再來驗證一下

[root@ftpserver ~]# setenforce 0
[root@ftpserver ~]# 

關閉SeLinux后后,再去創建目錄,發現創建成功

ftp> mkdir test
257 "/pub/test" created
ftp> 

因此,說明不僅要讓pub目錄的屬主擁有寫入權限,并且同時還要關閉SELinux才能創建目錄,

但是實際生產環境中不建議關閉SELinux,所以我們要弄清楚究竟SELinux哪個配置影響了

[root@ftpserver ~]# setenforce 1
[root@origin ~]# getenforce 
Enforcing
[root@origin ~]# getsebool -a | grep ftp
ftp_home_dir --> off
ftpd_anon_write --> off
ftpd_connect_all_unreserved --> off
ftpd_connect_db --> off
ftpd_full_access --> off
ftpd_use_cifs --> off
ftpd_use_fusefs --> off
ftpd_use_nfs --> off
ftpd_use_passive_mode --> off
httpd_can_connect_ftp --> off
httpd_enable_ftp_server --> off
sftpd_anon_write --> off
sftpd_enable_homedirs --> off
sftpd_full_access --> off
sftpd_write_ssh_home --> off
tftp_anon_write --> off
tftp_home_dir --> off
[root@origin ~]# 

我們查看下SELinux狀態為開啟,查看與ftp域相關的策略,其中有一條ftpd_full_access --> off其實就是這條規則導致了操作失敗,

修改該策略,并使用-P引數使其永久生效,

[root@origin ~]# setsebool -P ftpd_full_access=on

再次登錄創建目錄,發現成功了

ftp> mkdir test2
257 "/pub/test2" created
ftp> 

因此遇到問題,從用戶權限、目錄權限、網路防火墻、SELinux服務幾個方面去逐個排查,

2.5 本地用戶模式

本地模式比匿名模式更加安全,現在繼續在前面的虛擬機中做實驗,開始之前先關閉上一實驗中開啟的匿名模式,

[root@ftpserver ~]# vim /etc/vsftpd/vsftpd.conf
[root@ftpserver ~]# cat /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
#anon_umask=022
#anon_upload_enable=YES
#anon_mkdir_write_enable=YES
#anon_other_write_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
[root@ftpserver ~]# 

將anonymous_enable=YES改為NO,即關閉了本地模式,此時就不能在使用匿名模式登陸了,

另外前面新加的與匿名配置引數可以保留,也可以直接洗掉,只要總開關anonymous_enable關閉了就禁用了匿名登錄,

現在開始演示本地用戶模式操作ftp,

其實從前面的組態檔可以看出,vsfftpd服務默認既開啟了匿名模式也開啟了本地用戶模式(local_enable=YES),以下幾個引數是本地用戶模式相關的配置

引數 作用
local_enable=YES 允許本地用戶模式
write_enable=YES 設定可寫權限
local_umask=022 本地用戶模式創建檔案的 umask 值
userlist_enable=YES 啟用“禁止用戶名單”,名單檔案為 ftpusers 和 user_list
userlist_deny=YES 開啟用戶作用名單檔案功能
2.5.1 配置本地用戶模式

其實vsftpd默認已經開啟了本地用戶模式,因此沒什么可以配置的,查看下組態檔:

[root@ftpserver ~]# cat /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
#anon_umask=022
#anon_upload_enable=YES
#anon_mkdir_write_enable=YES
#anon_other_write_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
[root@ftpserver ~]# 

參考上表,與本地用戶配置相關的主要引數為:local_enable=YES,write_enable=YES,local_umask=022,如果你的組態檔默認沒配置這幾個項則手動配置一下即可,

注意,如果修改了配置需要從新啟動下vsftpd服務

[root@ftpserver ~]# systemctl restart vsftpd
[root@ftpserver ~]# systemctl enable vsftpd
[root@ftpserver ~]# 

另外再創建一個普通用戶ftptest并設定密碼,用于客戶端登錄

[root@ftpserver home]# useradd ftptest
[root@ftpserver home]# passwd ftptest
Changing password for user ftptest.
New password: 
BAD PASSWORD: The password is shorter than 8 characters
Retype new password: 
passwd: all authentication tokens updated successfully.
[root@ftpserver home]# 

這樣ftp服務器就準備好了,

特別說明:根據前文的經驗,需要按前文方法設定防火墻和SELinux策略客戶端才能使用,由于我們是沿用之前的配置,之前已經配置好了,所以這里不用配置,默認情況下防火墻將限制登錄、SELinux則限制創建目錄等操作,

2.5.2 ftp客戶端操作服務器

現在就可以直接采用ftpserver服務器上的普通賬戶ftptest進行檔案操作了,

[root@ftp ~]# ftp 192.168.78.101
Connected to 192.168.78.101 (192.168.78.101).
220 (vsFTPd 3.0.2)
Name (192.168.78.101:root): ftptest
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> mkdir test
257 "/home/ftptest/test" created
ftp> rename test test1
350 Ready for RNTO.
250 Rename successful.
ftp> ls
227 Entering Passive Mode (192,168,78,101,106,178).
150 Here comes the directory listing.
drwxr-xr-x    2 1001     1001            6 Jan 14 09:01 test1
226 Directory send OK.
ftp> rmdir test1
250 Remove directory operation successful.
ftp> exit
221 Goodbye.
[root@ftp ~]# 

案例中成功通過ftp服務器中的ftptest用戶對目錄進行創建、重命名、洗掉等操作,并且ftp客戶端創建的目錄,在ftpserver服務器對應的用戶目錄下也可以查到新建的目錄,

因此可以看到,本地用戶模式相對匿名模式,配置更簡單一些,但是大家想過為啥ftptest用戶登錄后就可以對目錄進行創建、洗掉等操作嗎?那是因為本地用戶模式登錄FTP服務器后,默認訪問的是該用戶的家目錄,即/home/ftptest目錄,它的默認所有者、所屬組都是該用戶自己,因此不存在寫入權限不足的情況,

2.5.3 本地用戶登錄模式之填坑

如果你是按照我的文章步驟操作,一定會很順暢,但是如果一開始并不是新建ftptest用戶來登錄,而是直接使用root用戶來進行遠程登錄,那就有個坑需要注意一下,

在客戶端用root登錄試試看

[root@ftp ~]# ftp 192.168.78.101
Connected to 192.168.78.101 (192.168.78.101).
220 (vsFTPd 3.0.2)
Name (192.168.78.101:root): root
530 Permission denied.
Login failed.
ftp> 

哦豁,目前的系統root是擁有最高權限的,居然被拒了,而前邊創建的普通用戶ftptest用戶居然可以正常使用ftp功能!我就遇到過,哈哈哈哈,百思不得解,

如果是初次接觸真可能懷疑是自己哪個步驟操作錯了,其實這里有一個規則:

vsftpd服務程式配置目錄存放著兩個“用戶名單”的檔案:ftpusers、user_list,原因就在這2個檔案,只要這2個檔案中存在的用戶,就不允許登錄FTP服務器上,

來看看這2個檔案內容:

[root@ftpserver ~]# cat /etc/vsftpd/user_list 
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody
[root@ftpserver ~]# cat /etc/vsftpd/ftpusers 
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody
[root@ftpserver ~]# 

果然里邊存在root用戶,這正是vsftpd服務為了保證服務器安全默認就禁止了root和大部分系統用戶登錄ftp,這樣做的好處是避免黑客通過FTP服務器對root密碼進行暴力破解,

而為啥之前創建的ftptest用戶可以登錄ftp呢,那是因為創建的用戶并沒有被默認寫入這2個檔案,如果確保在生產環境中直接使用root用戶對安全性沒有影響,則直接在這2個檔案中把root洗掉即可,否則請使用這2個檔案中不存在的普通用戶來登錄ftp服務器,

洗掉這2個檔案中的root用戶,然后重啟vsftpd服務,再次使用root登錄ftp即可成功操作,

2.6 虛擬用戶模式

再來看一種更加安全的認證模式即虛擬用戶模式,因為更加安全所以配置起來稍微要麻煩一些,

我們仍然在之前的機器上繼續操作,步驟步驟如下:

2.6.1 創建用戶資料庫檔案

在ftpserver服務器中的vsftpd配置目錄下創建包含用戶資訊的檔案vuser.list(檔案名字任意取)

[root@ftpserver ~]# cd /etc/vsftpd/
[root@ftpserver vsftpd]# ls
ftpusers  user_list  vsftpd.conf  vsftpd.conf.bak  vsftpd_conf_migrate.sh
[root@ftpserver vsftpd]# vim vuser.list
vuser1
123456
vuser2
123456

vuser.list檔案中包含vuser1和vuser2兩個用戶,密碼均為123456,檔案中奇數行表示賬號名,偶數行表示密碼,

接下來要將vuser.list檔案轉換為vsftpd服務程式能直接加載的格式,轉換格式使用db_load命令,該命令用哈希演算法將原始的明文資訊檔案轉換為資料庫檔案,

在使用db_load命令前,查看該命令是否安裝

[root@ftpserver vsftpd]# db_load
usage: db_load [-nTV] [-c name=value] [-f file]
        [-h home] [-P password] [-t btree | hash | recno | queue] db_file
usage: db_load -r lsn | fileid [-h home] [-P password] db_file
[root@ftpserver vsftpd]# 

出現該命令的用法,說明默認已經安裝了,

如果未安裝需要手動安裝,該命令包含在db4包中,使用命令yum -y install db4安裝即可,

既然安裝了db_load命令,那就使用它來轉換用戶檔案格式

[root@ftpserver vsftpd]# db_load -T -t hash -f vuser.list vuser.db
[root@ftpserver vsftpd]# file vuser.db 
vuser.db: Berkeley DB (Hash, version 9, native byte-order)
[root@ftpserver vsftpd]# ll vuser.db 
-rw-r--r--. 1 root root 12288 Jan 14 21:16 vuser.db
[root@ftpserver vsftpd]# chmod 600 vuser.db 
-rw-------. 1 root root 12288 Jan 14 21:16 vuser.db
[root@ftpserver vsftpd]# rm -rf vuser.list 
[root@ftpserver vsftpd]# 

通過db_load命令就把明文的vuser.list檔案轉換為了vuser.db格式的檔案,并通過chmod命令降低該檔案的權限,從而避免其他人查看到該資料庫檔案的內容,最后直接把明文的vuser.list檔案洗掉,

2.6.2 創建PAM檔案

PAM(Pluggable Authentication Module)是一種認證機制,它將服務與認證方式分開,使得系統管理員可以輕易的調整服務程式的認證方式,而不必對應用程式進行任何修改,它涉及的內容挺多的,此處僅僅先了解概念即可,

在ftpserver服務器上新建一個PAM檔案vsftpd.vu(檔案名可以任意)用于虛擬用戶認證,檔案內的db引數為上一步使用功能db_load命令生成的資料庫檔案的路徑,但不用寫后綴名

[root@ftpserver vsftpd]# vim /etc/pam.d/vsftpd.vu
auth required pam_userdb.so db=/etc/vsftpd/vuser
account required pam_userdb.so db=/etc/vsftpd/vuser
2.6.3 創建本地用戶

既然是虛擬用戶認證,為啥還需要建立本地用戶呢?可以簡單理解為虛擬指定一個ftp檔案存盤的根目錄,當虛擬用戶登錄ftp服務器后默認訪問的就是這個目錄,

由于Linux中一切檔案都有所有者和所屬組,假設前文創建的虛擬用戶vuser1創建了一個檔案,但是系統中卻沒有vuser1這個用戶,就會導致檔案的權限出現錯誤,因此需要創建一個本地用戶來映射虛擬用戶,讓虛擬用戶默認登錄到與之有映射關系的這個系統本地用戶的家目錄中,虛擬用戶創建的檔案的屬性也都歸屬于這個系統本地用戶,從而避免 Linux 系統無法處理虛擬用戶所創建檔案的屬性權限,

由于ftp目錄中的檔案可能經常變化,因此我們新建一個本地用戶virtual并指定其家目錄為/var/ftpdir目錄,同時我們禁用此本地用戶登錄FTP服務器,從而避免黑客利用該本地用戶登錄系統,禁止與虛擬用戶關聯的本地用戶并不會影響虛擬用戶的登錄,

[root@ftpserver vsftpd]# useradd -d /var/ftpdir -s /sbin/nologin virtual
[root@ftpserver vsftpd]# ll -d /var/ftpdir/
drwx------. 3 virtual virtual 74 Jan 14 21:46 /var/ftpdir/
[root@ftpserver vsftpd]# chmod -Rf 755 /var/ftpdir/
[root@ftpserver vsftpd]# ll -d /var/ftpdir/        
drwxr-xr-x. 3 virtual virtual 74 Jan 14 21:46 /var/ftpdir/
[root@ftpserver vsftpd]# 

修改目錄權限,讓其他人可讀,

2.6.4 vsftpd主組態檔配置

配置vsftpd主組態檔,指定之前創建的PAM認證檔案以及與虛擬用戶關聯的本地用戶,

[root@ftpserver vsftpd]# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
#anon_umask=022
#anon_upload_enable=YES
#anon_mkdir_write_enable=YES
#anon_other_write_enable=YES
local_enable=YES
guest_enable=YES
guest_username=virtual
allow_writeable_chroot=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd.vu
userlist_enable=YES
tcp_wrappers=YES

實際就是在原有基礎上添加:guest_enable=YES、guest_username=virtual、allow_writeable_chroot=YES,并修改pam_service_name=vsftpd.vu為之前創建的pam認證檔案,另外注意,必須開啟本地模式(local_enable=YES),

虛擬用戶認證相關引數及作用如下:

引數 作用
anonymous_enable=NO 禁止匿名開放模式
local_enable=YES 允許本地用戶模式
guest_enable=YES 開啟虛擬用戶模式
guest_username=virtual 指定虛擬用戶賬戶
pam_service_name=vsftpd.vu 指定PAM檔案,存放于/etc/pam.d/目錄下,默認是vsftpd檔案
allow_writeable_chroot=YES 允許對禁錮的FTP根目錄執行寫入操作,而且不拒絕用戶的登錄請求
2.6.5 虛擬用戶權限設定

假設我們要區別對待vuser1和vuser2,只允許vuser1查看檔案,而允許vuser2上傳、創建、修改、查看、洗掉檔案,這種需求在企業真實環境中是常見的,我們可以通過vsftpd服務器程式來實作,

[root@ftpserver vsftpd]# mkdir /etc/vsftpd/vusers_dir
[root@ftpserver vsftpd]# cd vusers_dir/
[root@ftpserver vusers_dir]# touch vuser1
[root@ftpserver vusers_dir]# vim vuser2
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

只需要在vsftpd配置目錄下新建vusers_dir目錄(名字可以任意取),在目錄中分別對應這2個用戶創建檔案并寫入權限即可,

同時修改vsftpd主組態檔,過添加 user_config_dir引數來定義這兩個虛擬用戶不同權限的組態檔所存放的路徑,

[root@ftpserver vsftpd]# vim /etc/vsftpd/vsftpd.conf
...省略原有內容
user_config_dir=/etc/vsftpd/vusers_dir

配置完成之后重啟vsftpd服務,

2.6.6 驗證不同虛擬用戶設定的權限是否生效

此時我們就可以使用虛擬用戶vuser1和vuser2登錄ftp進行測驗了

由于我們按照之前的基礎上進行演示,之前已經配置好了防火墻和SELinux相關策略,因此這里無需配置(實際操作時要根據實際情況進行,防火墻和SELinux會對ftp客戶端的操作造成影響),

使用vuser1登錄測驗驗證是否有創建目錄權限

[root@ftp ~]# ftp 192.168.78.101
Connected to 192.168.78.101 (192.168.78.101).
220 (vsFTPd 3.0.2)
Name (192.168.78.101:root): vuser1
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> mkdir test
550 Permission denied.
ftp> exit
221 Goodbye.
[root@ftp ~]#

正如之前設定一樣,vuser1只有查看權限,沒有創建目錄的權限,

再來看看vuser2

[root@ftp ~]# ftp 192.168.78.101
Connected to 192.168.78.101 (192.168.78.101).
220 (vsFTPd 3.0.2)
Name (192.168.78.101:root): vuser2
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> mkdir vuser2
257 "/vuser2" created
ftp> rmdir vuser2
250 Remove directory operation successful.
ftp> exit
221 Goodbye.
[root@ftp ~]# 

正如需求一致,vuser2具備創建和洗掉目錄的權限,這樣就可以根據實際需要靈活配置不同用戶的權限,

2.6.7 其他注意事項及常見錯誤

(1)配置了虛擬用戶登錄后,本地用戶登錄就會失效

[root@ftp ~]# ftp 192.168.78.101
Connected to 192.168.78.101 (192.168.78.101).
220 (vsFTPd 3.0.2)
Name (192.168.78.101:root): root
331 Please specify the password.
Password:
530 Login incorrect.
Login failed.
ftp> exit
221 Goodbye.
[root@ftp ~]# 

(2)2.6.4節中的vsftpd主組態檔中必須要開啟本地登錄模式

如果不開,將報錯,提示本地模式和匿名模式必須開啟一個,顯然虛擬用戶模式就是為了提高安全,因此我們不開匿名模式而開啟本地模式,

[root@ftp ~]# ftp 192.168.78.101
Connected to 192.168.78.101 (192.168.78.101).
500 OOPS: vsftpd: both local and anonymous access disabled!
ftp> exit
[root@ftp ~]# 

(3)2.6.4節中的主組態檔引數allow_writeable_chroot=YES必須開啟

如果不開將報錯

[root@ftp ~]# ftp 192.168.78.101
Connected to 192.168.78.101 (192.168.78.101).
220 (vsFTPd 3.0.2)
Name (192.168.78.101:root): vuser1
331 Please specify the password.
Password:
500 OOPS: vsftpd: refusing to run with writable root inside chroot()
Login failed.
421 Service not available, remote server has closed connection
ftp> exit
[root@ftp ~]# 

(3)防火墻影響ftp登錄不了

默認情況防火墻策略阻止了ftp埠,ftp客戶端登錄將得到如下錯誤

[root@ftp ~]# ftp 192.168.78.101
ftp: connect: No route to host
ftp> exit

此時需要在ftp服務器上執行:iptables -F

(4)SELinux阻止檔案創建

本來vuser2是有創建檔案權限的,但是由于受到默認SELinux策略影響,將不能創建檔案

[root@ftp ~]# ftp 192.168.78.101
Connected to 192.168.78.101 (192.168.78.101).
220 (vsFTPd 3.0.2)
Name (192.168.78.101:root): vuser2
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> mkdir vuser2
550 Create directory operation failed.
ftp> exit
221 Goodbye.
[root@ftp ~]# 

此時需要在ftp服務器執行:setsebool -P ftpd_full_access=off命令即可,

三、簡單檔案傳輸協議TFTP

3.1 TFTP概述

TFTP(Trivial File Transfer Protocol)簡單檔案傳輸協議,是一種基于UDP協議在客戶端和服務器之間進行簡單檔案傳輸的協議,可以認為它是FTP協議的簡化版本,

3.2.1 TFTP缺點

TFTP的命令功能不如FTP服務強大,不能遍歷目錄,在安全性方比FTP差,傳輸檔案采用 UDP 協議,埠號為 69,檔案傳輸程序不如FTP協議可靠,

3.2.2 TFTP優點

TFTP不需要客戶端的權限認證, 減少了無謂的系統和網路帶寬消耗,因此在傳輸瑣碎(trivial)不大的檔案時,效率更高,

3.2 TFTP操作案例

3.2.1 TFTP安裝并啟動

我們還是繼續使用之前的兩臺虛擬機,在主機ftpserver上安裝tftpsever服務,在主機ftp上安裝tftp服務,

(1)tftp服務器安裝

[root@ftpserver ~]# rpm -q tftp-server
package tftp-server is not installed
[root@ftpserver ~]# yum install tftp-server
...省略中間內容
Installed:
  tftp-server.x86_64 0:5.2-22.el7                                           
Complete!
[root@ftpserver ~] 

在RHEL7系統中,TFTP服務是使用 xinetd 服務程式來管理的,在安裝TFTP軟體包后,還需要在 xinetd服務程式中將其開啟,

配置之前先看tftp服務器是否安裝xinetd服務

[root@ftpserver ~]# systemctl restart xinetd
Failed to issue method call: Unit xinetd.service failed to load: No such file or directory.

出現這個結果表示為安裝xinetd,需要手動進行安裝,

[root@ftpserver ~]# yum install xinetd

在tftp服務器中,修改/etc/xinetd.d/tftp組態檔,將disable=yes改為no

[root@ftpserver ~]# vim /etc/xinetd.d/tftp 
service tftp
{
        socket_type             = dgram
        protocol                = udp
        wait                    = yes
        user                    = root
        server                  = /usr/sbin/in.tftpd
        server_args             = -s /var/lib/tftpboot
        disable                 = no
        per_source              = 11
        cps                     = 100 2
        flags                   = IPv4
}
[root@ftpserver ~]#

修改后重啟xinetd服務并添加到開機啟動,

[root@ftpserver ~]# systemctl restart xinetd
[root@ftpserver ~]# systemctl enable xinetd

考慮到有些系統的防火墻默認沒有允許 UDP 協議的 69 埠,因此 需要手動將該埠號加入到防火墻的允許策略中,

[root@ftpserver ~]# firewall-cmd --permanent --add-port=69/udp
success
[root@ftpserver ~]# firewall-cmd --reload
success
[root@ftpserver ~]#

TFTP 的根目錄為/var/lib/tftpboot,

在tftp服務器上,創建檔案tftptest.txt以供tftp下載

[root@ftpserver ~]# echo "test tftp">/var/lib/tftpboot/tftptest.txt
[root@ftpserver ~]# ll /var/lib/tftpboot/                          
total 4
-rw-r--r--. 1 root root 10 Jan 14 23:05 tftptest.txt
[root@ftpserver ~]# 

(2)fttp客戶端安裝

[root@ftp ~]# rpm -q tftp
package tftp is not installed
[root@ftp ~]# yum install tftp
...省略中間內容
Installed:
  tftp.x86_64 0:5.2-22.el7                                                 
Complete!
[root@ftp ~]#
3.2.2 使用TFTP

在tftp客戶端連接到tftpserver并下載檔案

[root@ftp ~]# tftp 192.168.78.101
tftp> get tftptest.txt
tftp> quit
[root@ftp ~]#  ll tftptest.txt 
-rw-r--r--. 1 root root 10 Jan 14 23:09 tftptest.txt
[root@ftp ~]#  cat tftptest.txt
test tftp
[root@ftp ~]# 

可以看到已經成功把檔案下載到本地了,

3.2.3 TFTP相關的命令

列舉幾個tftp相關的命令和引數

命令 作用
? 幫助資訊
put 上傳檔案
get 下載檔案
verbose 顯示詳細的處理資訊
status 顯示當前的狀態資訊
binary 使用二進制進行傳輸
ascii 使用 ASCII 碼進行傳輸
timeout 設定重傳的超時時間
quit 退出

當然TFTP還有很多其他用戶,以后有機會在深入討論,

下一篇文章將講解Linux下檔案共享的方法,

轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/137650.html

標籤:Linux

上一篇:Linux運維---1.Ceph分布式存盤架構及作業原理

下一篇:linux檔案系統相關命令(df/du/fsck/dumpe2fs)

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • CA和證書

    1、在 CentOS7 中使用 gpg 創建 RSA 非對稱密鑰對 gpg --gen-key #Centos上生成公鑰/密鑰對(存放在家目錄.gnupg/) 2、將 CentOS7 匯出的公鑰,拷貝到 CentOS8 中,在 CentOS8 中使用 CentOS7 的公鑰加密一個檔案 gpg -a ......

    uj5u.com 2020-09-10 00:09:53 more
  • Kubernetes K8S之資源控制器Job和CronJob詳解

    Kubernetes的資源控制器Job和CronJob詳解與示例 ......

    uj5u.com 2020-09-10 00:10:45 more
  • VMware下安裝CentOS

    VMware下安裝CentOS 一、軟硬體準備 1 Centos鏡像準備 1.1 CentOS鏡像下載地址 下載地址 1.2 CentOS鏡像下載程序 點擊下載地址進入如下圖的網站,選擇需要下載的版本,這里選擇的是Centos8,點擊如圖所示。 決定選擇Centos8后,選擇想要的鏡像源進行下載,此 ......

    uj5u.com 2020-09-10 00:12:10 more
  • 如何使用Grep命令查找多個字串

    如何使用Grep 命令查找多個字串 大家好,我是良許! 今天向大家介紹一個非常有用的技巧,那就是使用 grep 命令查找多個字串。 簡單介紹一下,grep 命令可以理解為是一個功能強大的命令列工具,可以用它在一個或多個輸入檔案中搜索與正則運算式相匹配的文本,然后再將每個匹配的文本用標準輸出的格式 ......

    uj5u.com 2020-09-10 00:12:28 more
  • git配置http代理

    git配置http代理 經常遇到克隆 github 慢的問題,這里記錄一下幾種配置 git 代理的方法,解決 clone github 過慢。 目錄 git配置代理 git單獨配置github代理 git配置全域代理 配置終端環境變數 git配置代理 主要使用 git config 命令 git單獨 ......

    uj5u.com 2020-09-10 00:12:33 more
  • Linux npm install 裝包時提示Error EACCES permission denied解

    npm install 裝包時提示Error EACCES permission denied解決辦法 ......

    uj5u.com 2020-09-10 00:12:53 more
  • Centos 7下安裝nginx,使用yum install nginx,提示沒有可用的軟體包

    Centos 7下安裝nginx,使用yum install nginx,提示沒有可用的軟體包。 18 (flaskApi) [root@67 flaskDemo]# yum -y install nginx 19 已加載插件:fastestmirror, langpacks 20 Loading ......

    uj5u.com 2020-09-10 00:13:13 more
  • Linux查看服務器暴力破解ssh IP

    在公網的服務器上經常遇到別人爆破你服務器的22埠,用來挖礦或者干其他嘿嘿嘿的事情~ 這種情況下正確的做法是: 修改默認ssh的22埠 使用設定密鑰登錄或者白名單ip登錄 建議服務器密碼為復雜密碼 創建普通用戶登錄服務器(root權限過大) 建立堡壘機,實作統一管理服務器 統計爆破IP [root ......

    uj5u.com 2020-09-10 00:13:17 more
  • CentOS 7系統常見快捷鍵操作方式

    Linux系統中一些常見的快捷方式,可有效提高操作效率,在某些時刻也能避免操作失誤帶來的問題。 ......

    uj5u.com 2020-09-10 00:13:31 more
  • CentOS 7作業系統目錄結構介紹

    作業系統存在著大量的資料檔案資訊,相應檔案資訊會存在于系統相應目錄中,為了更好的管理資料資訊,會將系統進行一些目錄規劃,不同目錄存放不同的資源。 ......

    uj5u.com 2020-09-10 00:13:35 more
最新发布
  • vim的常用命令

    Vim的6種基本模式 1. 普通模式在普通模式中,用的編輯器命令,比如移動游標,洗掉文本等等。這也是Vim啟動后的默認模式。這正好和許多新用戶期待的操作方式相反(大多數編輯器默認模式為插入模式)。 2. 插入模式在這個模式中,大多數按鍵都會向文本緩沖中插入文本。大多數新用戶希望文本編輯器編輯程序中一 ......

    uj5u.com 2023-04-20 08:43:21 more
  • vim的常用命令

    Vim的6種基本模式 1. 普通模式在普通模式中,用的編輯器命令,比如移動游標,洗掉文本等等。這也是Vim啟動后的默認模式。這正好和許多新用戶期待的操作方式相反(大多數編輯器默認模式為插入模式)。 2. 插入模式在這個模式中,大多數按鍵都會向文本緩沖中插入文本。大多數新用戶希望文本編輯器編輯程序中一 ......

    uj5u.com 2023-04-20 08:42:36 more
  • docker學習

    ###Docker概述 真實專案部署環境可能非常復雜,傳統發布專案一個只需要一個jar包,運行環境需要單獨部署。而通過Docker可將jar包和相關環境(如jdk,redis,Hadoop...)等打包到docker鏡像里,將鏡像發布到Docker倉庫,部署時下載發布的鏡像,直接運行發布的鏡像即可。 ......

    uj5u.com 2023-04-19 09:26:53 more
  • 設定Windows主機的瀏覽器為wls2的默認瀏覽器

    這里以Chrome為例。 1. 準備作業 wsl是可以使用Windows主機上安裝的exe程式,出于安全考慮,默認情況下改功能是無法使用。要使用的話,終端需要以管理員權限啟動。 我這里以Windows Terminal為例,介紹如何默認使用管理員權限打開終端,具體操作如下圖所示: 2. 操作 wsl ......

    uj5u.com 2023-04-19 09:25:49 more
  • docker學習

    ###Docker概述 真實專案部署環境可能非常復雜,傳統發布專案一個只需要一個jar包,運行環境需要單獨部署。而通過Docker可將jar包和相關環境(如jdk,redis,Hadoop...)等打包到docker鏡像里,將鏡像發布到Docker倉庫,部署時下載發布的鏡像,直接運行發布的鏡像即可。 ......

    uj5u.com 2023-04-19 09:19:04 more
  • Linux學習筆記

    IP地址和主機名 IP地址 ifconfig可以用來查詢本機的IP地址,如果不能使用,可以通過install net-tools安裝。 Centos系統下ens33表示主網卡;inet后表示IP地址;lo表示本地回環網卡; 127.0.0.1表示代指本機;0.0.0.0可以用于代指本機,同時在放行設 ......

    uj5u.com 2023-04-18 06:52:01 more
  • 解決linux系統的kdump服務無法啟動的問題

    問題:專案麒麟系統服務器的kdump服務無法啟動,沒有相關日志無法定位問題。 1、查看服務狀態是關閉的,重啟系統也無法啟動 systemctl status kdump 2、修改grub引數,修改“crashkernel”為“512M(有的機器數值太大太小都會導致報錯,建議從128M開始試,或者加個 ......

    uj5u.com 2023-04-12 09:59:50 more
  • 解決linux系統的kdump服務無法啟動的問題

    問題:專案麒麟系統服務器的kdump服務無法啟動,沒有相關日志無法定位問題。 1、查看服務狀態是關閉的,重啟系統也無法啟動 systemctl status kdump 2、修改grub引數,修改“crashkernel”為“512M(有的機器數值太大太小都會導致報錯,建議從128M開始試,或者加個 ......

    uj5u.com 2023-04-12 09:59:01 more
  • 你是不是暴露了?

    作者:袁首京 原創文章,轉載時請保留此宣告,并給出原文連接。 如果您是計算機相關從業人員,那么應該經歷不止一次網路安全專項檢查了,你肯定是收到過資訊系統技術檢測報告,要求你加強風險監測,確保你提供的系統服務堅實可靠了。 沒檢測到問題還好,檢測到問題的話,有些處理起來還是挺麻煩的,尤其是線上正在運行的 ......

    uj5u.com 2023-04-05 16:52:56 more
  • 細節拉滿,80 張圖帶你一步一步推演 slab 記憶體池的設計與實作

    1. 前文回顧 在之前的幾篇記憶體管理系列文章中,筆者帶大家從宏觀角度完整地梳理了一遍 Linux 記憶體分配的整個鏈路,本文的主題依然是記憶體分配,這一次我們會從微觀的角度來探秘一下 Linux 內核中用于零散小記憶體塊分配的記憶體池 —— slab 分配器。 在本小節中,筆者還是按照以往的風格先帶大家簡單 ......

    uj5u.com 2023-04-05 16:44:11 more