SmbFTPD
SmbFTPD 使用手冊
第三章 smbftpd.conf
內容列表
系統區段
選項名稱: ServerName
語法:
ServerName "Server Name"
說明:
這個選項可以用來定義您的伺服器名稱,當使用者登入後將看到:
Connected to localhost.com.
220 Server Name FTP server (SmbFTPD Ver
0.9) ready.
Name (localhost:alex):
如果您沒有設定 ServerName,則 SmbFTPD 將顯示系統的 Hostname。
預設值:
無 (系統的 Hostname)
選項名稱: ShowProgramVersion
語法:
ShowProgramVersion Yes|No
說明:
這個選項可以用來設定是否要顯示 SmbFTPD 的版本資訊,則設為 No,則不會顯示。
Connected to localhost.com.
220 Server Name FTP server (SmbFTPD Ver 2.0) ready.
Name (localhost:alex):
如果您沒有設定 ShowProgramVersion,則 SmbFTPD 預設將顯示版本資訊。
預設值:
ShowProgramVersion Yes
選項名稱: ListenOnAddress
語法:
ListenOnAddress 192.168.0.1
說明:
當使用 -D 模式 (standalone) 啟動 FTP 時,您可以指定只接受連到這個位址的連線。例如,假設您有二張網路卡,一個 IP 是
172.16.1.1,另一個是 61.62.63.64,您可以設定 ListenOnAddress 172.16.1.1 以表示只接受連到這個 IP
的連線。
如果您要接受所有連線,則請移除這個選項。
預設值:
無 (接受所有連線)
選項名稱: Port
語法:
Port prot_num|service
說明:
當使用 -D 模式 (standalone) 啟動 FTP 時,您可以指定 SmbFTPD 所要使用的 Port。一般的 FTP port 為
21,您也可以使用 ftp 這個字串表示,系統會自動去 /etc/service 中查到相對的 port。
預設值:
Port ftp
選項名稱: Umask
語法:
Umask umask
說明:
當使用者建立檔案或目錄時,所要使用的 umask。例如,您想要讓使用者新增檔案時的權限為 644,則設 umask 為 022。詳細關於
umask 的設定請 man 2 umask。這個選項的值必須為 8 進位的數字,如 022、027 等。
預設值:
Umask 022
選項名稱: PidFile
語法:
PidFile /some/where/file
說明:
這是您要存放 smbftpd pid 檔的地方,當使用 daemon 模式時,我們會將 smbftpd 的 process id 寫到這個檔案中。
預設值:
無 (不寫 pid)
選項名稱: DebugMode
語法:
DebugMode Yes|No
說明:
是否要用 syslog 記錄更多除錯用的訊息。
預設值:
DebugMode No
選項名稱: LogCommand
語法:
LogCommand Yes|No
說明:
是否要使用 syslog 的 LOG_FTP 記錄使用者執行過的 FTP 指令。如果您將這個指令設為 Yes, 則使用者所執行的
retrieve(get)、store(put)、append、delete、mkdir、rmdir、rename
等都會被選錄下來,並用記錄該指令的檔名參數。在 FreeBSD 中,syslogd 會將這些記錄在 /var/log/xferlog 中。
預設值:
LogCommand No
選項名稱: DoWtmpLog
語法:
DoWtmpLog Yes|No
說明:
是否要將 ftp 使用者登入記錄寫在 /var/log/wtmp 中。
預設值:
DoWtmpLog No
選項名稱: DisableEPSV
語法:
DisableEPSV Yes|No
說明:
是否要停用 EPSV 這個指令。如果您的伺服器位於一些舊的防火牆後面,而一直無法連線,您可以設著停用 EPSV。
預設值:
DisableEPSV No
選項名稱: RestrictedPorts
語法:
RestrictedPorts Yes|No
說明:
檔這個選項設為 No 時,smbftpd 將不檢查限制使用者使用的連結埠。我們預設限制使用者在使用 PORT 命令時,只能使用
unprivileged ports (> 1024),不過這樣將違反 FTP protocol。
預設值:
RestrictedPorts Yes
選項名稱: PassiveModePortRange
語法:
PassiveModePortRange low-high
說明:
您可以設定 SmbFTPD 在 Passive Mode 下所要使用的連接埠範圍。如果您的 FTP 伺服器位於 NAT 後,您可以在 router
上設定將這裡所設定的連接埠範圍也轉到內部來。
假設您要使用 Port 40000 到 Port 50000,您可以設定:
PassiveModePortRange 40000-50000
請注意連接埠範圍應該介於 1024 到 65535 之間。
預設值:
無
使用者登入控制
選項名稱: MaxConnection
語法:
MaxConnection number
說明:
這個選項可以讓您控制最多同時連線的數量。如果 MaxConnection 大於 0,則在連線數目到達您所設定的值時,使用者就無法再登入。如果值為
0,則表示不做任何限制。
預設值:
MaxConnection 0
選項名稱: MaxConnectionPerIP
語法:
MaxConnectionPerIP number
說明:
這個選項可以讓您控制每一個連線來源 IP 最多同時連線的數量。如果值為
0,則表示不做任何限制。如果您要使用這個設定,您必須先設定 MaxConnection。
但不建議您將這個值設為小於 2,因為許多 FTP client 都會同時開二個以上的連線。
預設值:
MaxConnectionPerIP 0
選項名稱: VirtualUserMapping
語法:
VirtualUserMapping username
說明:
如果您不希望使用真實的使用者登入 FTP,您可以設定讓每一個登入的使用者都對映到同一個真實使用者。首先,您必須設定虛擬使用者的認證方式 (設定
VirtualUserAuthMethod),接著設定 VirtualUserMapping
以指定要將虛擬使用者對映到什麼身份。如此一來,虛擬使用者所建立的檔案,或是在 Unix 檔案系統上的存取權限全部都會變成這個選項所設定的使用者身份。
例如,您要使用 MySQL 進行身份認證,並將登入的使用者都對映到 ftp 這個真實使用者:
VirtualUserMapping ftp
請注意,您如果有設定 VirtualUserMapping,您也必須設定 VirtualUserAuthMethod 及
VirtualUserAuthConfig。
預設值:
無
選項名稱: VirtualUserAuthMethod
語法:
VirtualUserAuthMethod mysql|pgsql|text
說明:
設定虛擬使用者的認證方式,您可以使用 MySQL、PostgreSQL、或是純文字檔存放虛擬使用者的資料 (帳號、密碼、群組、家目錄)。
預設值:
無
選項名稱: VirtualUserAuthConfig
語法:
VirtualUserAuthConfig /path/to/the/VirtualUserAuthMethod.conf
說明:
設定 VirtualUserAuthMethod 中所使用者認證方式的設定檔所在路徑。例如,如果使用 MySQL:
VirtualUserAuthConfig /usr/local/etc/smbftpd/smbftpd_mysql.conf
如果使用 PostgreSQL:
VirtualUserAuthConfig /usr/local/etc/smbftpd/smbftpd_pgsql.conf
如果使用純文字檔:
VirtualUserAuthConfig /usr/local/etc/smbftpd/smbftpd_user.conf
如果您要使用純文字檔,您可以使用 smbftpd-user 這個指令來建立/編輯/刪除使用者。
預設值:
無
選項名稱: RequireValidShell
語法:
RequireValidShell Yes|No
說明:
當 RequireValidShell 為 Yes 時,使用者必須有合法的 shell 才可以登入。合法的 shell 是以
getusershell(3) 這個函數取得,大多數的作業系統中,合法的 shell 都被定義在 /etc/shells 中。
預設值:
RequireValidShell No
選項名稱: EmptyPasswdLogin
語法:
EmptyPasswdLogin Yes|No
說明:
是否允許空密碼的使用者登入。
預設值:
EmptyPasswdLogin No
選項名稱: NoLoginList
語法:
NoLoginList MinUID
NoLoginList /path/to/no_login_ftp_users
NoLoginList user1,user2,@group1,@group2
說明:
設定您不想讓其登入的使用者,在 NoLoginList 中的使用者或群組不可以登入。
NoLoginList 的參數可以是一個檔案、最小的 UID、或是一個使用者及群組名單。
- 如果是使用者或是群組,如果是設定群組,請在群組名稱前加上 @。當要設定多個使用者或群組時,請使用逗號 , 分開。
- 如果是數字,則視為可以登入的最小 UID,如果使用者 UID < MiniUID,則不允許登入。
- 如果設定的值是以 / 為開頭的檔案絕對路徑,則使用檔案中的使用者群組設定。
如果您使用檔案,檔案中列出的每一行都分別為一個使用者或群組。例如,您可以建立 /etc/ftpusers,檔案內容如下:
user1
user2
@group1
@group2
預設值:
NoLoginList 500
選項名稱: TimeOut
語法:
TimeOut seconds
說明:
當使用者超過這個時間沒有任何動作時,則中斷連線。單位為秒。
預設值:
TimeOut 900
選項名稱: MaxTimeOut
語法:
MaxTimeOut seconds
說明:
使用者可以自行設定 timeout 的時間,但我們可以在這裡設定最長 timeout 的時間。預設是 2 小時。
預設值:
MaxTimeOut 7200
FTP 目錄權限控制
選項名稱: DefaultMode
語法:
DefaultMode SMB|Normal
說明:
SmbFTPD 有二種模式,一個是 SMB mode,另一個是 Normal mode。在 SMB 模式中,SmbFTPD 會使用類似 Samba
的共用資料夾權限設定,系統會讀取 ShareConfPath 中的使用者目錄權限控制來設定他對於資料夾的存取權限。而 Normal 模式中,SmbFTPD 就像一般 FTP Daemon 一樣。
預設值:
DefaultMode Normal
選項名稱: ExceptionList
語法:
ExceptionList user1,user2,@group1,@group2
說明:
您可以在 ExceptionList 中設定不要使用 DefaultMode 的使用者及群組。例如,您如果希望所有人都使用 SMB 模式,但群組
wheel 要使用一般模式,則請將 DefaultMode 設為 SMB,再在 ExceptionList 中設定 @wheel 即可。
ExceptionList 的參數可以是使用者或群組,如果是群組的話,請在群組名稱前加上 @。例如:
ExceptionList user1,user2,@group1,@group2
預設值:
無
選項名稱: ShareConfPath
語法:
ShareConfPath /some/where/smbftpd_share.conf
說明:
設定資料夾設定的 smbftpd_share.conf 所在路徑。如果您設定 DefaultMode 為 SMB,或是 DefaultMode 為 Normal
但有 ExceptionList,則一定要指定 smbftpd_share.conf 的所在路徑。
我們會檢查 smbftpd_share.conf 中的下列關鍵設定:
- path:資料夾的路徑。
- rw:可以有寫入權限的使用者或群組。
- ro:可以有唯讀權限的使用者或群組。
- browseable:資料夾是否要設為隱藏。若設為 no,則使用者在根目錄 ls 時,將看不到該資料夾,但依然可以 cd 到該資料夾中。
- disable_download:設定不可以下載的使用者。若使用者可以讀取該資料夾內容,您還可以設定讓它無法執行下載的動作。
- disable_ls:設定在資料夾中執行 ls 時,不可以看到資料夾內容的使用者及群組。
- disable_modify:設定不可以修改該資料夾中的檔案或目錄的使用者及群組。如果該使用者具有讀寫的權限,但又在此列表中,則該使用者只能上傳檔案或是建立新的目錄,而無法執行
rename、delete、rmdir、chmod 等指令。
範例一:
這個範例是有一個資料夾名為 public,其所在目錄為 /home/public,在 samba 群組中的使用者可以有唯讀的權限,而 root
可以有寫入的權限。
[public]
path = /home/public
rw = root
ro = @samba
範例二:
資料夾名稱為 private,只有 wheel 群組的人可以寫入,而且這個資料夾是隱藏的,wheel 群組的人登入後使用 ls
看不到這個資料夾,但是可以 cd 進去資料夾中。
[private]
path = /root/ftp
rw = @wheel
browseable = no
範例三:
資料夾名稱為 upload,
使用者「ftp」及「anonymous」只能上傳檔案或建立新目錄,但是無法看到該資料夾中的內容,也不可以下載或是修改現有的檔案。但在使用者「wheel」群組中的使用者可以具有全部的讀寫權限。
[upload]
path=/home/upload"
rw=ftp,@wheel
disable_ls=ftp
disable_modify=ftp
disable_download=ftp
請注意,匿名使用者「ftp」及「anonumous」會被對映到真實的使用者「ftp」,如果您要設定的是匿名的使用者「ftp」及「anonymous」,請使用「ftp」這個使用者。
如果您設定某個使用者對於某個資料夾有寫入的權限,但該使用者卻無法寫入,因為除了 SmbFTPD 的權限控制外,您還必須對資料夾的 UNIX
權限做一些設定,讓該資料夾的 UNIX 權限允許該使用者寫入。
預設值:
無
選項名稱: ChrootSet
語法:
ChrootSet user path
ChrootSet @group path
ChrootSet @ path
說明:
在這個列表中的使用者或群組會被 chroot
到您所指定的路徑中,也就是讓它將您所設定的路徑做為根目錄,使用者無法到該路徑以外的地方。如果有需要,您可以同時設定多條 ChrootSet 的規則。
這個參數的第一個欄位是使用者名稱或群組,如果在名稱之前加上
@,表示是群組,所有在該群組中的使用者都會被套用到群組的設定中。而另一個特別的用法是只有一個 @ 符號,表示所有使用者都會被套用到這個設定中。
請注意,被設定為 chroot 的使用者就算 DefaultMode 被歸類為 SMB mdoe 也一定會被強制使用 Normal mode。
這裡有幾個設定的範例:
範例一:
使用者 anonymous 登入時,將它 chroot 到 /var/spool/ftp
ChrootSet anonymous /var/spool/ftp
範例二:
所有群組為 ftpgroup 的使用者都使用他們的家目錄 (home) 做為根目錄。例如,使用者 alex 的家目錄為 /home/alex,則其根目錄為
/home/alex,而 jack 則是 /home/jack。我們以 ~ 符號表示家目錄,系統會自動轉換為真正的路徑。
ChrootSet @ftpgroup ~
範例三:
所有 webusers 這個群組的人都以其家目錄下的 public_html 為根目錄。這對於您要開放 FTP
給某些使用者,但又不想讓他們去存取系統中其它路徑時十分有用。
ChrootSet @webusers ~/public_html
範例四:
所有使用者都必須以其家目錄為根目錄。
ChrootSet @ ~
預設值:
無
選項名稱: ShowSymlinks
語法:
ShowSymlinks Yes|No
說明:
當 ShowSymlinks 為 No ,我們在使用者 ls 時不會列出 symbolic link 的檔案或目錄。
預設值:
ShowSymlinks No
選項名稱: ShowDotFiles
語法:
ShowDotFiles Yes|No
說明:
是否要顯示檔案或目錄名稱開頭為 "." 的檔案。
預設值:
ShowDotFiles Yes
選項名稱: SupportUTF8Client
語法:
SupportUTF8Client Yes|No
說明:
是否支援 UTF-8 的客所端連線。傳統的 FTP 是使用 codepage 來傳輸檔案,所以檔名同時不能出現各國語言。RFC 2640 開如支援
UTF-8 的 FTP client。
如果您將 SupportUTF8Client 設為 Yes,我們會判斷 client 及本地檔案系統來決定是否要進行 codepage 和
UTF-8 的轉換。所以,您必須再設定 CharsetEncoding,我們會使用 CharsetEncoding 來做為轉換的依據。
預設值:
SupportUTF8Client No
選項名稱: UsingUTF8FileSystem
語法:
UsingUTF8FileSystem Yes|No
說明:
本地所使用的檔案名稱是否為 UTF-8。如果檔案名稱是 UTF-8,當 client 使用非 UTF-8 連線時,我們會使用
CharsetEncoding 的設定來將檔名轉成 UTF-8。反之,如果檔案系統不是 UTF-8,但 client 是
UTF-8,我們則會將檔名轉為非 UTF-8。
請注意,如果您使用 UTF-8 的檔案系統,則 smbftpd_share.conf 內容也必須是 UTF-8。
預設值:
UsingUTF8FileSystem No
選項名稱: CharsetEncoding
語法:
CharsetEncoding encoding
說明:
在進行 codepage 轉換成 UTF-8 時,要使用何種編碼進行轉換。
這裡有幾個編碼建議:
- 如果您使用英文、法文、德文、義大利文、西班牙文、葡萄牙文、丹麥文、挪威文、瑞典語、荷蘭文、或是其它的西歐語系,請設為 CP1252。
- 如果您使用繁體中文,請設為 CP950。
- 如果您使用簡體中文,請設為 CP936。
- 如果您使用俄羅斯語,請設為 CP1251。
- 如果您使用日本語,請設為 CP932。
- 如果您使用韓文,請設為 CP949。
- 如果您使用希臘文,請設為 CP1253。
- 如果您使用捷克文,請設為 CP1250。
您可以在這裡找到更多可能的設定值:http://www.gnu.org/software/libiconv/
另外,這是 MS Windows
編碼設定:http://msdn2.microsoft.com/en-us/library/ms903928.aspx
預設值:
無
匿名使用者控制
選項名稱: AnonymousLogin
語法:
AnonymousLogin Yes|No
說明:
是否允許匿名使用者登入。匿名的使用者帳號為 ftp 或 anonymous。如果您要允許匿名使用者登入,您必須先新增一個 ftp 的系統使用者。
預設值:
AnonymousLogin No
選項名稱: AnonymousOnly
語法:
AnonymousOnly Yes|No
說明:
是否只允許匿名使用者登入。
預設值:
AnonymousOnly No
選項名稱: AnonymousReadOnly
語法:
AnonymousReadOnly Yes|No
說明:
當匿名使用者登入時,進入唯讀模式,不允許匿名使用者進行會變更檔案系統的指令。
預設值:
AnonymousReadOnly No
檔案傳輸控制
選項名稱: TransferLog
語法:
TransferLog /var/run/smbftpd.log
說明:
這個選項用來設定使用者上傳及下載的檔案記錄。您可以設定當使用者下載或上傳檔案時,將它所上傳或下載的檔名、傳輸時間、大小等資料寫在這個檔案中。
預設值:
無記錄
選項名稱: MaxDownloadRate
語法:
MaxDownloadRate @grou|user rate
說明:
您可以針對使用者及群組設定最大的下載頻寬。頻寬 rate 的單為是 KB/s。您也可以設定多條 MaxDownloadRate 規則。
這個選項的第一個參數可以是使用者或群組,如果是群組,則名稱開頭必須加上 @。而若只有一個 @ 符號,表示所有使用者都要套用到該規則。例如:
MaxDownloadRate @group100 100
MaxDownloadRate anonymous 20
MaxDownloadRate @friends 1000
預設值:
無限制
選項名稱: MaxUploadRate
語法:
MaxUploadRate @grou|user rate
說明:
您可以針對使用者及群組設定最大的上傳頻寬。頻寬 rate 的單為是 KB/s。您也可以設定多條 MaxDownloadRate 規則。
這個選項的第一個參數可以是使用者或群組,如果是群組,則名稱開頭必須加上 @。而若只有一個 @ 符號,表示所有使用者都要套用到該規則。例如:
MaxUploadRate @group100 100
MaxUploadRate anonymous 20
MaxUploadRate @friends 1000
預設值:
無限制
SSL/TLS 控制
選項名稱: SecurityPolicy
語法:
SecurityPolicy secure|nosecure|both
說明:
這個選項可以讓您設定是否要啟用 SSL/TLS 加密。您可以
強制一定要使用加密連線,或是關閉加密功能,或是同時允許加密及非加密模式。各種模式的說明如下:
- secure:只允許加密連線。
- nosecure:只允許非加密連線。
- both:同時允許加密及非加密連線。
預設值是同時允許加密及非加密連線。
預設值:
SecurityPolicy nosecure
選項名稱: EncryptionType
語法:
EncryptionType tls|ssl|both
說明:
當您要使用加密連線時,您可以選擇要支援哪一種加密模式。SmbFTPD 支援二種模式:SSL 及
TLS,您可以使用下列設定值以選擇要使用另一種模式:
- TLS:只使用 RFC 2228 所定義的 FTP-TLS 模式。
- SSL:只支援 FTP-SSL 模式。
- Both:同時支援 SSL 及 TLS。
預設值是同時支援 SSL 及 TLS。
預設值:
EncryptionType both
選項名稱: NormalUserMustSecure
語法:
NormalUserMustSecure Yes|No
說明:
當 NormalUserMustSecure 設為「Yes」時,表示一般使用者登入時一定要使用加密的連線,否則無法登入。
我們在 FTP 服務中使用 SSL/TLS
的目的是為了避免使用者的機密資料在網路上以明碼流傳,為了強制所有使用者都使用比較安全的模式連線,您可以將這個選項設為「Yes」。
預設值:
NormalUserMustSecure No
選項名稱: AnonymDisableSecure
語法:
AnonymDisableSecure Yes|No
說明:
當 AnonymDisableSecure 設為「Yes」時,系統將不允許匿名的使用者使用加密的連線。
既然 SSL/TLS
的目的是避免使用者資料在網路上流傳,而匿名使用者是任何人都可以使用,保護匿名使用者的資料似乎比較不需要。所以您可以將這個選項設為「No」,以避免匿名使用者也使用加密連線登入,徒然耗費
CPU 的資源。
預設值:
AnonymDisableSecure No
選項名稱: SSLCertFile
語法:
SSLCertFile /path/to/server.crt
說明:
設定所要使用的憑證,這個憑證會被送到客戶端做為加密用。如果您沒有設定這個選項,預設會使用 /usr/local/etc/smbftpd/ssl.crt/server.crt。
您也可以和 Apache+SSL 共用憑證,Apache 的 SSL 憑證通常位於 /usr/local/apache/conf/ssl.crt/server.crt。
預設值:
SSLCertFile /usr/local/etc/smbftpd/ssl.crt/server.crt
選項名稱: SSLKeyFile
語法:
SSLKeyFile /path/to/server.key
說明:
這個選項是用來設定您上述設定的憑證所對映的 private key。這個 private key 和憑證是成對的,預設是在 /usr/local/etc/smbftpd/ssl.key/server.key。
如果您使用 Apache SSL 憑證,則這裡也必須設定使用 Apache 的 key,通常位於 /usr/local/apache/conf/ssl.key/server.key。
預設值:
SSLKeyFile /usr/local/etc/smbftpd/ssl.key/server.key
選項名稱: SSLCACertFile
語法:
SSLCACertFile /path/to/ca-bundle.crt
說明:
這個選項是用來設定您上述設定中繼憑證。用途和 Apache 設定的 SSLCACertificateFile 一樣。
預設值:
無
選項名稱: SSLCipherSuite
語法:
SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5
說明:
這個選項是用來設定所支援的加密演算法。您可以參考 Apache 的設定說明。
預設值:
SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5
|