天天看點

CentOS 6.3 FTP 安裝vsftp 虛拟使用者設定全解

一、準備安裝

二、安裝:

1.安裝Vsftpd服務相關部件:

[root@server ~]# rpm -qa |grep vsftp

[root@server ~]# yum install vsftpd* -y

2.确認安裝PAM服務相關部件:

[root@server ~]# rpm -qa |grep pam

[root@server ~]# yum install pam*  

開發包,其實不裝也沒有關系,主要的目的是确認PAM。

3.安裝DB4部件包:

這裡要特别安裝一個db4的包,用來支援檔案資料庫。

[root@server ~]# rpm -qa |grep db4

[root@server ~]# yum install db4*

確定DB4工具包安裝:db4-utils-4.7.25-17.el6.i686

4.安裝http軟體包:

[root@server ~]# yum install httpd*  

三、系統帳戶

1.建立系統帳戶:

[root@server ~]# useradd ftp01

[root@server ~]# passwd ftp01

更改使用者 ftp01 的密碼。

新的密碼:

無效的密碼:它沒有包含足夠的不同字元

無效的密碼:是回文

重新輸入新的密碼:

passwd:所有的身份驗證令牌已經成功更新。

2.建立Vsftpd服務的宿主使用者:

[root@server ~]#useradd vsftpd -s/sbin/nologin

預設的Vsftpd的服務宿主使用者是root,但是這不符合安全性的需要。這裡建立名字為vsftpd的使用者,用他來作為支援Vsftpd的服務宿主使用者。由于該使用者僅用來支援Vsftpd服務用,是以沒有許可他登陸系統的必要,并設定他為不能登陸系統的使用者。

3.建立Vsftpd虛拟宿主使用者:

[root@server ~]#useradd virtusers -s/sbin/nologin

本篇主要是介紹Vsftp的虛拟使用者,虛拟使用者并不是系統使用者,也就是說這些FTP的使用者在系統中是不存在的。他們的總體權限其實是集中寄托在一個在系統中的某一個使用者身上的,所謂Vsftpd的虛拟宿主使用者,就是這樣一個支援着所有虛拟使用者的宿主使用者。由于他支撐了FTP的所有虛拟的使用者,那麼他本身的權限将會影響着這些虛拟的使用者,是以,處于安全性的考慮,也要非分注意對該使用者的權限的控制,該使用者也絕對沒有登陸系統的必要,這裡也設定他為不能登陸系統的使用者。

四、調整Vsftpd的配置檔案

1.編輯配置檔案前先備份

[root@server ~]#cp /etc/vsftpd/vsftpd.conf/etc/vsftpd/vsftpd.confbak

編輯主配置檔案vsftpd.conf

[root@server ~]#vim /etc/vsftpd/vsftpd.conf

這裡我将原配置檔案的修改完全記錄,凡是修改的地方我都會保留注釋原來的配置。其中加入我對每條配置項的認識,對于一些比較關鍵的配置項這裡我做了我的觀點,并且原本英語的說明我也不删除,供參考對比用。

------------------------------------------------------------------------------

#anonymous_enable=YES

anonymous_enable=NO    //設定不允許匿名通路

#

# Uncomment this to allow local users tolog in.

local_enable=YES        //設定本地使用者可以通路。注意:主要是為虛拟宿主使用者,www.linuxidc.com如果該項目設定為NO那麼所有虛拟使用者将無法通路。

# Uncomment this to enable any form of FTPwrite command.

write_enable=YES       //設定可以進行寫操作。

# Default umask for local users is 077. Youmay wish to change this to 022,

# if your users expect that (022 is used bymost other ftpd's)

local_umask=022       //設定上傳後檔案的權限掩碼。

#anon_upload_enable=YES

anon_upload_enable=NO        //禁止匿名使用者上傳。

# Uncomment this if you want the anonymousFTP user to be able to create

# new directories.

#anon_mkdir_write_enable=YES

anon_mkdir_write_enable=NO    //禁止匿名使用者建立目錄。

