# FTP SERVER
>[time=Wed, Dec 26, 2018 7:00 PM][name=張佳佑]
FTP就是用來傳輸的工具
## TCP/IP
<img src="https://i.imgur.com/9T4xnVf.png" width="450" height="390">
## 主動模式(active mode)
一開始client和server在Port:21建立連線(命令通道),因為如果一直使用Port:21會阻礙到其他client和server的連線,所以client會告訴server期望他可以在自己指定的Port(通常是20)傳送資料,這時候server就會很乖的主動去指定的Port敲門(SYN flag),然後你就要決定是否要讓server傳輸資料進來了,如果你回應可以,就會傳送ACK flag回去,這時後才算建立完連線(資料傳輸通道)。
## 被動模式(passive mode)
一開始client和server一樣在Port:21建立連線(命令通道),之後整個相反,server會告知client可以在哪些Port進行資料傳輸,一般會在大於1024的Port,然後client會發送SYN flag封包給server的Port進行確認,如果server收到了會回傳ACK flag給client,這時後才算建立完連線(資料傳輸通道)。
## 一般常用的FTP程式
==FileZilla==
## 在Ubuntu上架設FTP指令
一開始都要先將自己的ubuntu update一下
```terminal
sudo apt update
sudo apt upgrade
```
下載ftp
```
sudo apt install vsftpd
```
檢查Port:21是否開啟
```
netstat -tulpn | grep LISTEN
```
一般在這時候FTP就架好了,剩下一些設定需要微調。
```
sudo vi /etc/vsftpd.conf
```
```
listen=YES
listen_ipv6=NO
#顯示該目錄需要注意的內容
dirmessage_enable=YES
#是否使用本地時間?
use_localtime=YES
#紀錄使用者上傳與下載檔案
xferlog_enable=YES
#主動模式用Port:20
connect_from_port_20=YES
#是否允許匿名訪問,NO為不允許
anonymous_enable=NO
#是否允許本地用戶訪問,就是linux本機中存在的用戶,YES允許
local_enable=YES
#是否開啟寫入模式(上傳資料),YES為開啟
write_enable=YES
#新建文件權限,一般設置為022,那麽新建後的文件的權限就是777-022=755
local_umask=022
#設置ftp登入的位置
local_root=/home
```
```
#是否啟動userlist為白名單模式,NO的話,白名單失效,和下面一個參數配合使用
userlist_enable=YES
#是否啟動userlist為黑名單模式,NO表示黑名單失效
userlist_deny=NO
#指定哪個文件作為userlist文件,我們稍後編輯這個文件
userlist_file=/etc/vsftpd.user_list
```
```
#是否限制本地所有用戶訪問ftp根目錄以外的目錄
chroot_local_user=YES
#是否限制用戶的list為允許模式,可以用這個當白名單(黑名單),允許訪問ftp根目錄以外的目錄
chroot_list_enable=YES
#設置list文件位置
chroot_list_file=/etc/vsftpd.chroot_list
#是否開啟寫模式,開啟後可以進行創建文件夾等寫入操作
allow_writeable_chroot=YES
```
被動模式(passive mode)
```
pasv_enable=YES
pasv_min_port=10000
pasv_max_port=10100
```
更改設定檔之後都需要restart一遍
```
sudo service vsftpd restart
```
## FTP連線
### linux連linux
```
ifconfig |查詢自己IP位置
```
```
ftp IP位置 |連線指令
Name:帳號
Passwd:密碼
```
### Windows連linux
開啟Filezilla
### 補充
**反向列表**
|chroot_local_user chroot_list_enable | chroot_local_user = YES |chroot_local_user = NO|
| -------- | ------------------------| -------------------- |
| chroot_list_enable = YES| 只有列表內的名單可以向上 | 列表內的名單不可向上 |
| chroot_list_enable = NO | 所有人都不可向上(限制於自己的家目錄)| 所有人都可向上(不限於自己的家目錄) |
[第十二周滿意度調查](https://goo.gl/forms/m828XgNYOIMIefBd2)
CMRDB wifi:cmrdb_base@304