溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

文件共享服務(wù)之FTP

發(fā)布時(shí)間:2020-04-14 02:20:09 來源:網(wǎng)絡(luò) 閱讀:851 作者:bjwf125 欄目:數(shù)據(jù)庫

文件共享服務(wù)

一、什么是文件共享服務(wù)

簡單來說就是文件或存儲(chǔ)塊設(shè)備可以共享給大家使用

(一)、實(shí)現(xiàn)共享服務(wù)有三種:

1、ftp:屬于應(yīng)用層服務(wù),可以跨平臺(tái)使用(linux<->unix<-->windows)

2、nfs:屬于內(nèi)核模式,不可以跨平臺(tái)(linux<-->linux)

3、samba:可以跨平臺(tái)(linux<-->unix<-->windows)

(二)、實(shí)現(xiàn)存儲(chǔ)設(shè)備與服務(wù)器連接的方式有三種:

1、DAS:連接的磁盤

2、NAS:通過nfs/cifs協(xié)議實(shí)現(xiàn)網(wǎng)絡(luò)共享文件(文件存儲(chǔ)方式)電子郵件、網(wǎng)頁服務(wù)器、多媒體流服務(wù)、檔案分享等就適用于NAS存儲(chǔ)架構(gòu)。

3、SAN:通過網(wǎng)線或光纖實(shí)現(xiàn)ISCSI和FCSAN將物理存儲(chǔ)設(shè)備連接起來使用(塊存儲(chǔ)方式較底層,需要格式化并掛載當(dāng)本地磁盤使用)數(shù)據(jù)庫有關(guān)的應(yīng)用適用于SAN存儲(chǔ)架構(gòu)。

(三)、附:

1、nfs(Network File System,網(wǎng)絡(luò)文件系統(tǒng))協(xié)議實(shí)現(xiàn)Linux的文件封裝共享傳輸。

2、cifs(common internet File System,公共互聯(lián)網(wǎng)文件系統(tǒng))協(xié)議實(shí)現(xiàn)windows與linux的共享識(shí)別,例如samba就是基于cifs(smb)協(xié)議實(shí)現(xiàn)。

二、FTP

1、FTP是File Transfer Protocol 文件傳輸協(xié)議的縮寫,基于網(wǎng)絡(luò)來傳輸文件的應(yīng)用層通信協(xié)議。

2、FTP能夠通過網(wǎng)絡(luò)來傳輸文件,因?yàn)楣ぷ髟趹?yīng)用層所以不會(huì)受到平臺(tái)的限制。

3、FTP的工作模式

文件共享服務(wù)之FTP

文件共享服務(wù)之FTP

(1)、FTP的數(shù)據(jù)傳輸分為命令數(shù)據(jù)與文件數(shù)據(jù),命令傳輸就是客戶端要執(zhí)行的命令,服務(wù)端收到后返回給客戶端執(zhí)行結(jié)果,如ls命令的執(zhí)行結(jié)果一樣。文件傳輸就是客戶端要傳輸?shù)臄?shù)據(jù),服務(wù)端與客戶端數(shù)據(jù)連接來傳輸。

(2)、FTP的服務(wù)端與客戶端建立連接大體三個(gè)步驟,建立連接,傳輸數(shù)據(jù),斷開連接。

(3)、FTP是基于tcp協(xié)議來傳輸數(shù)據(jù)的,使用21號(hào)端口來建立認(rèn)證通道,20號(hào)端口來建立數(shù)據(jù)通道。

(4)、FTP是明文傳輸?shù)摹?/p>

(5)、FTP的用戶可分為實(shí)體用戶(real user),匿名用戶(anonymous user),訪問用戶(guest user)。

主動(dòng)模式與被動(dòng)模式

由于現(xiàn)在的網(wǎng)絡(luò)架構(gòu)中,都會(huì)有防火墻來阻止端口與高位端口被主動(dòng)連接,特別20端口是被禁止主動(dòng)連接的,因?yàn)?0端口是FTP的數(shù)據(jù)端口,所以為了解決客戶端或者服務(wù)端的防火墻問題,F(xiàn)TP就有了主動(dòng)和被動(dòng)兩種模式,通過墻內(nèi)的一端來主動(dòng)連接外端的一方,這樣子就不會(huì)被防火墻阻擋。

主動(dòng)模式:一般用于服務(wù)端存在防火墻的情況,客戶端無法主動(dòng)連接至服務(wù)端的20數(shù)據(jù)端口,需要由服務(wù)端主動(dòng)連接客戶端的高位數(shù)據(jù)端口。

