vsftpd(very secure FTP daemon)是一個基於GPL發佈的類Unix系統上使用的FTP服務器軟件,它是一個安全、高速、穩定的FTP服務器
一、FTP
FTP(File Transfer Protocol,文件傳輸協議)用於Internet上的控制文件的雙向傳輸。同時,它也是一個應用程序(Application)。基於不同的操作系統有不同的FTP應用程序,而所有這些應用程序都遵守同一種協議以傳輸文件。
1、ftp基於C/S架構
client:
ftp、lftp、lftpget、wget、curl、filezilla、gftp(Linux GUI)、flashfxp、cuteftp
server:監聽在21/tcp
wu-ftpd、proftpd、pureftp、vsftpd、ServU
2、FTP客戶端與服務器的連接:
命令連接:文件管理類命令,始終在線的連接
數據連接:數據傳輸,按需創建及關閉的連接
client與server的數據連接模式有兩種:
①Standard(PORT方式,主動方式)
FTP 客戶端首先和服務器的TCP 21端口建立連接,用來發送命令,客戶端需要接收數據的時候在這個通道上發送PORT命令。PORT命令包含了客戶端用什麼端口接收數據。在傳送數據的時候,服務器端通過自己的TCP 20端口連接至客戶端的指定端口發送數據
例如:
命令:Client: 50000 --> Server: 21
數據:Server: 20/tcp --> Client: 50000+1
②Passive(PASV,被動方式)
建立控制通道和Standard模式類似,但建立連接後發送Pasv命令。服務器收到Pasv命令後,打開一個臨時端口(端口號大於1023小於65535)並且通知客戶端在這個端口上傳送數據的請求,客戶端連接FTP服務器此端口,然後FTP服務器將通過這個端口傳送數據
例如:
命令:Client: 50000 --> Server: 21
數據:Client: 50000+1 --> Server: 隨機端口
★ftp服務器採取的傳輸模式一般爲被動方式,原因有二:
①用戶端通常是開啓防火牆拒絕其它主機主動發起的新連接的
②在主動模式下,FTP服務器與用戶端之間具有防火牆的連接問題
如今絕大部分用戶端位於內網,內網主機與外網通信時需要網關執行NAT。在主動模式下,用戶端通過命令通道告知服務器端用哪個端口(port N)接收數據,但服務器端只知道NAT後的IP(即網關的IP),它會主動連接網關的port N發起連接,問題是網關的port N並未開放。
3、響應碼:
1xx: 信息
2xx: 成功類的狀態碼
3xx: 提示需進一步提供補充類信息的狀態碼
4xx: 客戶端錯誤
5xx: 服務端錯誤
二、vsftpd的安裝配置
安裝:yum -y install vsftpd
主配置文件:/etc/vsftpd/vsftpd.conf
用戶認證配置文件:/etc/pam.d/vsftpd
服務腳本:/etc/rc.d/init.d/vsftpd
vsftpd允許客戶端以匿名、本地或虛擬用戶的身份訪問:
匿名用戶(映射爲ftp用戶)共享資源位置:/var/ftp
本地用戶通過ftp訪問的資源位置:用戶自己的家目錄
虛擬用戶通過ftp訪問的資源位置:給虛擬用戶指定的映射成爲的系統用戶的家目錄
虛擬用戶:僅用於訪問某特定服務中的資源
(有關用戶認證的理論知識見文末補充部分)
[root@node2 ~]# yum -y install vsftpd ... [root@node2 ~]# rpm -ql vsftpd /etc/logrotate.d/vsftpd #實現日誌滾動功能的腳本 /etc/pam.d/vsftpd /etc/rc.d/init.d/vsftpd /etc/vsftpd /etc/vsftpd/ftpusers /etc/vsftpd/user_list /etc/vsftpd/vsftpd.conf #主配置文件 /etc/vsftpd/vsftpd_conf_migrate.sh /usr/sbin/vsftpd #主程序 ... /var/ftp #匿名用戶共享資源目錄 /var/ftp/pub [root@node2 ~]# service vsftpd start Starting vsftpd for vsftpd: [ OK ] [root@node2 ~]# netstat -tnap ... tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 34001/vsftpd ... [root@node2 ~]# yum -y install ftp ... [root@node2 ~]# ftp 192.168.30.20 Connected to 192.168.30.20 (192.168.30.20). 220 (vsFTPd 2.2.2) Name (192.168.30.20:root): ftp 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> help Commands may be abbreviated. Commands are: ! debug mdir sendport site $ dir mget put size account disconnect mkdir pwd status append exit mls quit struct ascii form mode quote system bell get modtime recv sunique binary glob mput reget tenex bye hash newer rstatus tick case help nmap rhelp trace cd idle nlist rename type cdup p_w_picpath ntrans reset user chmod lcd open restart umask close ls prompt rmdir verbose cr macdef passive runique ? delete mdelete proxy send ftp> ls 227 Entering Passive Mode (192,168,30,20,234,38). 150 Here comes the directory listing. drwxr-xr-x 2 0 0 4096 Jul 24 00:49 pub 226 Directory send OK. ftp> bye 421 Timeout.
1、匿名用戶的配置:
anonymous_enable=YES
anon_upload_enable=YES #允許匿名用戶上傳文件,默認未啓用。安全起見,實際環境中不能隨意啓用
即使啓用該選項,匿名用戶也無法直接上傳文件,因爲ftp用戶對/var/ftp沒有寫權限,妥當的做法是在/var/ftp目錄下創建子目錄,然後讓該子目錄對ftp用戶開放寫權限,將文件上傳至該子目錄
例如:mkdir /var/ftp/upload
setfacl -m u:ftp:rwx /var/ftp/upload
anon_mkdir_write_enable=YES #允許匿名用戶創建目錄,默認未啓用
anon_other_write_enable=YES #允許匿名用戶刪除文件,默認未啓用
anon_umask=022 #可控制匿名用戶上傳文件的權限
[root@node2 ~]# vim /etc/vsftpd/vsftpd.conf ... # Allow anonymous FTP? (Beware - allowed by default if you comment this out). anonymous_enable=YES # # Uncomment this to allow local users to log in. local_enable=YES # # Uncomment this to enable any form of FTP write command. write_enable=YES # # Default umask for local users is 077. You may wish to change this to 022, # if your users expect that (022 is used by most other ftpd's) local_umask=022 #可以控制本地用戶上傳文件的默認權限 # # Uncomment this to allow the anonymous FTP user to upload files. This only # has an effect if the above global write enable is activated. Also, you will # obviously need to create a directory writable by the FTP user. anon_upload_enable=YES #允許匿名用戶上傳 anon_other_write_enable=YES #允許匿名用戶刪除文件 # # Uncomment this if you want the anonymous FTP user to be able to create # new directories. anon_mkdir_write_enable=YES #允許匿名用戶創建目錄 # # Activate directory messages - messages given to remote users when they # go into a certain directory. dirmessage_enable=YES #用戶訪問某個目錄時可給其反饋一些信息(.message) ... [root@node2 ~]# service vsftpd reload Shutting down vsftpd: [ OK ] Starting vsftpd for vsftpd: [ OK ] [root@node2 ~]# ftp 192.168.30.20 Connected to 192.168.30.20 (192.168.30.20). 220 (vsFTPd 2.2.2) Name (192.168.30.20:root): ftp 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> lcd /etc #切換本地客戶端的目錄 Local directory now /etc ftp> put fstab #上傳文件 local: fstab remote: fstab 227 Entering Passive Mode (192,168,30,20,136,83). 553 Could not create file. ftp> bye 221 Goodbye. [root@node2 ~]# ll /var/ftp total 4 drwxr-xr-x 2 root root 4096 Jul 24 08:49 pub [root@node2 ~]# mkdir /var/ftp/upload [root@node2 ~]# setfacl -m u:ftp:rwx /var/ftp/upload [root@node2 ~]# ftp 192.168.30.20 Connected to 192.168.30.20 (192.168.30.20). 220 (vsFTPd 2.2.2) Name (192.168.30.20:root): ftp 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> cd upload 250 Directory successfully changed. ftp> lcd /etc Local directory now /etc ftp> put grub.conf local: grub.conf remote: grub.conf 227 Entering Passive Mode (192,168,30,20,246,175). 150 Ok to send data. 226 Transfer complete. 769 bytes sent in 8.1e-05 secs (9493.83 Kbytes/sec) ftp> put fstab local: fstab remote: fstab 227 Entering Passive Mode (192,168,30,20,217,153). 150 Ok to send data. 226 Transfer complete. 881 bytes sent in 0.000101 secs (8722.77 Kbytes/sec) ftp> ls 227 Entering Passive Mode (192,168,30,20,126,145). 150 Here comes the directory listing. -rw------- 1 14 50 881 Nov 21 21:17 fstab -rw------- 1 14 50 769 Nov 21 21:19 grub.conf 226 Directory send OK. ftp> delete grub.conf 250 Delete operation successful. ftp> ls 227 Entering Passive Mode (192,168,30,20,84,157). 150 Here comes the directory listing. -rw------- 1 14 50 881 Nov 21 21:17 fstab 226 Directory send OK. ftp> get fstab #下載文件 local: fstab remote: fstab 227 Entering Passive Mode (192,168,30,20,188,150). 550 Failed to open file. #提示無法打開文件,檢查發現文件的權限是600 ftp> bye 221 Goodbye. [root@node2 ~]# chmod 644 /var/ftp/upload/fstab [root@node2 ~]# vim /etc/vsftpd/vsftpd.conf ... anon_umask=022 #添加該項,使匿名用戶上傳文件的權限爲644(666-022) ... [root@node2 ~]# service vsftpd reload Shutting down vsftpd: [ OK ] Starting vsftpd for vsftpd: [ OK ] [root@node2 ~]# ftp 192.168.30.20 Connected to 192.168.30.20 (192.168.30.20). 220 (vsFTPd 2.2.2) Name (192.168.30.20:root): ftp 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> cd upload 250 Directory successfully changed. ftp> lcd /etc Local directory now /etc ftp> put grub.conf local: grub.conf remote: grub.conf 227 Entering Passive Mode (192,168,30,20,152,4). 150 Ok to send data. 226 Transfer complete. 769 bytes sent in 9.8e-05 secs (7846.94 Kbytes/sec) ftp> ls 227 Entering Passive Mode (192,168,30,20,160,211). 150 Here comes the directory listing. -rw-r--r-- 1 14 50 881 Nov 21 21:17 fstab -rw-r--r-- 1 14 50 769 Nov 22 16:21 grub.conf #新上傳文件的默認權限已爲644 226 Directory send OK. ftp> lcd /root Local directory now /root ftp> get grub.conf local: grub.conf remote: grub.conf 227 Entering Passive Mode (192,168,30,20,140,191). 150 Opening BINARY mode data connection for grub.conf (769 bytes). 226 Transfer complete. #成功下載 769 bytes received in 5.1e-05 secs (15078.43 Kbytes/sec) ftp> exit 221 Goodbye.
2、本地用戶的配置:
local_enable=YES
write_enable=YES
local_umask=022
鎖定所有的ftp本地用戶於其家目錄中:
chroot_local_user=YES #默認未啓用
鎖定文件中指定的ftp本地用戶於其家目錄中:
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
[root@node2 ~]# vim /etc/vsftpd/vsftpd.conf ... chroot_list_enable=YES # (default follows) chroot_list_file=/etc/vsftpd/chroot_list ... [root@node2 ~]# vim /etc/vsftpd/chroot_list wittgenstein [root@node2 ~]# service vsftpd reload Shutting down vsftpd: [ OK ] Starting vsftpd for vsftpd: [ OK ] [root@node2 ~]# ftp 192.168.30.20 Connected to 192.168.30.20 (192.168.30.20). 220 (vsFTPd 2.2.2) Name (192.168.30.20:root): wittgenstein 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> pwd 257 "/" #顯示已被鎖 ftp> bye 221 Goodbye. [root@node2 ~]# ftp 192.168.30.20 Connected to 192.168.30.20 (192.168.30.20). 220 (vsFTPd 2.2.2) Name (192.168.30.20:root): tesla 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> pwd 257 "/home/tesla"
3、日誌:
xferlog_enable=YES #是否啓用傳輸日誌
xferlog_std_format=YES
xferlog_file=/var/log/xferlog(需手動創建)
4、改變上傳文件的屬主:
chown_uploads=YES
chown_username=whoever
5、 用戶登錄控制
①vsftpd使用pam完成用戶認證,其用到的pam配置文件:
pam_service_name=vsftpd (/etc/pam.d/vsftpd)
/etc/vsftpd/ftpusers #黑名單
②是否啓用控制用戶登錄的列表文件:
userlist_enable=YES(默認文件爲/etc/vsftpd/user_list)
userlist_deny=YES(黑名單)/NO(白名單)
[root@node2 ~]# cat /etc/pam.d/vsftpd #%PAM-1.0 session optional pam_keyinit.so force revoke auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed auth required pam_shells.so auth include password-auth account include password-auth session required pam_loginuid.so session include password-auth [root@node2 ~]# vim /etc/vsftpd/vsftpd.conf ... pam_service_name=vsftpd userlist_enable=YES userlist_deny=YES ... [root@node2 ~]# vim /etc/vsftpd/ftpusers ... games nobody tesla #將用戶tesla加入黑名單 [root@node2 ~]# vim /etc/vsftpd/user_list ... games nobody wittgenstein #添加該用戶 [root@node2 ~]# service vsftpd reload Shutting down vsftpd: [ OK ] Starting vsftpd for vsftpd: [ OK ] [root@node2 ~]# ftp 192.168.30.20 Connected to 192.168.30.20 (192.168.30.20). 220 (vsFTPd 2.2.2) Name (192.168.30.20:root): tesla 331 Please specify the password. Password: 530 Login incorrect. Login failed. ftp> bye 221 Goodbye. [root@node2 ~]# ftp 192.168.30.20 Connected to 192.168.30.20 (192.168.30.20). 220 (vsFTPd 2.2.2) Name (192.168.30.20:root): wittgenstein 530 Permission denied. Login failed. ftp> bye 221 Goodbye.
6、連接限制:
max_clients:最大併發連接數
max_per_ip:每個IP可同時發起的併發請求數
7、傳輸速率:
anon_max_rate:匿名用戶的最大傳輸速率,單位是“字節/秒”;
local_max_rate:本地用戶的最大傳輸速率
8、虛擬用戶:
所有的虛擬用戶會被統一映射爲一個指定的本地用戶帳號,訪問的共享位置即爲此本地用戶帳號的家目錄
各虛擬用戶可被賦予不同的訪問權限,通過匿名用戶的權限控制參數進行指定
虛擬用戶的賬號存儲方式:
⑴存於文件中:
奇數行爲用戶名
偶數行爲密碼
此文件需要被編碼爲hash格式
⑵存儲於關係型數據庫中的表中:
即時查詢數據庫完成用戶認證
pam要依賴於pam_mysql(由epel源提供)
yum -y install pam_mysql
①在數據中創建虛擬用戶帳號
mysql> creat database vsftpd;
mysql> grant select on vsftpd.* to vsftpd@'192.168.30.0' identified by 'ftpwd';
mysql> flush privileges;
mysql> use vsftpd;
mysql> create table users (
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 ('tom',password('magedu')); # 安全起見,應該使用mysql的內置函數password()加密密碼後存儲
②建立pam認證所需文件
vim /etc/pam.d/vsftpd.mysql
添加如下兩行:
auth required /lib64/security/pam_mysql.so user=vsftpd passwd=ftpwd host=192.168.30.20(mysql主機地址) db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
account required /lib64/security/pam_mysql.so user=vsftpd passwd=ftpwd host=192.168.30.20 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2 # crypt的值依mysql存儲的虛擬用戶密碼是否加密及加密方式不同而不同,具體規則可查看/usr/share/doc/pam_mysql-0.7/README
③建立虛擬用戶映射的本地用戶及對應的目錄
useradd -s /sbin/nologin -d /var/ftproot vuser
chmod go+rx /var/ftproot
④修改vsftpd的配置文件,使其適用mysql認證
確保/etc/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可以在配置文件目錄中爲每個虛擬用戶提供單獨的配置文件以定義其ftp服務訪問權限,每個虛擬用戶的配置文件名同虛擬用戶的用戶名。配置文件目錄可以是任意未使用的目錄,只需要在主配置文件vsftpd.con中指定其路徑及名稱即可
vim /etc/vsftpd/vsftpd.conf
添加選項:
user_config_dir=/etc/vsftpd/vusers-config
mkdir /etc/vsftpd/vusers-config/
cd /etc/vsftpd/vusers-config
touch tom
虛擬用戶對vsftpd服務的訪問權限是通過匿名用戶的相關指令進行的。比如,要讓用戶tom具有上傳文件的權限,可編輯/etc/vsftpd/vusers-config/tom,在其中添加:
anon_upload_enable={YES/NO}
anon_mkdir_write_enable={YES/NO}
anon_other_write_enable={YES/NO}
[root@node2 ~]# yum -y install pam_mysql ... Installed: pam_mysql.x86_64 1:0.7-0.12.rc1.el6 Dependency Installed: mysql-libs.x86_64 0:5.1.73-5.el6_6 Complete! [root@node2 ~]# rpm -ql pam_mysql /lib64/security/pam_mysql.so /usr/share/doc/pam_mysql-0.7 /usr/share/doc/pam_mysql-0.7/COPYING /usr/share/doc/pam_mysql-0.7/CREDITS /usr/share/doc/pam_mysql-0.7/ChangeLog /usr/share/doc/pam_mysql-0.7/NEWS /usr/share/doc/pam_mysql-0.7/README [root@node2 ~]# mysql Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 2 Server version: 5.5.36-MariaDB-log MariaDB Server Copyright (c) 2000, 2014, Oracle, Monty Program Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> create database vsftpd; Query OK, 1 row affected (0.17 sec) MariaDB [(none)]> use vsftpd Database changed MariaDB [vsftpd]> create table users (id int auto_increment not null primary key,name char(20) binary not null,password char(48) binary not null); Query OK, 0 rows affected (0.51 sec) MariaDB [vsftpd]> insert into users (name,password) values ('tom',password('magedu')),('jerry',password('linux')); Query OK, 2 row affected (0.31 sec) MariaDB [vsftpd]> grant select on vsftpd.* to vsftpd@localhost identified by 'ftpwd'; # 本例中vsftpd和mysqld位於同一主機上,故授權通過本機登錄,實際環境中,它們可能位於不同主機上,應按需授權 Query OK, 0 rows affected (0.19 sec) MariaDB [vsftpd]> flush privileges; Query OK, 0 rows affected (0.04 sec) MariaDB [vsftpd]> exit Bye [root@node2 ~]# vim /etc/pam.d/vsftpd.mysql auth required /lib64/security/pam_mysql.so user=vsftpd passwd=ftpwd host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2 account required /lib64/security/pam_mysql.so user=vsftpd passwd=ftpwd host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2 [root@node2 ~]# useradd -s /sbin/nologin -d /var/ftproot vuser [root@node2 ~]# ls -ld /var/ftproot drwx------ 4 vuser vuser 4096 Nov 22 14:51 /var/ftproot [root@node2 ~]# chmod go+rx /var/ftproot [root@node2 ~]# ls -ld /var/ftproot drwxr-xr-x 4 vuser vuser 4096 Nov 22 14:51 /var/ftproot [root@node2 ~]# vim /etc/vsftpd/vsftpd.conf ... #anon_upload_enable=YES #禁用這幾項 #anon_other_write_enable=YES #anon_mkdir_write_enable=YES ... pam_service_name=vsftpd.mysql #重新指定pam認證配置文件 ... guest_enable=YES #允許虛擬用戶登錄 guest_username=vuser user_config_dir=/etc/vsftpd/vusers-config [root@node2 ~]# mkdir /etc/vsftpd/vusers-config [root@node2 ~]# vim /etc/vsftpd/vusers-config/tom anon_upload_enable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES [root@node2 ~]# service vsftpd reload Shutting down vsftpd: [ OK ] Starting vsftpd for vsftpd: [ OK ] [root@node2 ~]# ftp 192.168.30.20 Connected to 192.168.30.20 (192.168.30.20). 220 (vsFTPd 2.2.2) Name (192.168.30.20:root): jerry 331 Please specify the password. Password: 530 Login incorrect. #提示登錄錯誤 Login failed. ftp> exit 221 Goodbye. [root@node2 ~]# tail /var/log/secure #查看日誌 ... Nov 22 16:32:55 node2 vsftpd[36754]: pam_mysql - MySQL error (Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)) [root@node2 ~]# vim /etc/my.cnf #當前主機上的mysql服務程序是通過二進制格式安裝的,其socket路徑默認不是/var/lib/mysql/mysql.sock ... [client] #password = your_password port = 3306 #socket = /tmp/mysql.sock socket = /var/lib/mysql/mysql.sock #修改socket路徑 # Here follows entries for some specific programs # The MariaDB server [mysqld] port = 3306 #socket = /tmp/mysql.sock socket = /var/lib/mysql/mysql.sock #修改socket路徑 ... [root@node2 ~]# service mysqld restart Shutting down MySQL. SUCCESS! Starting MySQL.. SUCCESS! [root@node2 ~]# ftp 192.168.30.20 Connected to 192.168.30.20 (192.168.30.20). 220 (vsFTPd 2.2.2) Name (192.168.30.20:root): jerry 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> pwd 257 "/" ftp> lcd /etc Local directory now /etc ftp> put fstab local: fstab remote: fstab 227 Entering Passive Mode (192,168,30,20,242,54). 550 Permission denied. #沒有給用戶jerry開放上傳權限 ftp> exit 221 Goodbye. [root@node2 ~]# ftp 192.168.30.20 Connected to 192.168.30.20 (192.168.30.20). 220 (vsFTPd 2.2.2) Name (192.168.30.20:root): tom 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> lcd /etc Local directory now /etc ftp> put fstab local: fstab remote: fstab 227 Entering Passive Mode (192,168,30,20,111,120). 150 Ok to send data. 226 Transfer complete. 881 bytes sent in 0.000161 secs (5472.05 Kbytes/sec) ftp> ls 227 Entering Passive Mode (192,168,30,20,226,131). 150 Here comes the directory listing. -rw-r--r-- 1 502 502 881 Nov 22 10:33 fstab 226 Directory send OK. ftp> exit 221 Goodbye.
三、ftp的幾個客戶端工具
除了以上用到的比較簡單的ftp命令外,較常用的ftp客戶端工具還有:
1、lftp:一款優秀的文件傳輸客戶端程序,它支持ftp、ftps、http和https等多種文件傳輸協議。lftp支持tab自動補全
用法:lftp [-u USERNAME,PASSWORD] [-p PORT] HOST #默認端口爲21
也可寫成 lftp [USERNAME:PASSWORD@]HOST[:PORT]
若不指定用戶,默認以匿名用戶的身份登錄
lftp子命令:
help:獲取幫助
cd:切換遠程服務器上的文件系統目錄
lcd:切換本地文件系統目錄
get FILE:下載
!COMMAND:執行shell命令,而非ftp命令
mget FILE1...:下載多個文件,支持使用通配符
mirror DIR:鏡像目錄至本地
put FILE:
mput FILE1...:
[root@node2 ~]# lftp 192.168.30.20 lftp 192.168.30.20:~> ls drwxr-xr-x 2 0 0 4096 Jul 24 00:49 pub drwxrwxr-x 2 0 0 4096 Nov 22 16:21 upload lftp 192.168.30.20:/> lcd /tmp lcd ok, local cwd=/tmp lftp 192.168.30.20:/> get upload/fstab 881 bytes transferred lftp 192.168.30.20:/> !ls /tmp fstab pear pulse-KA4qOJJfNGYU pulse-laPR3wljtejc pulse-t1pCV51k3BVL yum.log lftp 192.168.30.20:/> exit [root@node2 ~]# lftp -u tom 192.168.30.20 #以指定的用戶身份登錄 Password: lftp [email protected]:~> ls -rw-r--r-- 1 502 502 881 Nov 22 10:33 fstab
2、lftpget:通過調用lftp指令下載指定的文件;類似於wget
用法:lftpget [-c] URL [URL...]
選項:
-c:繼續之前的下載
例如:lftpget ftp://192.168.30.20/upload/fstab
3、axel:是一個HTTP/FTP高速下載工具。支持多線程下載、斷點續傳,且可以從多個地址或者從一個地址的多個連接來下載同一個文件。
CentOS官方源和epel源中沒有提供該包,需手動下載安裝:
wget -c http://pkgs.repoforge.org/axel/axel-2.4-1.el6.rf.x86_64.rpm
rpm -ivh axel-2.4-1.el6.rf.x86_64.rpm
用法:axel [OPTIONS] url1 [url2] [url...]
選項:
-n:指定線程數(必須爲大於 0 的數字)
-o:指定另存爲目錄(必須爲本地目錄)
-s:指定下載速度(必須爲大於 0 的數字,單位是 bytes/s)
-q:靜默模式,無任何輸出信息
-V:軟件版本
--help:顯示幫助信息
[root@node2 ~]# wget -c http://pkgs.repoforge.org/axel/axel-2.4-1.el6.rf.x86_64.rpm ... [root@node2 ~]# rpm -ivh axel-2.4-1.el6.rf.x86_64.rpm warning: axel-2.4-1.el6.rf.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 6b8d79e6: NOKEY Preparing... ########################################### [100%] 1:axel ########################################### [100%] [root@node2 ~]# axel -n 2 -o /tmp ftp://192.168.30.20/upload/grub.conf Initializing download: ftp://192.168.30.20/upload/grub.conf File size: 769 bytes Opening output file /tmp/grub.conf Starting download Connection 0 finished Downloaded 769 bytes in 0 seconds. (7.46 KB/s) [root@node2 ~]# ls /tmp fstab grub.conf pear pulse-KA4qOJJfNGYU pulse-laPR3wljtejc pulse-t1pCV51k3BVL yum.log
四、補充:有關用戶認證
①nsswitch:name service switch,名稱服務解析框架
隨着NIS和DNS的出現,查找用戶信息和系統信息就不再是簡單地搜索本地,而是使用多種途徑來查找。文件/etc/nsswitch.conf(name service switch configuration,名稱服務切換配置)規定通過哪些途徑以及按照什麼順序通過這些途徑來查找特定類型的信息。還可以指定若某個方法奏效抑或失效系統將採取什麼動作。
格式:info: method `action` [method `action`...]
模塊:/lib64/libnss*,/usr/lib64/libnss*
nsswitch更多信息可參考http://book.51cto.com/art/200906/126226.htm
②pam:pluggable authentication module, 可插拔身份驗證模塊
可以讓系統管理員決定應用程序如何使用身份驗證機制來驗證用戶的身份。
PAM並不是將身份驗證代碼構建到每一個應用程序中去,而是提供共享庫,讓身份驗證代碼獨立於應用程序代碼。驗證用戶身份的技術不會隨着應用程序發生變化。PAM讓系統管理員能夠修改給定應用程序的身份驗證機制,而不需要修改應用程序。
模塊共享庫:/lib64/security/
配置文件:/etc/pam.conf,/etc/pam.d/*
/etc/pam.d目錄中的配置文件描述了每個應用程序的身份驗證過程。這些文件的名稱通常與它們所服務的應用程序的名稱相同或者類似。