使用vsftp虛擬用戶實現安全訪問控制

一、ftp連接方式

1、命令連接

? ?ftp在與用戶交互時,首先打開的是TCP的21號端口,建立命令連接,這個連接會始終存在,直到用戶輸入bye的那一刻,才斷開命令連接。

2、數據連接

? ?1)主動連接

? ?主動連接是基于TCP21號端口的,這種方式下,是ftp服務器主動去連接客戶端的,而客戶端該使用哪個端口來響應這個請求呢?在這種情況下,ftp服務器和客戶端就會達成一個共識:ftp服務器主動連接請求的端口是用于命令連接的端口加1,如果端口被占用,就再加1,直到找到空閑的端口為止。假如客戶端與服務端建立的命令連接是:CIP,12345,SIP,21 此時客戶端使用12345這個端口與ftp服務器的21號端口建立命令連接,那么在主動連接時,服務器就會使用12345+1=12346這個端口去主動連接客戶端。

? ?使用主動連接這種方式去連接客戶端,就必然會造成一種缺陷:客戶端是不向外提供服務的,所以對于像這種主動來掃描它端口的行為就會被認為是一種赤裸裸的挑釁,一種攻擊,因此很容易被客戶端防火墻拒絕掉,造成連接的失敗。

? ?2)被動連接

? ?被動連接是基于TCP的隨機端口,這種方式下,客戶端會發送給服務器兩個數字(如123,89),那么這時建立的數據連接端口就是123*256+89。

二、用戶認證方式

1、匿名用戶

? ?在登錄FTP時使用默認的用戶名,一般是ftp或anonymous

2、系統用戶?

? ?使用系統用戶登錄,在/etc/passwd中

3、虛擬用戶

? ?FTP虛擬用戶是FTP服務器的專有用戶,使用虛擬用戶登錄FTP,只能訪問FTP服務器提供的資源,大大增強了系統的安全。

? ?虛擬用戶的優點:

? ?1)獨立:即為虛擬的,那么不會受到系統其他用戶的影響

2)安全:如果vsftpd用本地用戶搭建的話,有可能由于限制目錄,權限等問題而引發安全為題

三、配置虛擬用戶,實現安全控制(vsftpd+pam_mysql+mysql)

1、使用ftp虛擬用戶案例

? ?某技術論壇需要做一個與用戶交流使用的FTP服務器,需實現以下2條功能:

? ?1)專用賬號(ftpuser1)允許用戶上傳文件、下載文件、刪除文件、創建目錄

? ?2)專用賬號(ftpuser2)則只允許用戶下載,不允許上傳

2、新建本地用戶"vuser"

? ?為什么需要本地用戶呢?因為虛擬用戶在服務器系統上不存在,所以需要新建一個本地用戶,把所有的虛擬用戶映射為一個系統用戶,它們訪問時的文件目錄就是此系統用戶的家目錄(默認權限是700)

wKiom1M_kSrhqJ3TAAAnR-ZexTE307.png

3、安裝相關軟件程序

1
[root@nmshuishui ~]# yum -y install vsftpd mysql-server mysql-devel pam_mysql

4、創建虛擬用戶賬號

? ?1)準備數據庫及相關表

? ?(1)創建數據庫

1
[root@nmshuishui ~]# service mysqld start

wKiom1M_k8qCmnL5AAAornfkznA427.png

? ?(2)授權管理數據庫的用戶及網段

wKiom1M_vveQWzhMAABGnDDInt8579.png

? ?(3)為vsftpd數據庫創建用戶表

wKioL1M_l5byw4hCAAAfc4RGuA4897.png

? ?2)添加測試的虛擬用戶

? ?為了密碼安全,在為虛擬用戶添加密碼時應該使用PASSWORD函數加密后存儲

wKioL1M_v-WD_KLwAABJo1FEfqs455.png

5、配置vsftpd

? ?1)建立基于pam認證配置文件

1
[root@nmshuishui ~]# vim /etc/pam.d/vsftpd.mysql

