2017 10-13 網(wǎng)絡(luò)文件共享服務(wù)

  • 主要學(xué)習(xí)內(nèi)容

  • FTP服務(wù) ?
  • NFS服務(wù)
  • SAMBA服務(wù)

一.文件傳輸協(xié)議(ftp)

  • File Transfer Protocol 早期的三個應(yīng)用級協(xié)議之一
  • 基于C/S結(jié)構(gòu)
  • 雙通道協(xié)議:數(shù)據(jù)和命令連接
  • 數(shù)據(jù)傳輸格式:二進制(默認)

(1) FTP的連接模式
客戶端和服務(wù)器端之間由雙套接字通道進行連接,其中第一條鏈接通道是命令連接通道用來傳輸指令,并且服務(wù)器端口是固定的,端口號21,客戶端端口是隨機的
第二條通道是數(shù)據(jù)連接通道,用來實現(xiàn)數(shù)據(jù)的傳輸,數(shù)據(jù)端口是隨機的
數(shù)據(jù)的端口是通過命令連接通道與客戶端進行協(xié)商,確定出來的端口號

端口計算如圖:
image.png

image.png

(2)FTP的兩種模式

被動模式: 客戶端主動連接服務(wù)器
客戶端向服務(wù)器端建立命令連接通道,此時客戶端打開一個隨機端口,服務(wù)器端打開21tcp端口
數(shù)據(jù)端:客戶端向數(shù)據(jù)端建立數(shù)據(jù)連接通道,數(shù)據(jù)端通過命令連接通道和客戶端協(xié)商,為數(shù)據(jù)端口生成一個隨機端口
主動模式:
命令連接方式不變
數(shù)據(jù)端主動向客戶端發(fā)送連接請求,建立一個數(shù)據(jù)通道,并且端口為固定端口20
主動模式與被動模式的切換方式


image.png

image.png

image.png

二.ftp軟件介紹

  • FTP服務(wù)器: Wu-ftpd,Proftpd,Pureftpd,ServU,IIS vsftpd:Very Secure FTP Daemon,CentOS默認FTP服務(wù)器 高速,穩(wěn)定,下載速度是WU-FTP的兩倍 ftp,redhat.com數(shù)據(jù):單機最多可支持15000個并發(fā) ?
  • 客戶端軟件: ftp,lftp,lftpget,wget,curl
    ftp -A ftpserver port -A主動模式 –p 被動模式
    lftp –u username ftpserver
    lftp username@ftpserver
    lftpget ftp://ftpserver/pub/file
    gftp: GUI centos5 最新版2.0.19 (11/30/2008)
    filezilla,CuteFtp,F(xiàn)lashFXP,LeapFtp
    IE ftp://username:password@ftpserver
  • 狀態(tài)碼:
    1XX:信息
    125:數(shù)據(jù)連接打開
    2XX:成功類狀態(tài) 200:命令OK 230:登錄成功
    3XX:補充類 331:用戶名OK
    4XX:客戶端錯誤 425:不能打開數(shù)據(jù)連接
    5XX:服務(wù)器錯誤 530:不能登錄 ?
    用戶認證:
    匿名用戶:ftp,anonymous,對應(yīng)Linux用戶ftp
    系統(tǒng)用戶:Linux用戶,用戶/etc/passwd,密碼/etc/shadow
    虛擬用戶:特定服務(wù)的專用用戶,獨立的用戶/密碼文件 nsswitch:network service switch名稱解析框架
    pam:pluggable authentication module 用戶認證
    /lib64/security /etc/pam.d/ /etc/pam.conf

vsftpd服務(wù)

