# FTP服務器的安裝與配置(CentOS 6.5)
[TOC]
## vsftpd說明
LINUX下實現FTP服務的軟件很多,最常見的有vsftpd,Wu-ftpd和Proftp等.Red Hat Enterprise Linux中默認安裝的是vsftpd。
訪問FTP服務器時需要經過驗證,只有經過了FTP服務器的相關驗證,用戶才能訪問和傳輸文件.vsftpd提供了3種ftp登錄形式:
>
**(1) anonymous(匿名帳號)**
使用anonymous是應用廣泛的一種FTP服務器.如果用戶在FTP服務器上沒有帳號,那么用戶可以以anonymous為用戶名,以自己的電子郵件地址為密碼進行登錄.當匿名用戶登錄FTP服務器后,其登錄目錄為匿名FTP服務器的根目錄/var/ftp.為了減輕FTP服務器的負載,一般情況下,**應關閉匿名帳號的上傳功能。**
**(2) real(真實帳號)**
real也稱為本地帳號,就是以真實的用戶名和密碼進行登錄,但前提條件是用戶在FTP服務器上擁有自己的帳號。用真實帳號登錄后,其登錄的目錄為用戶自己的目錄,該目錄在系統建立帳號時系統就自動創建。
**(3) guest(虛擬帳號)**
如果用戶在FTP服務器上擁有帳號,但此帳號只能用于文件傳輸服務,那么該帳號就是guest。guest是真實帳號的一種形式,它們的不同之處在于,geust登錄FTP服務器后,不能訪問除宿主目錄以外的內容。**(可以做用戶行為的權限控制,工作中這種需求比較常用)**
## 安裝ftp服務端vsftpd
`yum install vsftpd -y`
## 安裝ftp客戶端
`yum install ftp -y`
## FTP服務器相關配置文件說明
### `/etc/vsftpd/vsftpd.conf` 配置
>[success]
**`anonymous_enable=YES`** # 是否允許anonymous登錄FTP服務器,默認是允許的
**`local_enable=YES`** # 是否允許本地用戶登錄FTP服務器,默認是允許
**`write_enable=YES`** # 是否允許用戶具有在FTP服務器文件中執行寫的權限,默認是允許
`local_umask=022` # 設置本地用戶的文件生成掩碼為022,默認是077
# `anon_mkdir_write_enable=YES` # 是否允許匿名賬戶在FTP服務器中創建目錄
`dirmessage_enable=YES` # 激活目錄信息,當遠程用戶更改目錄時,將出現提示信息
`xferlog_enable=YES` # 啟用上傳和下載日志功能
`connect_from_port_20=YES` # 啟用FTP數據端口的連接請求
# `xferlog_file=/var/log/vsftpd.log` # 設置日志文件的文件名和存儲路徑,這是默認的
`xferlog_std_format=YES` # 是否使用標準的ftpd xferlog日志文件格式
# `idle_session_timeout=600` # 設置空閑的用戶會話中斷時間,默認是10分鐘
# `data_connection_timeout=120` # 設置數據連接超時時間,默認是120秒
# `ascii_download_enable=YES` # 是否允許使用ASCII格式來上傳和下載文件
# **`chroot_list_enable=YES`** # 如果希望用戶登錄后不能切換到自己目錄以外的其它目錄,需要設置該項,如果設置`chroot_list_enable=YES`,那么只允許`/etc/vsftpd.chroot_list`中列出的用戶具有該功能.如果希望所有的本地用戶都執行者chroot,可以增加一行:`chroot_local_user=YES`
`listen=YES` # 使vsftpd 處于獨立啟動模式
`pam_service_name=vsftpd` # 設置PAM認證服務的配置文件名稱,該文件存放在`/etc/pam.d/`目錄下
**`userlist_enable=YES`** # 用戶列表中的用戶是否允許登錄FTP服務器,默認是不允許
`tcp_wrappers=YES` # 使用tcp_wrqppers作為主機訪問控制方式
### `/etc/vsftpd/ftpusers` 說明
>[info] **說明:**這個文件是用來記錄"不允許"登錄到FTP服務器的用戶,通常是一些系統默認的用戶。默認情況下,root和它以下的用戶是不允許登錄FTP服務器的.可以將不允許登錄的用戶添加到這里來.但切記每個用戶都要單獨占用一行.
內容如下:
~~~
# Users that are not allowed to login via ftp
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody
~~~
### `/etc/vsftpd/user_list` 說明
它可以實現與ftpusers文件相同的功能。FTP服務器啟動的時首先會檢測vsftpd.conf文件,如果檢測到該文件中存在如下語句:`userlist_deny=YES`
則user_list文件中存在的用戶不允許登錄FTP服務器,YES為該句的默認選項: `userlist_deny=NO`
則只允許該文件中的用戶登錄FTP服務器,其他用戶無法登錄FTP服務器。該文件與ftpusers的格式相同。如要添加用戶則每個用戶名要獨占一行
* * * * *
## 相關實例
### 限制用戶`test`只能訪問`/var/www/html/test`,不能訪問其他路徑,且限定用戶`test`不能Telnet、Shell
#### 方法一 真實賬號
1. 新增系統用戶`test`并設置密碼;
2. 將`/etc/vsftpd/vsftpd.conf`中的`chroot_list_enable=YES`和`chroot_list_file=/etc/vsftpd/chroot_list`配置打開;
3. 將`test`用戶加入禁用列表`/etc/vsftpd/chroot_list`中;
4. 重啟vsftpd服務器;
5. 登錄ftp服務器查看效果。
操作過程如下:
~~~
useradd -s /sbin/nologin -d /var/www/html/test test && echo 'aaaaaa' |passwd --stdin test
sed -i 's/#chroot_list/chroot_list/g' /etc/vsftpd/vsftpd.conf
egrep -i 'chroot_list' /etc/vsftpd/vsftpd.conf
echo test >> /etc/vsftpd/chroot_list
service vsftpd restart
~~~
#### [方法二 虛擬賬號](http://blog.chinaunix.net/uid-20329764-id-1965724.html)
1. 建立虛擬用戶口令庫文件
2. 生成vsftpd的認證文件
3. 建立虛擬用戶所需的PAM配置文件
4. 建立虛擬用戶及要訪問的目錄并設置相應的權限。
5. 設置vsftpd.cong主配置文件。
6. 設置test用戶的配置文件
7. 重新啟動vsftpd服務,使所有配置文件的設置生效
##### 建立虛擬用戶口令庫文件
~~~
cat >>/etc/vsftpd/vsftpd_login.txt<<EOF
test
aaaaaa
EOF
cat /etc/vsftpd/vsftpd_login.txt
~~~
>[info] vsftpd_login.txt文件內容 輸入奇數為賬號,偶數為其密碼
##### 生成vsftpd的認證文件
~~~
db_load -T -t hash -f /etc/vsftpd/vsftpd_login.txt /etc/vsftpd/vsftpd_login.db
chmod 600 /etc/vsftpd/vsftpd_login.txt
chmod 600 /etc/vsftpd/vsftpd_login.db
~~~
##### 建立虛擬用戶所需的PAM配置文件
~~~
sed -i 's/^/# /g' /etc/pam.d/vsftpd
cat >>/etc/pam.d/vsftpd <<EOF
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/users_config
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/users_config
EOF
tail /etc/pam.d/vsftpd
~~~
##### 建立虛擬用戶及要訪問的目錄并設置相應的權限
~~~
useradd -s /sbin/nologin -d /var/www/html/test test
tail -1 /etc/passwd
~~~
##### 設置vsftpd.conf主配置文件
~~~
cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak
vim /etc/vsftpd/vsftpd.conf
# 替換或寫入如下內容
anonymous_enable=NO
local_enable=YES
chroot_local_user=YES
pam_service_name=vsftpd
user_config_dir=/etc/vsftpd/users_config
max_clients=100
max_per_ip=3
local_max_rate=300000
anon_max_rate=100000
~~~
>[info] **釋義:**
anonymous_enable=NO # 禁用匿名用戶登錄
local_enable=YES # 啟用本地用戶登錄(本質上是為了能夠讓虛擬用戶登錄)
chroot_local_user=YES # 將所有本地用戶限制在自己的目錄中
pam_service_name=vsftpd # 配置vsftpd使用的PAM模塊為vsftpd
user_config_dir=/etc/vsftpd/users_config # 設置虛擬賬戶配置文件的主目錄為 /users_config(后面創建)
max_clients=100 # 設置FTP服務器最大接入客戶端數為100個
max_per_ip=3 # 設置每個IP地址最大連接數為3個
local_max_rate=300000 # FTP服務器的本地用戶最大傳輸速率設置為300KB/s
anon_max_rate=100000 # FTP服務器匿名用戶最大傳輸速率設置為100KB/s
##### 設置用戶test的配置文件
~~~
mkdir /etc/vsftpd/users_config
cat >>/etc/vsftpd/users_config/test<<EOF
guest_enable=YES
guest_username=test
anon_world_readable_only=NO
anon_other_write_enable=YES
anon_mkdir_write_enable=YES
anon_upload_enable=YES
anon_max_rate=300000
EOF
cat /etc/vsftpd/users_config/test
~~~
>[info] **釋義:**
guest_enable=YES 開啟虛擬賬戶登錄
guest_username=test 設置test對應的系統賬戶為test
anon_world_readable_only=NO 允許用戶瀏覽FTP目錄和下載文件
anon_other_write_enable=YES 允許用戶進行文件改名和刪除文件的權限
anon_mkdir_write_enable=YES 表示用戶具有建立和刪除目錄的權利
anon_upload_enable=YES 表示用戶可以上傳文件
anon_max_rate=300000 限制傳輸速度為300KB/s
##### 重新啟動vsftpd服務,使所有配置文件的設置生效
`service vsftpd restart`
## 如何以root用戶登陸ftp服務器
為了安全vsftpd服務器默認不允許root用戶使用ftp服務,但是我們有時又想通過root訪問我們剛剛假設好的ftp服務器。具體設置如下:
> 修改vsftpd禁止訪問的用戶列表 `/etc/vsftpdftpusers`文件將root用戶注釋掉保存退出,重啟訪問即可。
- Linux的安裝
- Linux的軟件安裝管理
- Linux零碎的命令
- 了解ssh
- 系統調優及安全設置
- Linux系統中的硬鏈接和軟連接
- Linux文件和目錄的屬性及權限
- 命令總結
- 文件目錄管理命令
- cat
- cd
- cp
- ls
- mkdir
- mv
- rm
- touch
- vi
- 硬件檢測內核shell命令
- echo
- alias
- dd
- diff
- date
- grep(重要)
- head
- rpm
- sed(重要)
- tree
- unalias
- yum
- seq
- su
- less
- more
- tail
- awk(重要)
- pwd
- history
- whoami
- find(重要)
- which
- vimdiff
- sudo
- wget
- ln
- chmod
- chown
- vim常用技巧
- scp
- 工作場景應用總結
- 自動刪除n天前日志
- 刪除一個目錄下的所有文件但保留一個文件
- Linux軟件安裝
- php安裝(apache版本)
- vsftpd安裝
- git安裝
- python安裝
- LNMP安裝
- LAMP安裝I
- LAMP安裝II
- svn安裝
- svn在Linux下的命令操作
- svn鉤子簡介
- svn代碼上傳流程
- Crond介紹
- sersync應用指南
- 其他
- 小結一
- 系統調優重新整理tmp
- linux禁止root用戶直接登錄sshd并修改默認端口