1. 兩端在建立TCP通信通道后,客戶端會(huì)發(fā)送port請(qǐng)求與服務(wù)端的21號(hào)端口認(rèn)證連接并發(fā)送開放用來建立數(shù)據(jù)連接的高位端口號(hào)。
2. 服務(wù)端在收到后,會(huì)通過20號(hào)端口發(fā)送ACK響應(yīng)請(qǐng)求
3. 服務(wù)端會(huì)通過20端口與客戶端發(fā)送的高位端口建立數(shù)據(jù)連接通道。

被動(dòng)模式:一般用于客戶端存在防火墻的情況,服務(wù)端在收到連接請(qǐng)求后因?yàn)榭蛻舳朔阑饓Χ鵁o法達(dá)到客戶端高位端口,需要客戶端主動(dòng)連接至服務(wù)端的數(shù)據(jù)傳輸端口。

1. 兩端在建立TCP通信通道連接后,客戶端會(huì)發(fā)送PASV請(qǐng)求給服務(wù)端。
2. 服務(wù)端在受到PASV端口后就會(huì)打開一個(gè)高位端口作為數(shù)據(jù)傳輸端口來響應(yīng)給客戶端等待客戶端連接。
3. 客戶端在收到響應(yīng)后,就會(huì)去連接響應(yīng)的端口建立數(shù)據(jù)連接通道。

我們可以看到以上兩種工作方式,都是由墻內(nèi)的一方來發(fā)出連接并允許另一端來連接指定端口,墻內(nèi)的一方就類似是一間房子的主人,而另外一方是客人,客人去訪問需要得到主人的同意,并來給你“開門”之后,你才能進(jìn)到這個(gè)屋子。

文件共享服務(wù)之FTP

文件共享服務(wù)之FTP

三、響應(yīng)碼

    1XX:信息類

      2XX:成功類信息

      3XX:提示需要進(jìn)一步補(bǔ)全內(nèi)容類

      4XX:客戶端錯(cuò)誤

      5XX:服務(wù)器端錯(cuò)誤

四、用戶認(rèn)證

