vsftpd的安裝配置及lftp命令的使用

  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、vsftpdServU

  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目錄中的配置文件描述了每個應用程序的身份驗證過程。這些文件的名稱通常與它們所服務的應用程序的名稱相同或者類似。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章