網站首頁 編程語言 正文
一、vsftpd是什么?
vsftpd 是very secure FTP daemon的縮寫,安全性是它的一個最大的特點。
vsftpd 是一個 UNIX 類操作系統上運行的服務器的名字,它可以運行在諸如 Linux、BSD、Solaris、 HP-UNIX等系統上面,是一個完全免費的、開放源代碼的ftp服務器軟件。
二、搭建過程
1.查詢vsftpd是否存在和安裝成功
命令如下:
whereis vsftpd
vsftpd服務未安裝顯示如下:
2.安裝vsftpd
命令如下:
sudo apt-get install vsftpd
安裝過程:
再次查詢vsftpd服務,如圖所示:
3.查詢vsftpd版本號
vsftpd -version
版本號顯示如下,說明安裝成功。
4.其他命令
查詢vsftpd狀態
service vsftpd status
開啟vsftpd
sudo service vsftpd start
重啟vsftpd
sudo service vsftpd restart
關閉vsftpd
sudo service vsftpd stop
該處使用的url網絡請求的數據。
5.使用匿名用戶登錄
1、修改vsftpd的配置文件
sudo vi /etc/vsftpd.conf
將配置文件中:anonymous_enable=YES
2、使用ftp工具連接到自己的服務器,輸入用戶名anonymous,密碼為空。
登錄成功后,應該看到下面的提示信息:
3、ubuntu20.04匿名用戶的目錄是 /srv/ftp,不同版本的目錄不一樣。在該目錄下,創建空文件welcome。
sudo touch welcome
現在可以使用FTP客戶端看到這個文件了。
三、用戶設置
1.匿名用戶登錄
前面已經配置完成,不再贅述。
2.本地用戶登錄
2.1本地用戶登錄配置
在一個網點內部,FTP更多的情況下被配置為向授權用戶開放。為此,用戶應該在服務器上擁有自己的賬號。vsftpd把這樣的用戶成為本地用戶。
修改vsftpd的配置文件,重啟FTP服務器。
sudo vi /etc/vsftpd.conf
# Uncomment this to allow local users to log in. local_enable=YES # # Uncomment this to enable any form of FTP write command. write_enable=YES
出于安全性,有一些用戶不允許通過FTP登錄,vsftpd將這些用戶整理在 /etc/ftpusers中。
這是FTP黑名單,所有被列入其中的用戶都不能通過FTP登錄進來。
2.2 限制用戶在本地目錄中
vsftpd提供了chroot(change root)系統調用,使其它目錄對使用者不可見,也不可訪問。
修改vsftpd的配置文件中以下配置。
# You may restrict local users to their home directories. See the FAQ for # the possible risks in this before using chroot_local_user or # chroot_list_enable below. chroot_local_user=YES
類似的,也可以知道哪些用戶受限,通過配置文件chroot_list_file。
# You may specify an explicit list of local users to chroot() to their home # directory. If chroot_local_user is YES, then this list becomes a list of # users to NOT chroot(). # (Warning! chroot'ing can be very dangerous. If using chroot, make sure that # the user does not have write access to the top level directory within the # chroot) chroot_local_user=YES chroot_list_enable=YES # (default follows) chroot_list_file=/etc/vsftpd.chroot_list
3.使用虛擬用戶
3.1 創建虛擬用戶數據庫文件
安裝創建數據庫文件需要使用的db工具:
sudo apt-get install db-util
db工具通過讀取一個特定格式的文本文件來創建數據庫文件,這個文件為每個用戶預留2行,第一行為用戶名,第二行為密碼。
建立文件login_user,包含內容:
fei 123456
運行db_load 命令,通過~/login_user(由-f選項指定)創建數據庫文件/etc/vsftpd_login.db。
sudo db_load -T -t hash -f /home/xuzhanfei/login_user /etc/vsftpd_login.db
-
-T
:通過文本文件創建 -
-t hash
:通過哈希表的數據結構創建數據庫
最后,更改權限,使其只對root用戶可見:
sudo chmod 600 /etc/vsftpd_login.db
3.2 配置PAM驗證
/etc/pam.d/vsftpd 是vsftpd 默認使用的PAM驗證文件,在該文件中加入以下兩行,其余內容屏蔽:
auth required /lib/x86_64-linux-gnu/security/pam_userdb.so db=/etc/vsftpd_login account required /lib/x86_64-linux-gnu/security/pam_userdb.so db=/etc/vsftpd_login
同時,修改vsftpd的配置文件中以下配置。
# This string is the name of the PAM service vsftpd will use. pam_service_name=vsftpd
3.3 創建本地用戶映射
下面做一些配置,將登錄進來的用戶映射到一個指定的非特權用戶,這里就使用ftp用戶。
修改vsftpd的配置文件中以下配置:
# 激活訪客身份 guest_enable=YES # 映射用戶 guest_username=ftp
3.4 設置用戶目錄和權限
將 fei 用戶目錄設置為 /home/ftp/fei,賦予讀寫權限。
首先,為用戶創建主目錄,虛擬用戶登錄后自動映射為本地ftp 用戶,因此,把目錄的屬主設置為 ftp 用戶:
sudo mkdir /srv/ftp/fei sudo chown ftp /srv/ftp/fei/ ##設置目錄的屬主
接下來,配置用戶的目錄和權限,先創建路徑:
sudo mkdir /etc/vsftpd_user_conf
修改vsftpd的配置文件中以下配置:
# 存放用戶配置的目錄 user_config_dir=/etc/vsftpd_user_conf
添加 fei 的文本文件,增加以下內容:
# 打開vsftpd的全局寫權限 write_enable=YES # 打開文件上傳權限 anon_upload_enable=YES # 打開建立目錄的權限 anon_mkdir_write_enable=YES local_root=/srv/ftp/fei/
重啟 vsftpd 服務。
注:未解決本地用戶和虛擬用戶登錄沖突的問題
四、公網vsftpd服務器配置
1 服務器配置成被動模式
PASV(被動)方式的連接過程是:客戶端向服務器的FTP端口(默認是21)發送連接請求,服務器接受連接,建立一條命令鏈路。當需要傳送數據時,服務器在命令鏈路上用PASV命令告訴客戶端:“我打開了XXX端口,你過來連接我”。于是客戶端向服務器的XXX端口發送連接請求,建立一條數據鏈路來傳送數據。
被動模式也會存在防火墻的問題,客戶端與服務端傳輸數據時,在服務端也會有防火墻,但在服務端的防火墻有連接追蹤的功能,解決了防火墻的問題。因此,一般使用被動模式比較多。
修改vsftpd的配置文件中以下配置。
pasv_enable=YES (使能被動連接) pasv_min_port=9981 (被動連接服務器建立的端口XXX) pasv_max_port=9983 pasv_address=192.194.203.142 (路由器靜態IP地址)
2 路由器端口映射
(1)外網想要連接FTP服務器,需要知道數據傳輸的端口9981-9983。
(2)數據端口是隨機的,那么服務器該如何將這些隨機數據端口映射到公網的路由器上呢???
(3)我們需要把命令端口21和隨機的數據端口映射到公網的端口(該端口需要開通權限),例如:學校開放公網端口為:9981-9983。
3 Linux服務器開放上述用到的端口
驗證端口開放成功:
總結
原文鏈接:https://blog.csdn.net/xu624735206/article/details/113887682
相關推薦
- 2022-10-29 CSS 漸變彩色字體
- 2022-06-19 SQL?Server?Agent?服務啟動后又停止問題_MsSql
- 2022-11-19 Golang接口使用教程詳解_Golang
- 2022-09-25 Django 遷移錯誤 Cannot add foreign key constraint,字段類型
- 2022-05-25 ASP.NET?Core?6.0對熱重載的支持實例詳解_實用技巧
- 2022-03-17 初學Android之網絡封裝實例_Android
- 2023-09-12 Spring AOP 登錄日志
- 2022-07-18 Kotlin 正確退出 foreach、foreachIndexed 循環函數
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支