文件共享服務 FTP
文件共享服務 FTP
文件傳輸協議FTP
- File Transfer Protocol 早期的三個應用級協議之一
- 基於C/S結構
- 雙通道協議:數據和命令鏈接
- 數據傳輸格式:二進制(默認)和文本
- 兩種模式:服務器角度
- 主動(PORT style):服務器主動鏈接
- 命令(控制):客戶端:隨機port --- 服務器:tcp21
- 數據:客戶端:隨機port ---服務器:tcp20
- 被動(PASV style):客戶端主動鏈接
- 命令(控制):客戶端:隨機port --- 服務器:tcp21
- 數據:客戶端:隨機port ---服務器:隨機port
- 服務器被動模式數據端口示例:
- 227 Entering Passive Mode (172,16,0,1,224,59)
- 服務器數據端口爲:224*256+59
FTP軟件介紹
- FTP服務器:
- Wu-ftpd,Proftpd,Pureftpd,ServU,IIS
- vsftpd:Very Secure FTP Daemon,CentOS默認FTP服務器
- 高速,穩定,下載速度是WU-FTP的兩倍
- ftp.redhat.com數據:單機最多可支持15000個併發
- 客戶端軟件:
- 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,FlashFXP,LeapFtp
- IE ftp://username:password@ftpserver
- 狀態碼:
- 1XX:信息 125:數據鏈接打開
- 2XX:成功類狀態 200:命令OK 230:登陸成功
- 3XX:補充類 331:用戶名OK
- 4XX:客戶端錯誤 425:不能打開數據鏈接
- 5XX:服務器錯誤 530:不能登陸
- 用戶認證:
- 匿名用戶:ftp,anonymous,對應Linux用戶ftp
- 系統用戶:Linux用戶,用戶/etc/passwd,密碼/etc/shadow
- 虛擬用戶:特定服務的專用用戶,獨立的用戶/密碼文件
- nsswitch:network service switch名稱解析框架
- pam:pluggable authentication module 用戶認證
- /lib64/security /etc/pam.d/ /etc/pam.conf
vsftpd服務
- 由vsftpd包提供
- 再也不由xinetd管理
- 用戶認證配置文件:/etc/pam.d/vsftpd
- 服務腳本: /usr/lib/systemd/system/vsftpd.service
- 配置文件:/etc/vsftpd/vsftpd.conf
- man 5 vsftpd.conf
- 格式:option=value
- 注意:= 先後不要有空格
- 匿名用戶(映射爲系統用戶ftp )共享文件位置:/var/ftp
- 系統用戶共享文件位置:用戶家目錄
- 虛擬用戶共享文件位置:爲其映射的系統用戶的家目錄
vsftpd服務配置
- 命令端口
- 主動模式端口
- connect_from_port_20=YES 主動模式端口爲20
- ftp_data_port=20 (默認) 指定主動模式的端口
- 被動模式端口範圍
- linux 客戶端默認使用被動模式
- windows 客戶端默認使用主動模式
- pasv_min_port=6000 0爲隨機分配
- pasv_max_port=6010
- 使用當地時間
- use_localtime=YES 使用當地時間(默認爲NO,使用GMT)
- 匿名用戶
- anonymous_enable=YES 支持匿名用戶
- no_anon_password=YES(默認NO) 匿名用戶略過口令檢查
- anon_upload_enable=YES 匿名上傳,注意:文件系統權限
- anon_mkdir_write_enable=YES 匿名建目錄
- anon_world_readable_only (默認YES)只能下載所有讀的文件
- anon_umask=0333 指定匿名上傳文件的umask,默認077
- anon_other_write_enable=YES 可刪除和修改上傳的文件
- 指定上傳文件的默認的全部者和權限
- chown_uploads=YES(默認NO)
- chown_username=wang
- chown_upload_mode=0644
- Linux系統用戶
- local_enable=YES 是否容許linux用戶登陸
- write_enable=YES 容許linux用戶上傳文件
- local_umask=022 指定系統用戶上傳文件的默認權限
- guest_enable=YES 全部系統用戶都映射成guest用戶
- guest_username=ftp 配合上面選項才生效,指定guest用戶
- local_root=/ftproot guest用戶登陸所在目錄
- 禁錮全部系統用戶在家目錄中
- chroot_local_user=YES(默認NO,不由錮)禁錮系統用戶
- 禁錮或不由錮特定的系統用戶在家目錄中,與上面設置功能相反
- chroot_list_enable=YES
- chroot_list_file=/etc/vsftpd/chroot_list
- 當chroot_local_user=YES時,則chroot_list中用戶不由錮
- 當chroot_local_user=NO時,則chroot_list中用戶禁錮
- 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(默認)可自動生成
- 登陸提示信息
- ftpd_banner=「welcome to mage ftp server"
- banner_file=/etc/vsftpd/ftpbanner.txt
- 目錄訪問提示信息
- dirmessage_enable=YES (默認)
- message_file=.message(默認) 信息存放在指定目錄下.message
- 使用pam(Pluggable Authentication Modules)完成用戶認證
- pam_service_name=vsftpd
- pam配置文件:/etc/pam.d/vsftpd
- /etc/vsftpd/ftpusers 默認文件中用戶拒絕登陸
- 是否啓用控制用戶登陸的列表文件
- userlist_enable=YES 默認有此設置
- userlist_deny=YES(默認值) 黑名單,不提示口令,NO爲白名單
- userlist_file=/etc/vsftpd/users_list 此爲默認值
- vsftpd服務指定用戶身份運行
- 鏈接數限制
- max_clients=0 最大併發鏈接數
- max_per_ip=0 每一個IP同時發起的最大鏈接數
- 傳輸速率:字節/秒
- anon_max_rate=0 匿名用戶的最大傳輸速率
- local_max_rate=0 本地用戶的最大傳輸速率
- 鏈接時間:秒爲單位
- connect_timeout=60 主動模式數據鏈接超時時長
- accept_timeout=60 被動模式數據鏈接超時時長
- data_connection_timeout=300 數據鏈接無數據輸超時時長
- idle_session_timeout=60 無命令操做超時時長
- 優先以文本方式傳輸
- ascii_upload_enable=YES
- ascii_download_enable=YES
實現基於SSL的FTPS
- 查看是否支持SSL
- ldd `which vsftpd` 查看到libssl.so
- 建立自簽名證書
- cd /etc/pki/tls/certs/
- make vsftpd.pem
- openssl x509 -in vsftpd.pem -noout –text
- 配置vsftpd服務支持SSL:/etc/vsftpd/vsftpd.conf
- ssl_enable=YES 啓用SSL
- allow_anon_ssl=NO 匿名不支持SSL
- force_local_logins_ssl=YES 本地用戶登陸加密
- force_local_data_ssl=YES 本地用戶數據傳輸加密
- rsa_cert_file=/etc/pki/tls/certs/vsftpd.pem
- 用filezilla等工具測試
vsftpd虛擬用戶
- 虛擬用戶:
- 全部虛擬用戶會統一映射爲一個指定的系統賬號:訪問共享位置,即爲此係統賬號的家目錄
- 各虛擬用戶可被賦予不一樣的訪問權限,經過匿名用戶的權限控制參數進行指定
- 虛擬用戶賬號的存儲方式:
- 文件:編輯文本文件,此文件須要被編碼爲hash格式
- 奇數行爲用戶名,偶數行爲密碼
- db_load -T -t hash -f vusers.txt vusers.db
- 關係型數據庫中的表中:
- mysql庫:pam要依賴於pam-mysql
- /lib64/security/pam_mysql.so
- /usr/share/doc/pam_mysql-0.7/README
實現基於文件驗證的vsftpd虛擬用戶
- [root@CentOS7 ~]# yum install vsftpd -y
- [root@CentOS7 ~]# cat <<-EOF > /etc/vsftpd/vuser.txt
> zhangsan
> 123
> lisi
> 456
> EOF
- [root@CentOS7 ~]# cd /etc/vsftpd/
[root@CentOS7 vsftpd]# db_load -T -t hash -f vuser.txt vuser.db
[root@CentOS7 vsftpd]# chmod 600 vuser.db
- [root@CentOS7 vsftpd]# useradd -d /var/ftproot -s /sbin/nologin vuser
- [root@CentOS7 vsftpd]# chmod 555 /var/ftproot/
- [root@CentOS7 vsftpd]# mkdir /var/ftproot/upload
- [root@CentOS7 vsftpd]# setfacl -m u:vuser:rwx /var/ftproot/upload
- vim /etc/pam.d/vsftpd.db
- auth required pam_userdb.so db=/etc/vsftpd/vuser
account required pam_userdb.so db=/etc/vsftpd/vuser
- 映射爲系統用戶 vuser , 指定 pam的配置文件
- vim /etc/vsftpd/vsftpd.conf
guest_enable=YES
guest_username=vuser
pam_service_name=vsftpd.db
- 禁用SELinux 或者 setsebool -P ftpd_full_access 1
- mdkir /etc/vsftpd/vuser.d/
- vim /etc/vsftpd/vsftpd.conf
user_config_dir=/etc/vsftpd/vuser.d/
- 容許虛擬用戶 zhangsan 可讀寫
- cd /etc/vsftpd/vuser.d/
- vim zhangsan
- anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
- 在 根目錄 /var/ftproot/能夠下載,但不能上傳
- 在 /var/ftproot/upload目錄下是能夠下載和上傳的
- 建立 虛擬用戶 lisi 的配置文件
- vim /etc/vsftpd/vuser.d/lisi
- local_root=/ftproot
- mkdir /ftproot
- lisi 用戶能夠下載但不能上傳到根目錄
實現基於MYSQL驗證的vsftpd虛擬用戶
- 虛擬用戶信息存放在一臺獨立的 mysql 服務器中
- yum install mariadb-server -y; mysql
- mysql> create database vsftpd;
- mysql> use vsftpd;
- mysql> create table users(id int auto_increment not null primary key,name char(50) binary not null, password char(48) binary not null);
- mysql> insert into users(name,password)values('lisi',password('456'));
- mysql> insert into users(name,password)values('zhangsan',password('123'));
- grant select on vsftpd.users to vsftpd@'192.168.209.%' identified by '123'; // vsftpd服務器經過這個網段的vsftpd這個用戶鏈接上數據庫
- flush privileges;
- 搭建獨立一臺 vsftpd 服務器
- 安裝 pam_mysql
- 下載 pam_mysql 的源碼包,編譯安裝
- yum install gcc mariadb-devel pam-devel gcc-c++
- tar xvf pam_mysql-0.7RC1.tar.gz
- cd /data/pam_mysql-0.7RC1/
./configure --with-pam-mods-dir=/lib64/security/
make && make install
- 安裝 vsftpd 服務,系統用戶和 ftp 根目錄,指定 pam 配置文件,修改配置文件, 啓動 vsftpd 服務
- yum install vsftpd -y
- useradd -d /data/ftproot -s /sbin/nologin vuser
chmod 555 /data/ftproot/
mkdir /data/ftproot/upload
setfacl -m u:vuser:rwx /data/ftproot/upload
- vim /etc/pam.d/vsftpd.mysql
auth required pam_mysql.so user=vsftpd passwd=123 host=192.168.209.7 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
account required pam_mysql.so user=vsftpd passwd=123 host=192.168.209.7 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
- vim /etc/vsftpd/vsftpd.conf
pam_service_name=vsftpd.mysql
guest_enable=yes
guest_username=vuser
- systemctl start vsftpd
- 獨立一臺 ftp 客戶端測試
歡迎關注本站公眾號,獲取更多信息