FTP
File Transfer Protocol
基於c/s
FTP會話屬於複合TCP連接
控制連接TCP21端口,發送FTP命令信息
數據連接TCP20端口,上傳/下載數據
數據連接模式
主動 20端口---->主動連接---->客戶端
被動 服務端??<----被動連接<----客戶端
傳輸模式
文本模式 ASCII 模式,文本序列傳輸
二進制模式 Binary模式,二進制序列傳輸
FTP用戶類型
匿名用戶:ftp或anonymous
本地用戶:Linux服務器本機的系統用戶賬號
虛擬用戶:賬號信息存放在獨立的文件或數據庫內
vsftpd
Very Secure FTP Daemon
非常案例的FTP守護程序
服務程序/usr/sbin/vsftpd
服務腳本/etc/init.d/vsftpd
ftp工具
匿名瀏覽 ftp://ip
用戶驗證訪問ftp://user:pass@IP/path
主配置文件
配置目錄/etc/vsftpd
主配置文件 vsftpd.conf
黑名單文件 ftpusers
黑/白名單文件 user_list
[root@localhost test]# ls /etc/vsftpd/
ftpusers user_list vsftpd.conf vsftpd_conf_migrate.sh
幫助
當我們忘記時可以查看幫助文檔和MAN 配置文件
/usr/share/doc/
全局FTP配置
listen 是否以獨立運行方式監聽服務
listen_address 設置監聽FTP服務的IP地址
listen_port 設置監聽FTP服務的端口
write_enable 是否僱用寫入權限
download_enable 是否允許下載
anonymous_enable 是否僱用匿名訪問
anon_root 匿名FTP的根目錄
local_enable 是否僱用本地用戶
local_root 本地用戶的FTP根目錄
local_umask 本地用戶上傳的權限掩碼
chroot_local_user 是否禁錮在主目錄
用戶訪問控制
黑名單文件 /etc/vsftpd/ftpusers
列入其中的用戶被禁止訪問
黑白名單文件 /etc/vsftpd/user_list
userlist_enable=YES 決定是否啓動些文件
userlist_deny=YES|NO 當YES時爲黑名單,否則白名單
FTP連接及傳輸控制
併發數限制 帶寬限制
max_clients 限制併發的客戶端個數
max_per_ip 限制每個客戶機IP的併發連接數
anon_max_rate 匿名最大速度(字節/秒)
local_max_rate 驗證用戶最大速率(字節/秒)
當
userlist_enable=YES
userlist_deny=NO
僅允許列表中的用戶
清空user_list添加需要訪問FTP的用戶
-------------------------------------------------
黑名單不允許登錄FTP服務
[root@localhost vsftpd]# cat ftpuser
# Users that are not allowed to login via ftp
root
bin
daemon
adm
lp
sync
shutdown
halt
news
uucp
operator
games
nobody
實驗
vsftpd + pam + mysql
首先安裝相應的軟件包
yum -y install vsftpd
yum -y install mysql-server mysql-devel
yum -y groupinstall "Development Tools" "Development Libraries"
yum install pam-devel -y
安裝pam_mysql-0.7RC1
首先去官網下
http://nchc.dl.sourceforge.net/project/pam-mysql/pam-mysql/0.7RC1/pam_mysql-0.7RC1.tar.gz
tar xf pam_mysql-0.7RC1.tar.gz
cd pam_mysql-0.7RC1
./configure --with-mysql=/usr --with-openssl
make
make install
pam包已裝上
[root@localhost pam_mysql-0.7RC1]# ll /lib/security
total 140
-rwxr-xr-x. 1 root root 876 Aug 14 23:11 pam_mysql.la
-rwxr-xr-x. 1 root root 138564 Aug 14 23:11 pam_mysql.so
安裝後準備
/etc/init.d/vsftpd start
/etc/init.d/mysqld start
chkconfig vsftpd on
chkconfig mysqld on
建立pam認證文件
vim /etc/pam.d/vsftpd.mysql
auth required /lib/security/pam_mysql.so user=user1 passwd=password1 host=localhostdb=vsftpd table=ftpuser usercolumn=user passwdcolumn=password crypt=0
account required /lib/security/pam_mysql.so user=user1 passwd=password1 ost=localhost db=vsftpd table=ftpuser usercolumn=user passwdcolumn=password crypt=0
進入mysql
mysql> create database vsftpd;
mysql> use vsftpd;
mysql> create table ftpuser (
id int AUTO_INCREMENT NOT NULL,
user char(20) binary NOT NULL,
password char(48) binary NOT NULL,
primary key(id)
);
myssql> desc ftpuser;
mysql> grant select on vsftpd.* to user1@localhost identified by 'password1';
mysql> grant select on vsftpd.* to [email protected] identified by 'password1';
mysql> flush privileges;
新建兩個虛擬用戶
mysql> insert into ftpuser(user,password) values('vuser1','1');
mysql> insert into ftpuser(user,password) values('vuser2','1');
mysql> select * from ftpuser
-> ;
+----+--------+----------+
| id | user | password |
+----+--------+----------+
| 1 | vuser1 | 1 |
| 2 | vuser2 | 1 |
+----+--------+----------+
2 rows in set (0.01 sec)
驗證數據庫
mysql -uuser1 -ppassword1
新建系統用戶-->虛擬用戶家目錄
useradd -s /sbin/nologin -d /var/vsftpdroot/ vuser
chmod go+rw /var/vsftpdroot
修改配置文件
vim /etc/vsftpd/vsftpd.conf
anonymous_enable=YES
local_enable=YES
write_enable=YES
anon_upload_enable=NO
anon_mkdir_write_enable=NO
chroot_local_user=YES
guest_enable=YES
guest_username=vuser
pam_service_name=vsftpd.mysql
以上配置VSFTPD虛擬用戶 虛擬用戶就是匿名用戶
注:配置文件系統不要寫錯,否則無法登錄
補充
配置虛擬用戶具有不同的訪問權限
# vim vsftpd.conf
添加如下選項
user_config_dir=/etc/vsftpd/vuser_acl_dir
創建所需要目錄,併爲虛擬用戶提供配置文件
mkdir /etc/vsftpd/vuser_acl_dir
cd /etc/vsftpd/vuser_acl_dir
touch vuser1 vuser2
vim /etc/vsftpd/vuser_acl_dir/vuser1
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
驗證
vuser2用戶
匿名用戶
虛擬用戶還有一種方法
確認安裝PAM服務相關部件
yum -y install pam*
這裏要特別安裝一個db4的包,用來支持文件數據庫。
yum -y install db4*
建立文件 兩個用戶
[root@localhost ~]# cat /etc/vsftpd/vuser
vu1 用戶名
1 密碼
vu2 用戶名
2 密碼
使用db_load命令生成虛擬用戶口令認證文件
db_load -T -t hash -f /etc/vsftpd/vsftpd.user /etc/vsftpd/vsuser.db
useradd vuser -s /sbin/nologin -d /var/vuserroot/
vim /etc/vsftpd/vsftpd.conf
pam_service_name=vsftpd
anon_upload_enable=NO
anon_mkdir_write_enable=NO
chroot_local_user=YES
guest_enable=YES
guest_username=vu
註釋全部的行,添加以下內容
vim /etc/pam.d/vsftpd
auth required pam_userdb.so db=/etc/vsftpd/vuser
account required pam_userdb.so db=/etc/vsftpd/vuser
關於
FTP併發及帶寬限制
實驗
將50M的文件共享
匿名用戶10KB/S
普通用戶50KB/S
每個IP2個併發連接
最多允許100個併發連接
生成50M文件
[root@localhost ftp]# dd if=/dev/zero of=file50M count=50000 bs=1000
50000+0 records in
50000+0 records out
50000000 bytes (50 MB) copied, 0.961573 s, 52.0 MB/s
配置文件加/etc/vsftpd/vsftpd.conf最後加
限制IP併發連接
max_clients=100
max_per_ip=2
配置文件加/etc/vsftpd/vsftpd.conf最後加
限制速率
匿名用戶10KB/S
本地用戶50KB/S
注:默認單位是字節
anon_max_rate=10000
local_max_rate=50000
此爲匿名用戶
本地用戶
加密方式
FTPS SSL
SFTP SSH
還有一個小技巧,可以和HTTP服務合起來
HTTP家目錄和VSFTPD目錄設爲相同
我們可以通過FTP來遠程更新網頁內容