1、虛擬用戶:僅用于訪問某特定服務(wù)中的資源

   nsswitch:network server switch,名稱解析框架

     配置文件:/etc/nsswitch.conf

     模塊:/lib64/libnss*,/usr/lib64/libnss*

   pam:pluggable authentication module,用戶認(rèn)證框架

     配置文件:/etc/pam.conf,/etc/pam.d/*

    模塊:/lib64/security/

   以上兩種框架是linux的自帶框架,通過庫調(diào)用的方式自由選擇基于系統(tǒng)賬戶實(shí)現(xiàn),非系統(tǒng)賬戶實(shí)現(xiàn),還是數(shù)據(jù)    庫賬戶形式實(shí)現(xiàn)不用全部編譯進(jìn)去浪費(fèi)資源。

2、系統(tǒng)用戶:通過nsswitch服務(wù)解決用戶名稱解析,通過pam對(duì)系統(tǒng)用戶進(jìn)行認(rèn)證(/etc/passwd,/etc/shadow)

3、匿名用戶:映射為一個(gè)系統(tǒng)用戶ftp,為ftp用戶設(shè)置權(quán)限

4、虛擬用戶:映射為系統(tǒng)某一用戶,用戶賬號(hào)密碼存儲(chǔ)于非/etc/passwd,/etc/shadow

注:匿名用戶或虛擬用戶雖然和系統(tǒng)用戶沒有關(guān)系,但是登陸后獲取系統(tǒng)上的文件權(quán)限還是需要映射為系統(tǒng)用戶,以系統(tǒng)用戶的權(quán)限訪問系統(tǒng)文件(例如:FTP系統(tǒng)用戶,httpd系統(tǒng)用戶)

五、VSFTPD

VSFTPD是基于ftp協(xié)議來對(duì)網(wǎng)絡(luò)數(shù)據(jù)交換的一種實(shí)現(xiàn),是一個(gè)開源的解決方案。

VSFTPD能攻通過配置,搭建ftp服務(wù)器,完成基于網(wǎng)絡(luò)的數(shù)據(jù)傳輸功能。

1、vsftpd基礎(chǔ)服務(wù)搭建
[root@lab01 ~]# cat /etc/redhat-release 
CentOS release 6.7 (Final)
[root@lab01 ~]# yum -y install vsftpd #安裝vsftpd
[root@lab01 ~]# rpm -ql vsftpd   #查看安裝生成的文件
/etc/logrotate.d/vsftpd
/etc/pam.d/vsftpd                 #pam認(rèn)證文件
/etc/rc.d/init.d/vsftpd           #服務(wù)啟動(dòng)進(jìn)程
/etc/vsftpd
/etc/vsftpd/ftpusers              #限制登陸文件
/etc/vsftpd/user_list
/etc/vsftpd/vsftpd.conf           #vsftp的主配置文件
/etc/vsftpd/vsftpd_conf_migrate.sh
/usr/sbin/vsftpd                  #程序文件
......
/var/ftp                          #FTP家目錄
/var/ftp/pub                      

2、vsftpd配置文件詳解
#匿名用戶的配置:
    anonymous_enable=YES         #啟動(dòng)匿名用戶
    anon_upload_enable=YES       #是否允許匿名用戶上傳文件
    anon_mkdir_write_enable=YES  #是否允許匿名用戶有創(chuàng)建目錄的權(quán)限
    anon_ohter_write_enable=YES
#系統(tǒng)用戶的配置:
    local_enable=YES   #啟用本地用戶
    write_enable=YES   #允許用戶有寫入的權(quán)限
    local_umask=022    #上傳后文件的umask,也就是上傳后文件的權(quán)限
#定義訪問日志
    xferlog_enable=YES   #是否啟動(dòng)xferlog日志
    xferlog_file=/var/log/xferlog    #定義xferlog日志文件的存放位置
    xferlog_std_format=YES   #是否使用標(biāo)準(zhǔn)的xferlog模式 
#禁錮所有的ftp本地用戶于其家目錄中:
    chroot_local_user=YES
#禁錮文件中指定的ftp本地用戶于其家目錄中:
    chroot_list_enable=YES  #設(shè)置是否啟用將部分用戶禁錮在家目錄
    chroot_list_file=/etc/vsftpd/chroot_list(在此文件中添加系統(tǒng)用戶)
#虛擬用戶映射系統(tǒng)用戶
    guest_enable=YES  是否啟用來賓賬號(hào)(默認(rèn)沒有) 
    guest_username=vuser  將來賓賬號(hào)映射為那一個(gè)系統(tǒng)用戶(默認(rèn)沒有)
#通過pam用戶認(rèn)證
    pam_service_name=vsftpd    (/etc/pam.d/vsftpd中定義) 
    pam_service_name=vsftpd.mysql \\pam認(rèn)證文件
#定義歡迎語
    ftpd_banner=Welcome to blah FTP service. \\設(shè)置定義登錄ftp的歡迎語

#其他選項(xiàng)       
    connect_from_port_20=YES  #設(shè)置主動(dòng)連接的數(shù)據(jù)傳輸端口  
    chown_uploads=YES  #是否啟動(dòng)上傳ftp文件后,更改文件的屬主 [YES | NO] 
    chown_username=whoever  #若啟用了更改上傳文件的屬主,則定義是哪一個(gè)屬主
    idle_session_timeout=600  \\設(shè)置會(huì)話超時(shí)時(shí)間 
    data_connection_timeout=120 \\設(shè)置數(shù)據(jù)傳輸超時(shí)時(shí)間 
    nopriv_user=ftpsecure  \\運(yùn)行vsftpd需要非特權(quán)系統(tǒng)用戶,默認(rèn)是nobody  
    async_abor_enable=YES  \\設(shè)置是否允許執(zhí)行特殊的ftp命令async ABOR
    ascii_upload_enable=YES  \\設(shè)置是否使用ascii碼上傳文件 [YES | NO]
    ascii_download_enable=YES \\設(shè)置是否使用ascii碼下載文件 [YES | NO]
    deny_email_enable=YES  \\設(shè)置是否禁止匿名用戶使用某些郵件地址
    banned_email_file=/etc/vsftpd/banned_emails  \\郵件地址文件
    ls_recurse_enable=YES  \\是否允許遞歸 [YES | NO]
    listen=YES \\設(shè)置vsftpd是否處于監(jiān)聽狀態(tài)
    listen_ipv6=YES \\是否啟用ipv6地址監(jiān)聽 
    user_config_dir=/etc/vsftpd/vuser_config\\設(shè)置匿名用戶的權(quán)限配置文件位置 (默認(rèn)沒有)
    userlist_enable=YES  \\此選項(xiàng)與下面選項(xiàng)userlit_deny都為YES時(shí),/etc/vsftpd/user_list為黑名單,
    userlist_deny=YES     \\若userlist_enable為YES,userlist_deny=NO則此文件為白名單
    tcp_wrappers=YES  \\支持tcp_wrappers訪問限制(/etc/{hosts.allow,hosts.deny} 
    max_clients=1024  \\限制最大并發(fā)連接數(shù)(默認(rèn)沒有此選項(xiàng))
    max_per_ip=1024   \\限制每個(gè)ip同時(shí)請(qǐng)求的連接數(shù)(默認(rèn)沒有此選項(xiàng))
    anon_max_rate=1024 \\限制匿名用戶的傳輸速率(默認(rèn)沒有此選項(xiàng))
    local_max_rate=1024 \\限制本地用戶的傳輸速率(默認(rèn)沒有出選項(xiàng))
#匿名用戶(映射為ftp用戶)共享資源位置:/var/ftp 
#系統(tǒng)用戶通過ftp訪問的資源的位置:用戶自己的家目錄 
#虛擬用戶通過ftp訪問的資源的位置:給虛擬用戶指定的映射成為的系統(tǒng)用戶的家目錄

六、vsftpd+mysql+pam實(shí)現(xiàn)過程

1、安裝數(shù)據(jù)庫及pam_mysql插件
[root@lab01 ~]# yum -y install mysql-server pam_mysql
2、創(chuàng)建用于vsftpd的數(shù)據(jù)庫,在創(chuàng)建表和用戶
mysql> CREATE DATABASE vsftpd;   #創(chuàng)建數(shù)據(jù)庫
mysql> use vsftpd;              #進(jìn)入數(shù)據(jù)庫
mysql> create table users (      #創(chuàng)建表
    -> id int AUTO_INCREMENT NOT NULL,
    -> name char(20) binary NOT NULL,
    -> password char(48) binary NOT NULL,
    -> primary key(id)
    -> );
mysql> INSERT INTO users(name,password) values('bjwf',password('123456'));
mysql> INSERT INTO users(name,password) values('zhangsan',password('bjwf.com'));
mysql> GRANT ALL ON vsftpd.* TO vsftpd@'%' IDENTIFIED BY 'bjwf.com';   #用戶授權(quán)
mysql> FLUSH PRIVILEGES;     #刷新授權(quán)
3、查看pam模塊,并創(chuàng)建認(rèn)證文件
[root@lab01 ~]# rpm -ql pam_mysql
/lib64/security/pam_mysql.so   #pam模塊生成認(rèn)證時(shí)需要的共享庫
[root@lab01 ~]# vim /etc/pam.d/vsftpd.mysql
auth required /lib64/security/pam_mysql.so user=vsftpd passwd=bjwf.com host=192.168.130.251 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
account required /lib64/security/pam_mysql.so user=vsftpd passwd=bjwf.com host=192.168.130.251 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
4、創(chuàng)建虛擬用戶的映射用戶
[root@lab01 ~]# useradd -s /sbin/nologin -d /var/ftproot vuser
[root@lab01 ~]# chmod go+rx /var/ftproot
5、編輯配置文件,啟動(dòng)如下選項(xiàng)
[root@lab01 ~]# vim /etc/vsftpd/vsftpd.conf
    anonymous_enable=NO
    local_enable=YES
    write_enable=YES
    anon_upload_enable=NO
    anon_mkdir_write_enable=NO
    chroot_local_user=YES
    pam_service_name=vsftpd.mysql
    guest_enable=YES
    guest_username=vuser
6、為單個(gè)用戶提供配置文件
[root@lab01 ~]# vim /etc/vsftpd/vsftpd.conf
    user_config_dir=/etc/vsftpd/vuser_config
[root@lab01 ~]# mkdir /etc/vsftpd/vuser_config
[root@lab01 ~]# cd /etc/vsftpd/vuser_config
[root@lab01 vuser_config]# cat bjwf
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
[root@lab01 vuser_config]# cat zhangsan
anon_upload_enable=YES
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
7、重啟服務(wù)驗(yàn)證權(quán)限
[root@lab01 ~]# service vsftpd restart
Shutting down vsftpd:                                      [  OK  ]
Starting vsftpd for vsftpd:                                [  OK  ]
[root@lab01 ~]# netstat -tnlp|grep 21
tcp        0      0 0.0.0.0:21 0.0.0.0:*     LISTEN      1850/vsftpd   
[root@lab01 ~]# cp install.log /var/ftproot/
#切換另一臺(tái)機(jī)器測試
 [root@node1 tmp]# lftp -u bjwf 192.168.130.251   #使用可讀、可寫賬號(hào)
Password: 
lftp bjwf@192.168.130.251:~> ls         #查看文件
-rw-r--r--    1 0        0            9545 Jul 01 09:16 install.log
lftp bjwf@192.168.130.251:/> lcd /etc/  #切換到本地目錄
lcd ok, local cwd=/etc
lftp bjwf@192.168.130.251:/> put fstab  #上傳文件
541 bytes transferred
lftp bjwf@192.168.130.251:/> ls
-rw-------    1 500      500           541 Jul 01 09:20 fstab
-rw-r--r--    1 0        0            9545 Jul 01 09:16 install.log
lftp bjwf@192.168.130.251:/> put passwd  #上傳文件
1228 bytes transferred
lftp bjwf@192.168.130.251:/> ls
-rw-------    1 500      500           541 Jul 01 09:20 fstab
-rw-r--r--    1 0        0            9545 Jul 01 09:16 install.log
-rw-------    1 500      500          1228 Jul 01 09:21 passwd
lftp bjwf@192.168.130.251:/> mkdir haha  #創(chuàng)建目錄
mkdir ok, `haha' created
lftp bjwf@192.168.130.251:/> rm install.log #刪除文件
rm ok, `install.log' removed
lftp bjwf@192.168.130.251:/> ls
-rw-------    1 500      500           541 Jul 01 09:20 fstab
drwx------    2 500      500          4096 Jul 01 09:21 haha
-rw-------    1 500      500          1228 Jul 01 09:21 passwd

[root@node1 tmp]# lftp -u zhangsan 192.168.130.251  #切換另一個(gè)用戶
Password: 
lftp zhangsan@192.168.130.251:~> ls     
-rw-------    1 500      500           541 Jul 01 09:20 fstab
drwx------    2 500      500          4096 Jul 01 09:21 haha
-rw-------    1 500      500          1228 Jul 01 09:21 passwd
lftp zhangsan@192.168.130.251:/> lcd /etc
lcd ok, local cwd=/etc
lftp zhangsan@192.168.130.251:/> put issue    #上傳成功
23 bytes transferred
lftp zhangsan@192.168.130.251:/> ls
-rw-------    1 500      500           541 Jul 01 09:20 fstab
drwx------    2 500      500          4096 Jul 01 09:21 haha
-rw-------    1 500      500            23 Jul 01 09:23 issue
-rw-------    1 500      500          1228 Jul 01 09:21 passwd
lftp zhangsan@192.168.130.251:/> rm issue
rm: Access failed: 550 Permission denied. (issue)    #不能刪除
lftp zhangsan@192.168.130.251:/> mkdir data
mkdir: Access failed: 550 Permission denied. (data)   #不能創(chuàng)建目錄
lftp zhangsan@192.168.130.251:/> ls
-rw-------    1 500      500           541 Jul 01 09:20 fstab
drwx------    2 500      500          4096 Jul 01 09:21 haha
-rw-------    1 500      500            23 Jul 01 09:23 issue
-rw-------    1 500      500          1228 Jul 01 09:21 passw

#常見問題:
1、ftp無法登陸,請(qǐng)檢查你的文件夾權(quán)限并檢查主配置文件中的屬性是否打開了,如anonymous_enable,local_enable等。
2、無法切換目錄或者個(gè)別用戶無法登陸,請(qǐng)檢查chroot_list,ftpusers,user_list文件內(nèi)容或者主配置文件中的配置是否正確。
3、mysql存儲(chǔ)無法登陸,請(qǐng)查看日志文件/var/log/secure,/var/log/message,/var/log/xferlog,并確認(rèn)認(rèn)證文件沒有寫錯(cuò),仔細(xì)檢查配置文件與目錄和被映射的實(shí)體用戶的權(quán)限。
4、如果遇到密碼錯(cuò)誤,檢查密碼文件,如mysql表中字段長度類型是否正確,數(shù)據(jù)庫用戶是否能遠(yuǎn)程登陸訪問數(shù)據(jù)庫user表。
5、建議不要編譯安裝pam_mysql模塊
6、無法正常工作時(shí),請(qǐng)檢查端口是否開啟,或檢查防火墻和selinux是否有配置正確。
向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI