主要學習內容
- FTP服務 ?
- NFS服務
- SAMBA服務
一.文件傳輸協議(ftp)
- File Transfer Protocol 早期的三個應用級協議之一
- 基于C/S結構
- 雙通道協議:數據和命令連接
- 數據傳輸格式:二進制(默認)
(1) FTP的連接模式
客戶端和服務器端之間由雙套接字通道進行連接,其中第一條鏈接通道是命令連接通道用來傳輸指令蜒滩,并且服務器端口是固定的嚷量,端口號21钧敞,客戶端端口是隨機的
第二條通道是數據連接通道履植,用來實現數據的傳輸亥啦,數據端口是隨機的
數據的端口是通過命令連接通道與客戶端進行協商潜必,確定出來的端口號
端口計算如圖:
(2)FTP的兩種模式
被動模式: 客戶端主動連接服務器
客戶端向服務器端建立命令連接通道活箕,此時客戶端打開一個隨機端口段标,服務器端打開21tcp端口
數據端:客戶端向數據端建立數據連接通道涯冠,數據端通過命令連接通道和客戶端協商,為數據端口生成一個隨機端口
主動模式:
命令連接方式不變
數據端主動向客戶端發(fā)送連接請求逼庞,建立一個數據通道蛇更,并且端口為固定端口20
主動模式與被動模式的切換方式
二.ftp軟件介紹
- FTP服務器: Wu-ftpd,Proftpd赛糟,Pureftpd派任,ServU,IIS vsftpd:Very Secure FTP Daemon璧南,CentOS默認FTP服務器 高速掌逛,穩(wěn)定,下載速度是WU-FTP的兩倍 ftp,redhat.com數據:單機最多可支持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,FlashFXP盒粮,LeapFtp
IE ftp://username:password@ftpserver - 狀態(tài)碼:
1XX:信息
125:數據連接打開
2XX:成功類狀態(tài) 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服務
(1)由vsftpd包提供 ?
不再由xinetd管理 ?
用戶認證配置文件:/etc/pam.d/vsftpd
服務腳本: /usr/lib/systemd/system/vsftpd.service /etc/rc.d/init.d/vsftpd ?
配置文件:/etc/vsftpd/vsftpd.conf man 5 vsftpd.conf
格式:option=value
注意:=前后不要有空格 ?
匿名用戶(映射為系統用戶ftp )共享文件位置:/var/ftp ?
系統用戶共享文件位置:用戶家目錄 ?
虛擬用戶共享文件位置:為其映射的系統用戶的家目錄?
(2)相關服務配置
- 命令端口
listen_port=21——該端口為默認設置,也可以手動添加到配置文件中主動模式端口
connect_from_port_20=YES
ftp_data_port=2020——修改新的主動模式端口
vim /etc/vsftp/vsftp.conf
重啟服務systemctl restart vsftpd
- 被動模式端口范圍
在linux客戶端默認使用被動模式
windows客戶端使用主動模式
pasv_min_port=6000
pasv_max_port=6010
手動加入配置文件中- 使用當地時間
use_localtime=YES 使用當地時間(默認時間為NO,使用GMT時間)
如果是本地時間丹皱,不要改變妒穴,或改為NO
如果是別的時區(qū)宋税,要改為YES有關匿名用戶的設置
no_anon_password=YES
anon_upload_enable=YES——去掉注釋生效
注意:匿名賬號不能有寫權限,如果有寫權限宰翅,則無法登錄
mkdir /var/ftp/upload——創(chuàng)建一個子目錄
setfacl -m u:ftp:rwx /var/ftp/upload
去掉注釋后此時可以進行上傳
anon_mkdir_write_enable=YES——去掉注釋可以創(chuàng)建子目錄或是文件
- anon_world_readable_only ——默認是yes弃甥,不需要寫入,代表只有所有人都有讀權限才可以下載
如果在/var/ftp/upload中汁讼,并不是所有人都有讀權限的話淆攻,無法進行下載anon_other_write_enable=YES 可刪除和修改上傳的文件
將上述內容寫入配置文件中,不寫默認是無法刪除和修改上傳的文件
寫入配置文件后嘿架,重啟服務即可生效
- anon_umask=077 指定匿名上傳umask
將umask值改為022就可以實現匿名上傳和下載功能——文件權限為644指定上傳文件的默認的所有者和權限
chown_uploads=YES(默認NO)
chown_username=who ——修改所有者
chown_upload_mode=0644——寫入配置文件中
(3)linux系統用戶設置
在默認情況下是可以以系統用戶的身份進行進行登錄
即使將系統用戶的shell類型改變依然可以進行登錄
guest_enable=YES——所有系統用戶都映射到guest中瓶珊,并且和guest_username=who配合使用,一起生效
這樣所有系統用戶都被映射成who的身份
注意權限問題耸彪,要去掉who的家目錄的寫權限 chmod 555 /home/who,這樣做可以使其他用戶的權限受到限制伞芹,使系統更安全
設置映射后效果
- local_enable=YES——改為no后linux系統用戶無法登錄
- wirte_enable=YES——改為no后也無法上傳文件
local_root=/app—指定非匿名用戶登錄時所在的家目錄
chroot_local_user=YES——禁錮所有系統用戶在家目錄中
chmod u-w /home/zhangnan
- chroot_list_enable=YES
- chroot_list_file=/etc/vsftpd/chroot_list
以上兩個命令實現對特定用戶的禁錮
mkdir /etc/vsftpd/chroot_list——在該文件中加入要禁錮的系統用戶
chroot_list_enable=YES——如果yes改為no,則加入列表的用戶會被禁錮,如果是yes,則加入的用戶為白名單不會被禁錮
(4)有關ftp的日志設置
- 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"
banner_file=/etc/vsftpd/ftpbanner.txt 優(yōu)先上面項生效 ——將登錄信息寫入該文件中
cp /etc/issue /etc/vsftpd/ftp.txt?
目錄訪問提示信息 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
(6)使用pam完成用戶認證
使用pam(Pluggable Authentication Modules)完成用戶認證
pam_service_name=vsftpd
pam配置文件:/etc/pam.d/vsftpd
/etc/vsftpd/ftpusers 默認文件中用戶拒絕登錄
如果在/etc/pam.d/vsftpd將deny改為allow,那么在名單中的用戶為可登陸的,不在名單中的為不可登陸的
是否啟用控制用戶登錄的列表文件
userlist_enable=YES 默認有此設置
userlist_deny=YES(默認值)黑名單,不提示口令召川,NO為白名單
userlist_file=/etc/vsftpd/users_list 此為默認值
(7) 配置FTP服務以非獨立服務方運行
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服務后 service xinetd start 實現非獨立控制
三.實現基于文件驗證的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
實驗步驟
1 還原配置文件 cp /etc/vsftpd/vsftp.conf.bak vsftpd.conf
2 創(chuàng)建用戶數據庫文件
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
測試
四.實現基于MYSQL驗證的VSFTP虛擬用戶
1 首先準備配置環(huán)境倍阐,兩臺centos主機概疆,一個作為ftp服務器,一個作為mysql服務器
2 在ftp服務器上峰搪。yum install mariadb-server vsftpd mariadb-devel pam-devel openssl-devel mariadb
3 (主機是centos7)編譯安裝pam_mysql 在ftp服務器上
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 服務器岔冀,準備用戶和數據表
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服務器,創(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