# Activate directory messages - messagesgiven to remote users when they

# go into a certain directory.

dirmessage_enable=YES         //設定開啟目錄智語功能。

# Activate logging of uploads/downloads.

xferlog_enable=YES            //設定開啟日志記錄功能。

# Make sure PORT transfer connectionsoriginate from port 20 (ftp-data).

connect_from_port_20=YES      //設定端口20進行資料連接配接。

# If you want, you can arrange for uploadedanonymous files to be owned by

# a different user. Note! Using"root" for uploaded files is not

# recommended!

#chown_uploads=YES

chown_uploads=NO           //設定禁止上傳檔案更改宿主。

#chown_username=whoever

chroot_local_user=YES        //設定登陸後.隻可以通路自己的屬主目錄.不可通路上一層目錄檔案

# You may override where the log file goesif you like. The default is shown

# below.

xferlog_file=/var/log/vsftpd.log      //設定Vsftpd的服務日志儲存路徑。注意,該檔案預設不存在。必須要手動touch出來,并且由于這裡更改了Vsftpd的服務宿主使用者為手動建立的Vsftpd。必須注意給與該使用者對日志的寫入權限,否則服務将啟動失敗。

# If you want, you can have your log filein standard ftpd xferlog format

xferlog_std_format=YES          //設定日志使用标準的記錄格式。

# You may change the default value fortiming out an idle session.

#idle_session_timeout=600      //設定空閑連接配接逾時時間,這裡使用預設。将具體數值留給每個具體使用者具體指定,當然如果不指定的話,還是使用這裡的預設值600,機關秒。

# You may change the default value fortiming out a data connection.

#data_connection_timeout=120      //設定單次最大連續傳輸時間,這裡使用預設。将具體數值留給每個具體使用者具體指定,當然如果不指定的話,還是使用這裡的預設值120,機關秒。

#nopriv_user=ftpsecure

nopriv_user=vsftpd       //設定支撐Vsftpd服務的宿主使用者為手動建立的Vsftpd使用者。注意,一旦做出更改宿主使用者後,必須注意一起與該服務相關的讀寫檔案的讀寫賦權問題。比如日志檔案就必須給與該使用者寫入權限等。

async_abor_enable=YES     //設定支援異步傳輸功能。

# ASCII mangling is a horrible feature ofthe protocol.

ascii_upload_enable=YES         //設定支援ASCII模式的上傳功能。

ascii_download_enable=YES      //設定支援ASCII模式的下載下傳功能。

# You may fully customise the login bannerstring:

ftpd_banner=Welcome to blah FTP service^_^    //設定Vsftpd的登陸智語。

# You may specify a file of disallowedanonymous e-mail addresses. Apparently

# useful for combatting certain DoSattacks.

#deny_email_enable=YES

# (default follows)

#banned_email_file=/etc/vsftpd/banned_emails

# You may specify an explicit list of localusers to chroot() to their home

# directory. If chroot_local_user is YES,then this list becomes a list of

# users to NOT chroot().

#chroot_list_enable=YES

chroot_list_enable=NO     //禁止使用者登出自己的FTP主目錄。

#chroot_list_file=/etc/vsftpd/chroot_list

ls_recurse_enable=NO       //禁止使用者登陸FTP後使用"ls-R"的指令。該指令會對伺服器性能造成巨大開銷。如果該項被允許,那麼擋多使用者同時使用該指令時将會對該伺服器造成威脅。

# When "listen" directive isenabled, vsftpd runs in standalone mode and

# listens on IPv4 sockets. This directivecannot be used in conjunction

# with the listen_ipv6 directive.

listen=YES    //設定該Vsftpd服務工作在StandAlone模式下。順便展開說明一下,所謂StandAlone模式就是該服務擁有自己的守護程序支援,在ps -A指令下我們将可用看到vsftpd的守護程序名。如果不想工作在StandAlone模式下,則可以選擇SuperDaemon模式,在該模式下vsftpd将沒有自己的守護程序,而是由超級守護程序Xinetd全權代理,與此同時,Vsftp服務的許多功能将得不到實作。

# This directive enables listening on IPv6sockets. To listen on IPv4 and IPv6

# sockets, you must run two copies ofvsftpd whith two configuration files.

# Make sure, that one of the listen optionsis commented !!

#listen_ipv6=YES

pam_service_name=vsftpd     //設定PAM服務下Vsftpd的驗證配置檔案名。是以,PAM驗證将參考/etc/pam.d/下的vsftpd檔案配置。

userlist_enable=YES           //設定userlist_file中的使用者将不得使用FTP。

tcp_wrappers=YES        //設定支援TCP Wrappers。#KC: Thefollowing entries are added for supporting virtual ftp users.

注意:

以下這些是關于Vsftpd虛拟使用者支援的重要配置項目。預設Vsftpd.conf中不包含這些設定項目,需要自己手動添加配置。

guest_enable=YES            //設定啟用虛拟使用者功能。

guest_username=virtusers     //指定虛拟使用者的宿主使用者。

virtual_use_local_privs=YES    //設定虛拟使用者的權限符合他們的宿主使用者。

user_config_dir=/etc/vsftpd/vconf   //設定虛拟使用者個人Vsftp的配置檔案存放路徑。也就是說,這個被指定的目錄裡,将存放每個Vsftp虛拟使用者個性的配置檔案,一個需要注意的地方就是這些配置檔案名必須和虛拟使用者名相同。儲存退出。

:wq

[root@server ~]# service vsftpdstart/restart/sotp  // Vsftp啟動/重新啟動/停止

[root@server ~]# chkconfig vsftpd on    //設定FTP為開機自動啟動

[root@server ~]# service httpd restart

[root@server ~]# chkconfig httpd on

[root@server ~]# chkconfig iptablesoff   //關閉防火牆

[root@server ~]# vim/etc/selinux/config  //關閉SELinux

# This file controls the state of SELinuxon the system.

# SELINUX= can take one of these threevalues:

#    enforcing - SELinux security policy is enforced.

#    permissive - SELinux prints warnings instead of enforcing.

#    disabled - No SELinux policy is loaded.

SELINUX=disabled   //修改

# SELINUXTYPE= can take one of these twovalues:

#    targeted - Targeted processes are protected,

#    mls - Multi Level Security protection.

SELINUXTYPE=targeted

:wq   //儲存

[root@server ~]# netstat -anp|grep :21

tcp       0      0 0.0.0.0:21        0.0.0.0:*           LISTEN      1446/vsftpd  

[root@server ~]# reboot     //重新開機後生效

3.建立Vsftpd的日志檔案,并更該屬主為Vsftpd的服務宿主使用者:

[root@server ~]# touch /var/log/vsftpd.log

[root@server ~]# chown vsftpd.vsftpd/var/log/vsftpd.log

-rw-------. 1 vsftpd vsftpd      0 9月  10 16:39 vsftpd.log

4.建立虛拟使用者配置檔案存放路徑:

[root@server ~]# mkdir /etc/vsftpd/vconf/

drwxr-xr-x 2 root root 4096 9月  10 16:59 vconf

五、制作虛拟使用者資料庫檔案

1.先建立虛拟使用者名單檔案:

[root@server ~]# cd /etc/vsftpd/

[root@server vsftpd]# touch virtusers

建立了一個虛拟使用者名單檔案,這個檔案就是來記錄vsftpd虛拟使用者的使用者名和密碼的資料檔案,

這裡給它命名為virtusers。為了避免檔案的混亂,我把這個名單檔案就放置在/etc/vsftpd/下。

2.編輯虛拟使用者名單檔案:

[root@server vsftpd]# vim virtusers

----------------------------

ftp001    使用者名

123456    密碼

ftp002    使用者名

ftp003    使用者名

編輯這個虛拟使用者名單檔案,在其中加入使用者的使用者名和密碼資訊。格式很簡單:“一行使用者名,一行密碼”。