(1)由vsftpd包提供 ?
不再由xinetd管理 ?
用戶認證配置文件:/etc/pam.d/vsftpd
服務(wù)腳本: /usr/lib/systemd/system/vsftpd.service /etc/rc.d/init.d/vsftpd ?
配置文件:/etc/vsftpd/vsftpd.conf man 5 vsftpd.conf
格式:option=value
注意:=前后不要有空格 ?
匿名用戶(映射為系統(tǒng)用戶ftp )共享文件位置:/var/ftp ?
系統(tǒng)用戶共享文件位置:用戶家目錄 ?
虛擬用戶共享文件位置:為其映射的系統(tǒng)用戶的家目錄?
(2)相關(guān)服務(wù)配置

  • 命令端口
    listen_port=21——該端口為默認設(shè)置,也可以手動添加到配置文件中
  • 主動模式端口
    connect_from_port_20=YES
    ftp_data_port=2020——修改新的主動模式端口
    vim /etc/vsftp/vsftp.conf


    image.png

    重啟服務(wù)systemctl restart vsftpd


    image.png

    image.png
  • 被動模式端口范圍
    在linux客戶端默認使用被動模式
    windows客戶端使用主動模式
    pasv_min_port=6000
    pasv_max_port=6010
    手動加入配置文件中
  • 使用當(dāng)?shù)貢r間
    use_localtime=YES 使用當(dāng)?shù)貢r間(默認時間為NO,使用GMT時間)
    如果是本地時間,不要改變,或改為NO
    如果是別的時區(qū),要改為YES
  • 有關(guān)匿名用戶的設(shè)置


    image.png

    no_anon_password=YES


    image.png
  • anon_upload_enable=YES——去掉注釋生效
    注意:匿名賬號不能有寫權(quán)限,如果有寫權(quán)限,則無法登錄
    mkdir /var/ftp/upload——創(chuàng)建一個子目錄
    setfacl -m u:ftp:rwx /var/ftp/upload


    image.png

    去掉注釋后此時可以進行上傳

  • anon_mkdir_write_enable=YES——去掉注釋可以創(chuàng)建子目錄或是文件


    image.png
  • anon_world_readable_only ——默認是yes,不需要寫入,代表只有所有人都有讀權(quán)限才可以下載
    如果在/var/ftp/upload中,并不是所有人都有讀權(quán)限的話,無法進行下載
  • anon_other_write_enable=YES 可刪除和修改上傳的文件
    將上述內(nèi)容寫入配置文件中,不寫默認是無法刪除和修改上傳的文件


    image.png

    寫入配置文件后,重啟服務(wù)即可生效


    image.png

    image.png
  • anon_umask=077 指定匿名上傳umask
    將umask值改為022就可以實現(xiàn)匿名上傳和下載功能——文件權(quán)限為644
  • 指定上傳文件的默認的所有者和權(quán)限
    chown_uploads=YES(默認NO)
    chown_username=who ——修改所有者
    chown_upload_mode=0644——寫入配置文件中



    image.png

    image.png

(3)linux系統(tǒng)用戶設(shè)置
在默認情況下是可以以系統(tǒng)用戶的身份進行進行登錄
即使將系統(tǒng)用戶的shell類型改變依然可以進行登錄

  • guest_enable=YES——所有系統(tǒng)用戶都映射到guest中,并且和guest_username=who配合使用,一起生效
    這樣所有系統(tǒng)用戶都被映射成who的身份
    注意權(quán)限問題,要去掉who的家目錄的寫權(quán)限 chmod 555 /home/who,這樣做可以使其他用戶的權(quán)限受到限制,使系統(tǒng)更安全


    image.png

    設(shè)置映射后效果


    image.png

    image.png

    image.png
  • local_enable=YES——改為no后linux系統(tǒng)用戶無法登錄
  • wirte_enable=YES——改為no后也無法上傳文件
  • local_root=/app—指定非匿名用戶登錄時所在的家目錄


    image.png
  • chroot_local_user=YES——禁錮所有系統(tǒng)用戶在家目錄中


    image.png

    chmod u-w /home/zhangnan


    image.png

    image.png
  • chroot_list_enable=YES
  • chroot_list_file=/etc/vsftpd/chroot_list
    以上兩個命令實現(xiàn)對特定用戶的禁錮
    mkdir /etc/vsftpd/chroot_list——在該文件中加入要禁錮的系統(tǒng)用戶
    chroot_list_enable=YES——如果yes改為no,則加入列表的用戶會被禁錮,如果是yes,則加入的用戶為白名單不會被禁錮