? ?添加如下兩行

1
2
auth required?/lib64/security/pam_mysql.so user=vsftp?passwd=vsftpd host=172.16.251.93 db=vsftpd table=users?usercolumn=name passwdcolumn=password crypt=2
account required?/lib64/security/pam_mysql.so user=vsftp?passwd=vsftpd host=172.16.251.93 db=vsftpd table=users?usercolumn=name passwdcolumn=password crypt=2

? ?注意:由于mysql的安裝方式不同,pam_mysql.so基于unix sock連接mysql服務器時可能會出問題,此時,建議授權一個可遠程連接的mysql并訪問vsftpd數據庫的用戶。

? ?2)修改vsftpd的配置文件(/etc/vsftpd/vsftpd.conf),使其支持mysql認證

wKiom1M_xNbDcdc-AAB0x1aKVBo553.png

? ?3)啟動vsftpd服務進行測試

wKioL1M_wnuhI69ZAAApGoYZX6c873.png

為了以示區別,在公共目錄/var/ftp/pub目錄下,touch一個pub.txt,在/var/ftproot/目錄下touch一個ftproot.txt

? ?(1)匿名用戶登錄

wKioL1M_uwGyIzAmAACTc7y8h1U413.png

? ?(2)虛擬用戶ftpuser1登錄

wKiom1M_u4-j91VCAAEOsrmTxws247.png

再看它所處的目錄,是在/var/ftproot/目錄下,有文件為證

wKioL1M_vDyQv2EGAABcZA8LTLA006.png

(3)虛擬用戶ftpuser2登錄

? ?虛擬用戶ftpuser2登錄后與ftpuser1登錄所處的位置完全一樣,不再貼圖。

6、配置虛擬用戶的訪問權限

? ?vsftpd可以在配置文件目錄中為每個用戶提供單獨的配置文件以定義其ftp服務訪問權限,每個虛擬用戶的配置文件名同虛擬用戶的用戶名。配置文件目錄可以是任意未使用目錄,只需要在vsftpd.conf指定其路徑及名稱即可。

? ?1)配置vsftpd為虛擬用戶提供配置文件目錄

1
2
#vim /etc/vsftpd/vsftpd.conf
user_config_dir=/etc/vsftpd/vusers??#添加此項

? ?2)創建虛擬用戶的配置文件目錄,并提供配置文件

1
2
3
4
5
6
[root@nmshuishui ~]# cd /etc/vsftpd/??????????????? #進入vsftpd目錄
[root@nmshuishui vsftpd]# mkdir vusers????????????? #創建虛擬用戶的配置文件目錄
[root@nmshuishui vsftpd]# cd vusers???????????????? #進入虛擬用戶的配置文件目錄
[root@nmshuishui vusers]# touch ftpuser1 ftpuser2?? #提供虛擬用戶的配置文件
[root@nmshuishui vusers]# ls
ftpuser1? ftpuser2

? ?3)配置虛擬用戶的訪問權限

? ?(1)ftpuser1允許用戶上傳文件、下載文件、刪除文件、創建目錄

1
2
3
4
5
#vim ftpuser1
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
anon_umask=022

? ? ? 在windows上使用FlashFXP測試

wKioL1M_1-Oip_RuAAETbyRKHKg711.png

? ?(2)ftpuser2只允許用戶下載,不允許上傳

既然只允許ftpuser2下載,不允許上傳,那就不需要給它任何權限了,只要ftpuser1上傳的文件可讀,ftpuser2即可下載。

wKiom1M_2ljQOgSAAAF-sHU9U_g783.png

四、經驗分享時刻

1、如果沒有iptables規則的話,請關閉iptables,否則它會阻擋你vsftp服務的正常運行

2、如果不使用selinux,也請關閉,如果不關閉會報下面這個錯(使用FlashFXP連接FTP服務器)

wKioL1NAFKmBfsuRAAB5uNWd29U178.png










本文轉自 nmshuishui 51CTO博客,原文鏈接:http://blog.51cto.com/nmshuishui/1390942,如需轉載請自行聯系原作者

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/286044.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/286044.shtml
英文地址,請注明出處:http://en.pswp.cn/news/286044.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【前端就業課 第二階段】CSS 零基礎到實戰(04)定位

若是大一學子或者是真心想學習剛入門的小伙伴可以私聊我,若你是真心學習可以送你書籍,指導你學習,給予你目標方向的學習路線,無套路,博客為證。 一、定位 定位分為相對定位以及絕對定位。 相對定位可以理解為在 HTM…

Android TextView設置ClickableSpan 點擊結尾空白位置也響應點擊的問題

解決辦法,在后邊緊接著追加一個0寬度字符: builder.append("\u200b"); 相關知識: “\u200b” 為 Unicode Character ‘ZERO WIDTH SPACE’ (U200B),可用于內容標識,不占位數(寬度0&#xff0…

【MATLAB統計分析與應用100例】案例017:matlab讀取Excel數據,進行變量系統聚類分析

1. 變量系統聚類分析結果 2. matlab完整代碼 (1)讀取數據,并轉為距離向量 [X,textdata] = xlsread(examp09_03.xls); % 從Excel文件中讀取數據 y = 1 -

WinForm 之 窗口最小化到托盤及右鍵圖標顯示菜單

日常開發有時候需要實現窗口最小化到系統托盤,本文就來講講該如何實現winfrom最小化到系統托盤,本例子基于VS2019編寫。用C#開發winform桌面程序時,程序啟動后,默認是顯示在桌面而且在任務欄中有對應的圖標。有的時候,…

C語言學習筆記--函數與指針

1. 函數類型 (1)C 語言中的函數有自己特定的類型,這個類型由返回值、參數類型和參數個數共同決定。如 int add(int i,int j)的類型為 int(int,int)。 (2)C 語言中通過 typedef 為函數類型重命名 typedef type name(parameter list);//如 typedef int f(int,int); 2. 函數指針 (…

C語言試題五十七之假定輸入的字符串中只包含字母和*號。請編寫函數function,它的功能是:刪除字符串中所有*號。在編寫函數時,不得使用c語言提供的字符串函數。

??個人主頁:個人主頁 ??系列專欄:C語言試題200例目錄 ??推薦一款刷算法、筆試、面經、拿大公司offer神器 ?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 假定輸入的…

Wordpress:將圖片、post等的URL轉換為相對路徑

2019獨角獸企業重金招聘Python工程師標準>>> 例如上傳一張圖片,其地址是可能 http://127.0.0.1/wp-content/uploads/2015/12/1_.png, 問題是如果我們通過其他的電腦通過wordpress主機的公網IP訪問這張圖片時會提示找不到。 最好的處理方法是不…

MySQL數據庫的優化(下)MySQL數據庫的高可用架構方案

【51CTO獨家特稿】如果單MySQL的優化始終還是頂不住壓力時,這個時候我們就必須考慮MySQL的高可用架構(很多同學也愛說成是MySQL集群)了,目前可行的方案有:一、MySQL Cluster 優勢:可用性非常高,性能非常好。每份數據至…

【MATLAB統計分析與應用100例】案例018:matlab讀取Excel數據,進行K均值聚類分析

文章目錄 1. K均值聚類分析結果2. matlab完整代碼(1)讀取數據,并進行標準化變換(2)選取初始凝聚點,進行聚類(3)繪制輪廓圖1. K均值聚類分析結果 2. matlab完整代碼 (1)讀取數據,并進行標準化變換 [X, textdata] = xlsread(examp09_04.xls

C# 擴展object類 將string強制轉換成int

擴展代碼&#xff1a; public static class ClassExtend{/// <summary>/// 將object強制轉化為int/// </summary>/// <param name"o">要強制轉換的object</param>/// <param name"defaultValue">o為null或者轉換失敗的默認值…

Android之華為手機打開app奔潰提示java.io.FileNotFoundException: res/drawable/abc_vector_test.xml

1、問題 新建立的項目,華為手機運行起來提示如下 06-24 18:24:03.175 13314 13314 E AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.appsinnova.android.booming/com.appsinnova.android.picper.MainActivity}: android.content…

CSS 零基礎到實戰(05)布局、盒子模型、彈性盒子【前端就業課 第二階段】

若是大一學子或者是真心想學習剛入門的小伙伴可以私聊我&#xff0c;若你是真心學習可以送你書籍&#xff0c;指導你學習&#xff0c;給予你目標方向的學習路線&#xff0c;無套路&#xff0c;博客為證。 一、流動布局 流動布局有3種布局模型&#xff0c;分別是流動布局&…

DVWA系列之24 high級別上傳漏洞

最后再來分析high級別的代碼&#xff1a;這里首先有一條語句需要理解&#xff1a;$uploaded_ext substr($uploaded_name, strrpos($uploaded_name, .) 1);在這條語句里&#xff0c;首先利用strrpos() 函數來查找“.”在變量$uploaded_name中出現的位置&#xff0c;然后將得到…

WPF 基礎控件之 TreeView 樣式

其他基礎控件1.Window2.Button3.CheckBox4.ComboBox5.DataGrid 6.DatePicker7.Expander8.GroupBox9.ListBox10.ListView11.Menu12.PasswordBox13.TextBox14.RadioButton15.ToggleButton16.Slider TreeView 實現下面的效果1&#xff09;TreeView來實現動畫&#xff1b;Grid 分兩…

CSS文本樣式

裝飾&#xff1a; text-decoration&#xff1a;line-through&#xff08;貫穿線&#xff09;&#xff0c;underline&#xff08;下劃線&#xff09;&#xff0c;overline&#xff08;上劃線&#xff09; 對齊&#xff1a; text-align&#xff1a;center&#xff08;居中&#x…

利用系統錯誤日志監控磁盤健康狀況

一、故障現象 這個星期出現了兩塊磁盤不能讀寫&#xff0c;后面通過系統日志查看&#xff0c;關鍵字“EXT4-fs error對應某個磁盤”&#xff0c;因此利用zabbix&#xff0c;把系統日志抓取出來&#xff0c;作告警&#xff01; 二、步聚 1.機器太多&#xff0c;用到ansible的pla…

【MATLAB統計分析與應用100例】案例019:matlab讀取Excel數據,進行K均值聚類分析

文章目錄 1. 讀取數據,并進行標準化變換2. 進行模糊C均值聚類3. 查看聚類結果4. K均值聚類分析結果1. 讀取數據,并進行標準化變換 % 從文件examp09_05.xls中讀取數據 [xdata,textdata] = xlsread(examp09_05.xls); % 提取元胞數組textdata第1列的第4行至最后一行,即城市名稱…

HTML Animation 【前端就業課 第二階段】CSS 零基礎到實戰(06)

若是大一學子或者是真心想學習剛入門的小伙伴可以私聊我&#xff0c;若你是真心學習可以送你書籍&#xff0c;指導你學習&#xff0c;給予你目標方向的學習路線&#xff0c;無套路&#xff0c;博客為證。 一、Animation 基礎 使用 Animation 可以設置幀動畫&#xff0c;與 tr…

史上最全的Visual Studio Code安裝C/C++環境,若不行頭砍給你。

一、下載Visual Studio Code安裝 下載鏈接地址 二、安裝C/C++插件 輸入c/c++, 然后點擊那里install 三、下載MinGW配置環境變量 下載地址 進入網站后不要點擊 "Download Lasted Version",往下滑,找到最新版的 "x86_64-posix-seh"。

C# 11 新特性:泛型 Attribute

之前使用JsonConverterAttribute&#xff0c;我們可以為任意類型自定義 Json 序列化。例如&#xff1a;[JsonConverter(typeof(UserJsonConverter))] public class User {public string Name { get; set; }public override string ToString(){return Name;} }public class User…