3.生成虛拟使用者資料檔案:

[root@server vsftpd]#db_load -T -t hash -f/etc/vsftpd/virtusers /etc/vsftpd/virtusers.db

[root@server vsftpd]# chmod 600virtusers.db //設定認證檔案的權限為root可讀可寫

這裡我順便把這個指令簡單說明一下:

----------------------------------------------------------------------

4.察看生成的虛拟使用者資料檔案

[root@server ~]# ll/etc/vsftpd/vsftpd_login.db

-rw------- 1 root root 12288 9月  10 17:15 virtusers.db

需要特别注意的是,以後再要添加虛拟使用者的時候,隻需要按照“一行使用者名,一行密碼”的格式将新使用者名和密碼添加進虛拟使用者名單檔案。但是光這樣做還不夠,不會生效的哦!還要再執行一遍“ db_load -T -t hash -f 虛拟使用者名單檔案虛拟使用者資料庫檔案.db ”的指令使其生效才可以!

六、設定PAM驗證檔案,并指定虛拟使用者資料庫檔案進行讀取

1.察看原來的vsftp的PAM驗證配置檔案:

[root@server ~]# vim /etc/pam.d/vsftpd   (pam檔案)

----------------------------------------------------------------

#%PAM-1.0

session   optional     pam_keyinit.so    force revoke

auth      required     pam_listfile.soitem=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

2.在編輯前做好備份:

[root@server ~]# cp /etc/pam.d/vsftpd/etc/pam.d/vsftpd.backup

3.編輯Vsftpd的PAM驗證配置檔案

[root@server ~]# vim /etc/pam.d/vsftpd

auth   required     /lib/security/pam_userdb.so    db=/etc/vsftpd/virtusers

account required      /lib/security/pam_userdb.so     db=/etc/vsftpd/virtusers

以上兩條是手動添加的,上面的全部加#注釋了.内容是對虛拟使用者的安全和帳戶權限進行驗證。

!!!!!!!這裡有個要注意說明的:如果系統是64位系統在這裡的所有lib後面要加入64!!!!!!

!!!!!!!如下這樣才可以:

auth   required     /lib64/security/pam_userdb.so    db=/etc/vsftpd/virtusers

account required      /lib64/security/pam_userdb.so     db=/etc/vsftpd/virtusers

七、虛拟使用者的配置

1.規劃好虛拟使用者的主路徑:

[root@server ~]# mkdir /opt/vsftp/

總用量 4

drwxr-xr-x 2 root root 4096 9月  10 17:26 vsftp

2.建立測試使用者的FTP使用者目錄:

[root@server ~]#mkdir /opt/vsftp/ftp001/opt/vsftp/ftp002 /opt/vsftp/ftp003 /opt/vsftp/virtuser

總用量 16

drwxr-xr-x 2 root root 4096 9月  10 17:26 ftp001

drwxr-xr-x 2 root root 4096 9月  10 17:26 ftp002

drwxr-xr-x 2 root root 4096 9月  10 17:26 ftp003

drwxr-xr-x 2 root root 4096 9月  10 17:26 virtuser

3.建立虛拟使用者配置檔案模版:

[root@server ~]# cp/etc/vsftpd/vsftpd.conf.bak /etc/vsftpd/vconf/vconf.tmp

4.定制虛拟使用者模版配置檔案:

[root@server ~]# vim/etc/vsftpd/vconf/vconf.tmp

--------------------------------

local_root=/opt/vsftp/virtuser

virtuser                   //這個就是以後要指定虛拟的具體主路徑。

anonymous_enable=NO      //設定不允許匿名使用者通路。

write_enable=YES           //設定允許寫操作。

local_umask=022            //設定上傳檔案權限掩碼。

anon_upload_enable=NO     //設定不允許匿名使用者上傳。

anon_mkdir_write_enable=NO    //設定不允許匿名使用者建立目錄。

idle_session_timeout=600        //(根據使用者要求.可選)設定空閑連接配接逾時時間。

data_connection_timeout=120    //設定單次連續傳輸最大時間。

max_clients=10     //(根據使用者要求.可選)設定并發用戶端通路個數。

max_per_ip=5     //(根據使用者要求.可選)設定單個用戶端的最大線程數,這個配置主要來照顧Flashget、迅雷等多線程下載下傳軟體。

local_max_rate=50000   //(根據使用者要求.可選)設定該使用者的最大傳輸速率,機關b/s。

pam_service_name=vsftpd

chroot_local_user=YES

:wq   //儲存

這裡将原vsftpd.conf配置檔案經過簡化後儲存作為虛拟使用者配置檔案的模版。這裡将并不需要指定太多的配置内容,主要的架構和限制交由Vsftpd的主配置檔案vsftpd.conf來定義,即虛拟使用者配置檔案當中沒有提到的配置項目将參考主配置檔案中的設定。而在這裡作為虛拟使用者的配置檔案模版隻需要留一些和使用者流量控制,通路方式控制的配置項目就可以了。這裡的關鍵項是local_root這個配置,用來指定這個虛拟使用者的FTP主路徑。

典型的配置項為參考:

anon_world_readable_only=NO           //可以浏覽目錄和下載下傳

anon_upload_enable=YES                   //可以上傳檔案

anon_mkdir_write_enable=YES           //可以建立和删除目錄

anon_other_write_enable=YES            //可以改名和删除檔案

[root@server vsftpd]# service vsftpd restart

關閉 vsftpd:                                              [确定]

為 vsftpd 啟動 vsftpd:                                    [确定]

5.更改虛拟使用者的主目錄的屬主為虛拟宿主使用者:

[root@server ~]# chown -Rvirtusers.virtusers /opt/vsftp/

drwxr-xr-x 6 virtusers virtusers 4096 9月  13 15:53 vsftp

6.檢查權限:

[root@server ~]# ll /opt/vsftp/

總用量 12

drwxr-xr-x 2 virtusers virtusers 4096 9月  10 17:49 ftp001

drwxr-xr-x 2 virtusers virtusers 4096 9月  10 17:49 ftp002

drwxr-xr-x 2 virtusers virtusers 4096 9月  10 17:49 ftp003

drwxr-xr-x 2 virtusers virtusers 4096 9月  10 17:49 virtuser

八、給測試使用者定制(這裡隻舉例說明:ftp001)

1.建立虛拟使用者模版配置檔案:

[root@server ~]# touch/etc/vsftpd/vconf/ftp001

2.針對具體使用者進行定制:

[root@server ~]# vim/etc/vsftpd/vconf/ftp001

添加下面内容:

---------------------------------

local_root=/opt/vsftp/ftp001            // (FTP使用者ftp001 的登陸目錄檔案)

anonymous_enable=NO

write_enable=YES

local_umask=022

anon_upload_enable=NO

anon_mkdir_write_enable=NO

idle_session_timeout=300

data_connection_timeout=90

max_clients=1

max_per_ip=1

local_max_rate=25000

啟動服務

[root@server ~]# service vsftpdrestart    

為 vsftpd 啟動 vsftpd:                                    [确定]

九、測試:

1.在虛拟使用者目錄中預先放入檔案:

[root@server ~]# touch/opt/vsftp/ftp001/test.txt

2.從其他機器作為用戶端登陸FTP:

可以IE或FTP用戶端軟直接通路:

IE裡輸入 ftp://127.0.0.1 (伺服器IP) ,彈出對話框後.輸入FTP使用者名和密碼;

CentOS用戶端連接配接vsftp測試

檢視系統是否安裝vsftp軟體包:

[root@client ~]# rpm -qa |grep ftp

ftp-0.17-51.1.el6.i686

安裝軟體包

[root@client ~]# yum install ftp -y

[root@client ~]# ftp 10.1.4.44  

Connected to 10.1.4.44 (10.1.4.44).

220 Welcome to blah FTP service.

Name (10.1.4.44:root): 使用者名

331 Please specify the password.