(4)有關(guān)ftp的日志設(shè)置

  • wu-ftp日志:默認啟用
    xferlog_enable=YES (默認)啟用記錄上傳下載日志
    xferlog_std_format=YES (默認)使用wu-ftp日志格式
    xferlog_file=/var/log/xferlog (默認)可自動生成 ?
    vsftpd日志:默認不啟用
    dual_log_enable=YES 使用vsftpd日志格式,默認不啟用
    vsftpd_log_file=/var/log/vsftpd.log(默認)可自動生成

(5)登錄提示信息

ftpd_banner=“welcome to upload server"


image.png

banner_file=/etc/vsftpd/ftpbanner.txt 優(yōu)先上面項生效 ——將登錄信息寫入該文件中
cp /etc/issue /etc/vsftpd/ftp.txt?


image.png

目錄訪問提示信息 dirmessage_enable=YES (默認)
cd /var/ftp/pub

mkdir .message
echo 'profile ok ' > .message——為了效果明顯可以加入顏色來顯示
vim .message
ctrl+v[[35m 'profile ok'ctrl+v[[0m——進入vim編輯模式后,執(zhí)行ctrl+v[的命令
message_file=.message(默認)
信息存放在指定目錄下.messag


image.png

(6)使用pam完成用戶認證

使用pam(Pluggable Authentication Modules)完成用戶認證
pam_service_name=vsftpd
pam配置文件:/etc/pam.d/vsftpd
/etc/vsftpd/ftpusers 默認文件中用戶拒絕登錄


image.png

如果在/etc/pam.d/vsftpd將deny改為allow,那么在名單中的用戶為可登陸的,不在名單中的為不可登陸的


image.png

是否啟用控制用戶登錄的列表文件
userlist_enable=YES 默認有此設(shè)置
userlist_deny=YES(默認值)黑名單,不提示口令,NO為白名單
userlist_file=/etc/vsftpd/users_list 此為默認值
image.png

(7) 配置FTP服務(wù)以非獨立服務(wù)方運行
listen=NO,默認為獨立方式

 cat  /etc/xinetd.d/vsftpd 
service ftp 
{ 
flags           = REUSE 
socket_type     = stream 
wait            = no 
user            = root 
server          = /usr/sbin/vsftpd
log_on_failure  += USERID 
disable         = no 

重啟vsftpd服務(wù)后 service xinetd start 實現(xiàn)非獨立控制

三.實現(xiàn)基于文件驗證的vsftpd虛擬用戶

虛擬用戶: 所有虛擬用戶會統(tǒng)一映射為一個指定的系統(tǒng)帳號:
訪問共享位 置,即為此系統(tǒng)帳號的家目錄
各虛擬用戶可被賦予不同的訪問權(quán)限,通過匿名用戶的權(quán)限控 制參數(shù)進行指定 ?
虛擬用戶帳號的存儲方式:
文件:編輯文本文件,此文件需要被編碼為hash格式
奇數(shù)行為用戶名,偶數(shù)行為密碼
db_load -T -t hash -f vusers.txt vusers.db
關(guān)系型數(shù)據(jù)庫中的表中:
實時查詢數(shù)據(jù)庫完成用戶認證
mysql庫:pam要依賴于pam-mysql /lib64/security/pam_mysql.so
/usr/share/doc/pam_mysql-0.7/README
實驗步驟

1 還原配置文件 cp /etc/vsftpd/vsftp.conf.bak vsftpd.conf
2 創(chuàng)建用戶數(shù)據(jù)庫文件 
vim /etc/vsftpd/ftpvusers
ftp1
centos
ftp2
magedu
3 cd /etc/vsftpd
db_load -T -t hash -f ftpvusers  ftpvusers.db
chmod 600 ftpvusers.db
4創(chuàng)建用戶和訪問FTP目錄 
useradd -d /var/ftpsite -s /sbin/nologin ftpvuser
chmod 555 /var/ftpsite
mkdir /var/ftpsite/upload
chown ftpvuser /var/ftpsite/upload

5創(chuàng)建pam配置文件
vim /etc/pam.d/vsftpd.vuser 
auth required pam_userdb.so db=/etc/vsftpd/ftpvusers
account required pam_userdb.so db=/etc/vsftpd/ftpvusers

6指定pam配置文件
vim /etc/vsftpd/vsftpd.conf
pam_service_name=vsftpd.vuser
guest_enable=YES
guest_username=ftpvuser
user_config_dir=/etc/vsftpd/ftpvusers.conf.d/

7
建立虛擬用戶各自的配置文件
mkdir /etc/vsftpd/ftpvusers.conf.d/
cd /etc/vsftpd/ftpvusers.conf.d/

vim /etc/vsftpd/ftpvusers.conf.d/ftp1
anon_upload_enable=YES
anon_mkdir_write_enable=YES

vim  /etc/vsftpd/ftpvusers.conf.d/ftp2
local_root=/app/ftp2
anon_upload_enable=YES
anon_mkdir_write_enable=YES

8
 準備ftp2的目錄
mkdir -p /app/ftp2/upload
chown ftpvuser /app/ftp2/upload

9
 測試

四.實現(xiàn)基于MYSQL驗證的VSFTP虛擬用戶

1 首先準備配置環(huán)境,兩臺centos主機,一個作為ftp服務(wù)器,一個作為mysql服務(wù)器

2 在ftp服務(wù)器上。yum install mariadb-server vsftpd mariadb-devel pam-devel openssl-devel mariadb

3 (主機是centos7)編譯安裝pam_mysql 在ftp服務(wù)器上
tar xvf pam_mysql-0.7RC1.tar.gz
cd pam_mysql-0.7RC1/
./configure --with-mysql=/usr --with-pam=/usr --with-pam-mods-dir=/lib64/security
ls /lib64/security/pam_mysql.so
make && make install

4 在mysql 服務(wù)器,準備用戶和數(shù)據(jù)表
yum install mariadb-server
systemctl start mariadb
mysql

create database ftpdb;
create table ftpvusers (id int unsigned auto_increment primary key,username char(30),password char(48));
insert ftpvusers (username,password) values ('ftpuser1',password('centos')),('ftpuser2',password('centos'));
insert ftpvusers (username,password) values ('ftpuser2',password('centos')),('ftpuser2',password('centos'));
grant all on ftpdb.* to ftpuser@'192.168.25.107' identified by 'centos';
flush privileges;

5 在ftp服務(wù)器,創(chuàng)建PAM配置文件
vim /etc/pam.d/ftp.mysql
auth required pam_mysql.so user=ftpuser passwd=centos host=192.168.25.108 db=ftpdb table=ftpvusers usercolumn=username passwdcolumn=password crypt=2
account required pam_mysql.so user=ftpuser passwd=centos host=192.168.25.108 db=ftpdb table=ftpvusers usercolumn=username passwdcolumn=password crypt=2

6 修改vsftpd配置文件
vim /etc/vsftpd/vsftpd.conf
pam_service_name=ftp.mysql
guest_enable=YES
guest_username=ftpvuser
user_config_dir=/etc/vsftpd/vusers.conf.d/

7創(chuàng)建dir目錄
mkdir /etc/vsftpd/vusers.conf.d/
vim /etc/vsftpd/vusers.conf.d/ftpuser1
anon_upload_enable=YES

vim /etc/vsftpd/vusers.conf.d/ftpuser2
local_root=/app/ftpsite2/
anon_upload_enable=YES

mkdir -pv /app/ftpsite2/upload
chown ftpvuser /app/ftpsite2/upload

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容