Password:

230 Login successful.

Remote system type is UNIX.

Using binary mode to transfer files.

ftp>

CentOS用戶端連接配接成功!

----------------------------------

原因:虛拟使用者再豐富,其實也是基于它們的宿主使用者virtusers的,如果virtusers這個虛拟使用者的宿主被限制住了,那麼虛拟使用者也将受到限制。

Linux ftp上傳下載下傳

1.下載下傳檔案通常用get和mget這兩條指令。

a) get

格式:get [remote-file] [local-file]

将檔案從遠端主機中傳送至本地主機中.

如要擷取伺服器上c:\a\1.jpg,則

ftp> get /a/1.jpg 1.jpg (回車)

b) mget

格式:mget [remote-files]

從遠端主機接收一批檔案至本地主機.

如要擷取伺服器上E:\a\下的所有檔案,則

ftp> cd /a

ftp> mget *.* (回車)

ftp下輸入prompt指令 ,批量擷取則不在一一提示。

注意:檔案都下載下傳到了linux主機的目前目錄下。比如,在/root/web下運作的ftp指令,則檔案都下載下傳到了/root/web下。

2.上傳檔案

a) put

格式:put local-file [remote-file]

将本地一個檔案傳送至遠端主機中.

如要把本地的1.jpg傳送到遠端主機c:\a,并改名為2.gif

ftp> put 1.jpg /a/2.gif (回車)

b) mput

格式:mput local-files

将本地主機中一批檔案傳送至遠端主機.

如要把本地目前目錄下所有bmp檔案上傳到伺服器c:\a 下

ftp> cd /a (回車)

ftp> mput *.jpg(回車)

注意:上傳檔案都來自于主機的目前目錄下。比如,在/root/web下運作的ftp指令,則隻有在/root/web下的檔案linux才會上傳到伺服器c:\a 下。

FQA:

關閉 vsftpd:                                              [失敗]

為 vsftpd 啟動 vsftpd:500 OOPS: bad bool value in config file for: guest_enable

                                                         [失敗]

問題描述:

vim /etc/vsftpd/vsftpd.conf 時,每行的值都不要有空格,否則啟動時會出現錯誤,舉個例子,假如我在guest_enable=YES後多了個空格,那我啟動時就出現錯誤;

guest_enable=YES

guest_username=virtua1

virtual_use_local_privs=YES

user_config_dir=/etc/vsftpd/vconf

解決方法:

在vim /etc/vsftpd/vsftpd.conf 時,每行的值後面都不要有空格.

補充:

1.要檢視伺服器自帶的防火牆有無擋住FTP21端口導緻不能通路

2.檢視 SELinux 禁用沒有.要禁用

3.500 OOPS:錯誤有可能是你的vsftpd.con配置檔案中有不能被實别的指令,還有一種可能是指令的YES 或 NO 後面有空格。

4.要仔細檢視各個用到的檔案夾權限,及使用者屬主權限等

1 如何新加FTP使用者

打開密碼檔案裡加入(一行是使用者.一是密碼.依次類推)

#vi /etc/vsftpd/virtusers

加入使用者後儲存退出

#db_load -T -t hash -f/etc/vsftpd/virtusers /etc/vsftpd/virtusers.db  (然後生成新的虛拟用資料檔案)

#cp /etc/vsftpd/vconf/vconf.tmp d          (建立d使用者,用虛拟使用者模闆vconf.tmp檔案生成d虛拟使用者檔案)

#vi /etc/vsftpd/vconf/d                    (打開D虛拟使用者檔案.在第一行最後加入該使用者對應的FTP目錄)

#mkdir /opt/vsftp/WWW                      (建立WWW目錄為d FTP使用者登陸目錄)

#service vsftpd restart

-------------------------------------------------------

2 如何修改FTP 使用者登陸密碼

打開密碼檔案裡加入(第一行是使用者.第二是密碼.依次類推,隻要改對應使用者下面的密碼即可)

#vi /etc/vsftpd/virtusers