1、 安装和启动
安装wu-ftpd可以通过freebsd自带的port来安装,在/stand/sysinstall中来选择,选择configure中的packages.安装之后,wuftpd的所有安装文件都被安装在了/usr/local中.
想要启动wu-ftpd必须修改inetd.conf文件
加入以下内容:
ftp stream tcp nowait root /usr/local/libexec/ftpd ftpd –l
加入以后以root身份
#killall –HUP inetd
测试一下服务器
#ftp 127.0.0.1
如果你看到以下内容说明你以成功建立了服务器,但是这个服务器并不完整,因为它现在还不能用。
chu888.hope.com.cn FTP server (Version wu-2.6.1(1) Wed Jan 23 06:24:19 GMT 2002) ready.
USER anonymous
331 Guest login ok, send your complete e-mail address as password.
PASS (隐藏)
530 Login incorrect.
#adduser –silent
增加一个新用户
这时你再一次登陆你会发现你以成功了,但这个服务器非常的不安全,为什么了哪,那是因为,这个用户可以无限制的向上反。
2 、限制用户的根目录()
#cd /usr/local/etc/
#ee ftpaccess
加入以下内容
restricted-uid *
#killall –HUP inetd
#ftp 127.0.0.1
你再试试看
在这里有一个关键性的问题,就是写了没有用,那是为什么哪,那是因为我们还要修改一个选择项,那就是/etc/inetd.conf文件中的ftp这一项。
改成以下内容
ftp stream tcp nowait root /usr/local/libexec/ftpd ftpd –l -a
这个-a的作用是强制读取ftpaccess文件的内容
以下是所有参数的内容
-a 強制 wu-ftpd 讀取 ftpaccess 的設定
-A 強制 wu-ftpd 不讀取 ftpaccess 的設定
-d 將 wu-ftpd 的執行錯誤紀錄在 syslog 中,也就是 /var/log/messages
-i 將上傳檔案的紀錄紀錄在 xferlog 中
-l 將每次連線的紀錄紀錄在 syslog 中,也就是 /var/log/messages
-o 把下載檔案的紀錄紀錄在 xferlog 中
-t 秒數 設定連線連續停滯多久就予以斷線,預設值是15分鐘(900秒)
-L 把連線之後所執行的程式紀錄在 syslog
3 磁盘欢迎信息
首先修改/usr/local/etc/ftpaccess文件的message选项,改成以下内容
message /etc/welcome.msg login
这时你就可以在etc目录下建立一个文件welcome.msg了。
%T 本地时间(从Thu Nov 15 17:12:42 1990开始)
%F 本目录所在的文件系统的剩余空间(kbyte,不是所有的系统都支持)
%C 当前目录
%E 在ftpaccess中定义的维护者信箱
%R 远程机器名
%L 本地机器名
%u 根据rfc931得到的用户名
%U 登录的时候使用的用户名
%M 此类用户最大连接数
%N 当前此类用户数
%B 磁盘块限额硬上限
%b 磁盘块限额软上限
%Q 当前磁盘块
%I 可以使用的inode硬上限(+1)
%i 可以使用的inode软上限
%q 已用inode
%H 磁盘空间超额时间限制
%h 文件数超额时间限制
%xu 上传字节数
%xd 下载字节数
%xR 上传/下载速度(1:n)
%xc Credit bytes(存储字节数?)
%xT 时间限制(minutes)
%xE 登录到现在经过的时间(minutes)
%xL 剩下时间
%xU 上传速度限制
%xD 下载速度限制
4 磁盘限额
想要支持磁盘限额,在freebsd就必须编译内核,以下是编绎步骤
#cd /usr/src/sys/i386/conf
# cp GENERIC CHU888
编辑CHU888这个文件
在里面加入
options QUOTA
#config CHU888
#cd /usr/src/sys/compile/CHU888
#make depend
#make
#make install
在/etc/rc.conf中加入 enable_quotas="YES" check_quotas="YES"
在/etc/fstab中加入 /dev/da1s2g /home ufs rw,userquota,groupquota 1 2
重新启动
# quotacheck -av
# repquota -a
# edquota -u user1
# edquota -p user1 user2 user3 //copy quota .user1 to user2 user3
# quota -v user1
5 wuftpd的主要程序介绍
ftpd
ftpd 的主程式 (/usr/libexec)
ftpshut
關閉 FTP Server 的工具程式 (/usr/local/bin)
此程式主要是用來產生 shutmsg(位置在 ftpaccess 中設定),
ftpshut <-l分鐘><-d分鐘>關機時間<75個字元的關機說明>
若指令為 ftpshut -l10 -d5 1130
則 /etc/shutmag 的內容為
1998 09 01 11 30 0010 0005 (1998 09 01 為關機當天)
System shutdown at %S
說明:關機前10分鐘停止連線進來,關機前5分鐘將已連線的使用者斷線,
關機時間為 11:30am
注意:若 /etc/shutmag 建立起來,想重新啟動 FTP Server 務必砍除shutmag
ftpcount
可以統計目前上線人數的應用程式 (/usr/local/bin)
ftpwho
可以查看目前的連線情形 (/usr/local/bin)
ftpaccess
wu-ftpd 最重要的設定檔,主要設定 FTP Server 的運作模式與權限 (/usr/local/etc)
ftpconversions
檔案被下在之後,所要進行的動作 (/usr/local/etc)
ftphosts
設定來自某特定位址的使用者,是否允許登入 FTP Server(/usr/local/etc)
ftpusers
禁止登入 FTP Server 的黑名單 (/usr/local/etc)
6 ftpaccess的范例
ftpaccess -- FTP 的設定檔
class all real,guest,anonymous *
limit all 10 Any /etc/msgs/msg.dead
readme README* login
readme README* cwd=*
message /welcome.msg login
message .message cwd=*
compress yes all
tar yes all
log commands real
log transfers anonymous,real inbound,outbound
shutdown /etc/shutmsg
email user@hostname
#=========ftpaccess 設定 wu-ftpd 的運作模式=================================
#語法:logibfails 次數
#說明:允許密碼輸入之錯誤次數
#語法:class 群組名稱 使用者名稱 可以從哪裡登入(IP/DNS)
#說明:設定可以使用 FTP Server 的群組及成員,可以從哪裡登入
#舉例:class mmm real,guest.anonymous *
mmm這個群組的成員 real,guest,anonymous 可以從任何地方登入
#語法:limit 群組名稱 同時登入人數上限 執行該設限之時間 輸出之訊息檔
#說明:限制同一時間內能夠上線的人數,以維持 FTP Server 較好的服務品質
#舉例:limit all 10 Any /etc/msgs/msg.dead
在任何時間只限定做多10人可以 all 這個群組成員的身分登入,如果超過10
人,就會 show 出 /etc/msgs/msg.dead 的檔案內容
#語法:reeadme 檔名 命令
#說明:當使用者要使用某一特定命令時,就會 show 某一檔案內容
#舉例:readme README* login
只要使用者登入某一目錄,就將該目錄中以 README 為首的檔案內容秀出來
(秀在末端)
#語法:message 檔名 命令
#說明:當使用者要使用某一特定命令時,就會 show 某一檔案內容
#舉例:message /welcome.msg login
當使用者登入 FTP Server 時,會將 FTP 根目錄(一般在 /usr/ftp )下的
welcome.msg 秀出來(秀在開頭)
#語法:compress yes/no 群組名稱1 群組名稱2 ...
#說明:設定哪些群組支援/不支援 compress 功能
#舉例:compress yes all
屬於 all 這個群組的成員,都支援 compress 功能
#語法:tar yes/no 群組名稱1 群組名稱2 ...
#說明:設定哪些群組支援/不支援 tar功能
#語法:private yes/no
#說明:是否同意群組使用您的檔案
#語法:passwd-check none/trivial/rfc822 enforce/warm
#說明:當 anonymous 登入時,密碼輸入的方式
# none 任何密碼都接受
# trivial 只要輸入的密碼中有 @ 字元就接受
# rfc822 密碼一定要遵守 RFC822 所規定的 E-mail 格式
# enforce 密碼輸入錯誤,就停止登入
# warm 密碼輸入錯誤,就顯示錯誤訊息,但仍舊允許登入
#語法:log commands 群組名稱
#說明:設定系統會記錄哪些群組成員的操作紀錄
#舉例:log commands real
將屬於 real 群組的使用者的操作紀錄,都紀錄在 xfrelog 中
#語法:log transfers 群組名稱 inbound/outbound
#說明:設定系統會記錄哪些群組成員上傳或下傳的操作紀錄(紀錄在 xfrelog)
#語法:指令 yes/no 群組名稱
#說明:設定是否支援某指令的功能,可以用來設限的指令有
# delete overwrite readme chmod umask
#舉例:delete no guest,anonymous
# 限制 guest,anonymous 兩個群組的成員禁止使用 delete 指令
#語法:upload FTP之根目錄 上傳目錄 yes/no username groupname 權限 nodirs/dirs
#說明:設定哪一個目錄可以上傳檔案
# yes 該上傳目錄允許上傳檔案
# no 該上傳目錄不允許上傳檔案
# dirs 可以在該上傳目錄中,以 mkdir 開新目錄
# nodirs 禁止在該上傳目錄中,以 mkdir 開新目錄
#舉例:upload /home/ftp /upload yes root daemon 600 nodirs
# 設定 /home/ftp 為FTP根目錄,/upload 為可以上傳的目錄(從 FTP 根目錄算起)
# 不允許開新目錄
#語法:alias 別名 目錄名稱
#說明:將較複雜的目錄設定一個較簡單的別名
#舉例:alias up /upload
#語法:cdpath 目錄
#說明:類似 DOS 中 PATH 的設定,但只有對 cd 這個指令有效,可以協助 cd 切換到
# 正確的目錄
#舉例:cdpath /
# cdpath /pub
# cdpath /incoming
# cdpath /upload
# 若打入指令 cd antivirus,
# 則1.系統會先搜尋目前目錄有無名為 antivirus 目錄
# 2.尋找有無名為 antivirus 的別名
# 3.根據先前設定的順序依序搜尋各目錄
#語法:path-filter 群組名稱 目錄名稱 設限模式
#說明:對上傳的檔案名稱加以設限,避免檔名具有那些符號
#舉例:path-filter anonymous /etc/pathmsg ^[-A-Za-z0-9_\.]*$ ^\. ^-
#語法:shutdown 檔名
#說明:設定 FTP Server 何時應該關機,並且應該秀出的訊息檔案可以經由 ftpshut
# 來建立,要重新啟動 FTP Server 就必須刪除以 ftpshut 所建立的檔案
#舉例:shutdown /etc/shutmsg
# 這個 shutmsg 可以以 ftpshut 來建立,該檔案包括了該何時 shutdown 的
# 訊息,如果要中止 shutdown 的狀態,就必須砍除 /etc/shutmsg
#語法:guestgroup 功能
#說明:指定 guestgroup 功能
#舉例:guestgroup ftponly
#語法:email 特定的 E-mail 位址
#說明:設定那些人的權限屬於 guest,也就是權限介於 real 和 anonymous 之間
#舉例:email aaa@bbb.ccc.ddd
# 只要有人以 anonymous 登入,且其輸入的密碼為 aaa@bbb.ccc.ddd 就將
# 其權限提升為 guest
#語法:deny IP/DNS 檔名
#說明:設定那些 IP 或是 DNS 的使用者不能登入 FTP,並且秀出訊息告知
#舉例:deny *.com.tw 168.192.* /etc/deny.msg
# deny !nameserverd /etc/deny.msg ==> 這是禁止不具有FQDN的機器登入
7 ftpaccess例子
loginfails 2
#只可以有两次密码输入错误
# HEY YOU! Yeah, you with the editor.
# change the following line, or delete it, OK?
#定义两个类,一个类是本地类local一个类是remote类,本地类只可以从本地登陆,remote可以从任何#地方登陆
class local real,guest,anonymous *.domain 0.0.0.0
class remote real,guest,anonymous *
#任何时间local最多只可以有20个。
#对于remote用户在星期六星期天可以有100个人,其他时间18:00-6:00可以有100个人
#如果超过这些人那么显示/etc/msgs/msg.toomany这个信息
#其他时间remote类只可以有60个人。
limit local 20 Any /etc/msgs/msg.toomany
limit remote 100 SaSu|Any1800-0600 /etc/msgs/msg.toomany
limit remote 60 Any /etc/msgs/msg.toomany
readme README* login
readme README* cwd=*
message /welcome.msg login
message .message cwd=*
compress yes local remote
tar yes local remote
# allow use of private file for SITE GROUP and SITE GPASS?
private yes
# passwd-check []
passwd-check rfc822 warn
log commands real
log transfers anonymous,real inbound,outbound
shutdown /etc/shutmsg
# all the following default to "yes" for everybody
delete no guest,anonymous # delete permission?
overwrite no guest,anonymous # overwrite permission?
rename no guest,anonymous # rename permission?
chmod no anonymous # chmod permission?
umask no anonymous # umask permission?
# specify the upload directory information
upload /var/ftp * no nobody nogroup 0000 nodirs
upload /var/ftp /bin no
upload /var/ftp /etc no
upload /var/ftp /incoming yes root daemon 0600 dirs
# directory aliases... [note, the ":" is not required]
alias inc: /incoming
# cdpath
cdpath /incoming
cdpath /pub
cdpath /
# path-filter...
path-filter anonymous /etc/pathmsg ^[-A-Za-z0-9_\.]*$ ^\. ^-
path-filter guest /etc/pathmsg ^[-A-Za-z0-9_\.]*$ ^\. ^-
# specify which group of users will be treated as "guests".
guestgroup ftponly
email user@hostname
loginfails 3
class local real *
class remote anonymous guest *
limit remote 100 Any /etc/ftpd/toomany.msg
message /etc/ftpd/welcome.msg login
compress yes local remote
tar yes local remote
private yes
passwd-check rfc822 warn
log commands real
log transfer anonymous guest inbound outbound
log transfer real inbound
shutdown /etc/ftpd/shut.msg
delete no anonymous,guest
overwrite no anonymous,guest
rename no anonymous
chmod no anonymous,guest
umask no anonymous
upload /home/ftpd * no
upload /home/ftpd /bin no
upload /home/ftpd /etc no
upload /home/ftpd /pub yes real 0644 dirs
upload /home/ftpd /incoming yes real guest anonymous 0644 dirs
alias in /incoming
email guest@xxx.net
email guest@yyy.net
deny *.com.tw /etc/ftpd/deny.msg
下面我们逐句进行讲解,并给出每条设置的含义,以便大家触类旁通,以便根据自己FTP服务器的具体情况进行合理的设置。
1. 格式:loginfails [次数]
功能:设定当用户登录到FTP服务器时,允许用户输错密码的次数。
实例:loginfails 3:密码输入错误三次就切断连接。
2. 格式:class [类名] [real/guest/anonymous] [IP地址]
功能:这个指令的功能设定FTP服务器上用户的类别。并可对客户端的IP地址进行限制,允许某部分的IP地址或全部的IP地址访问。而在FTP服务器上的用户基本上可以分为以下三类:
real 在该FTP服务器有合法帐号的用户;
guest 有记录的匿名用户;
anonymous 权限最低的匿名用户
实例:class local real *:定义一个名为local的类,它包含了在任何地方登录(*代表所有IP地址)的real用户。
class remote anonymous guest *:定义一个名为remote的类,它包含了在任何地方登录的anonymous用户和guest用户。
3. 格式:limit [类别] [人数] [时间] [文件名]
功能:这个指令的功能为设置指定的时间内指定的类别允许连接的指定人数上限。当达到人数上限的时候,显示指定文件的内容。
实例:limit remote 100 Any /etc/ftpd/toomany.msg:在任何时间内,remote类的访问用户达到100人时,将不再允许无法产生新的连接,当第101位客户要连接时,连接将失败,并象用户出示文件/etc/ftpd/toomany.msg的内容。
4. 格式:message [文件名称] [指令]
功能:当用户执行所指定的指令时,系统将指定的文件内容显示出来。
实例:message /etc/ftpd/welcome.msg login:当用户执行login命令时,也就是登录到FTP服务器上的时候,系统将显示文件/etc/ftpd/welcome.msg的内容。
5. 格式:compress [yes/no] [类别]
功能:设置哪一个类别的用户可以使用compress(压缩)功能。
实例:compress yes local remote:允许local和remote两个类别的用户都能使用 compress(压缩)功能。
6. 格式:tar [yes/no] [类别]
功能:设置哪一个类别的用户可以使用tar(归档)功能。
实例:tar yes local remote:允许local和remote两类的用户都能使用tar功能。
7. 格式:private [yes/no]
功能:设定是否支持群组对文件的取用。
实例:private yes:支持群组对文件的取用。
8. 格式:passwd-check [none/trivial/rfc822] [enforce/warn]
功能:设定对匿名用户anonymous的密码使用方式。
none 表示不做密码验证,任何密码都可以登录;
trival 表示只要输入的密码中含有字符“@”就可以登录;
rfc822 表示密码一定要符合RFC822中所规定的E-Mail格式才能登录;
enfore 表示输入的密码不符合以上指定的格式就不让登录;
warn 表示密码不符合规定时只出现警告信息,仍然能够登录。
实例:passwd-check rfc822 warn:希望能够得到符合规定的E-Mail作为密码,但如果不是,也允许登录。
9. 格式:log command [real/guest/anonymous]
功能:设置哪些用户登录后的操作记录在文件/usr/adm/xferlog中。
实例:log command real:当real用户登录后,将他的操作记录下来。由于其它用户权限较低,所以操作不会引起太大的安全隐患,所以一般只需记下real用户的操作就可以了。
10. 格式:log transfers [real/guest/anonymous] [inbound/outbound]
功能:设置哪些用户的上载(inbound)和下载(outbound)操作做日志。
实例:log transfer anonymous guest inbound outbound:对于匿名用户要更加的关注它们的文件操作,所以无论上载、下载都进行记录。
log transfer real inbound:对于合法用户则只记录他的上载记录。
11. 格式:shutdown [文件名]
功能:FTP服务器关闭的时间可以设置在后面所指定的文件中,当设置的时间一到,便无法登录FTP服务器了,要恢复的话只有将这个文件删掉。而这个文件必 须由指令/bin/ftpshut来生成。
实例:shutdown /etc/ftpd/shut.msg
12. 格式:delete [yes/no] [real/anonymous/guest]
功能:设置是否允许指定用户使用delete命令删除文件。默认是允许。
实例:delete no anonymous,guest:为了更好地管理FTP服务器,一般情况下,我们不允许匿名用户执行delete命令。
13. 格式:overwrite [yes/no] [real/anonymous/guest]
功能:设置是否允许指定用户覆盖同名文件。默认是允许。
实例:overwrite no anonymous,guest:为了更好地管理FTP服务器,一般情况下,我们不允许匿名用户覆盖同名文件。
14. 格式:rename [yes/no] [real/anonymous/guest]
功能:设置是否允许指定用户使用rename命令来为文件改名。默认是允许。
实例:delete no anonymous:为了更好地管理FTP服务器,一般情况下,我们不允许匿名用户执行rename命令改变文件名。而对有记录的匿名用户则适当的放宽,允许他们使用改名命令。
15. 格式:chmod [yes/no] [real/anonymous/guest]
功能:设置是否允许指定用户使用chmod命令更改文件权限。默认是允许。
实例:delete no anonymous,guest:为了更好地管理FTP服务器,一般情况下,我们不允许匿名用户执行chmod命令更改文件权限。
16. 格式:umask [yes/no] [real/anonymous/guest]
功能:设置是否允许指定用户使用umask命令。默认是允许。
实例:delete no anonymous:为了更好地管理FTP服务器,一般情况下,我们不允许匿名用户执行umask命令。
17. 格式:upload [根目录] [上载目录] [yes/no] [用户] [权限] [dirs/nodirs]
功能:对可以上载的目录进行更加详细的设置。
实例:upload /home/ftpd * no:表示在子目录/home/ftpd下不允许上载;
upload /home/ftpd /bin no:表示在子目录/home/ftpd/bin下不允许上载;
upload /home/ftpd /etc no:表示在子目录/home/ftpd/etc下不允许上载;
upload /home/ftpd /pub yes real 0644 dirs:允许用服务器上的合法用户在子目录/home/ftpd/pub目录下能上载权限为0644(也就是-rw-r--r--)的文件,而且在这个目录下可以新建子目录。
upload /home/ftpd /incoming yes real guest anonymous 0644 dirs:允许所有的用户在子目录/home/ftpd/incoming下能上载权限为0644的文件,而且在这个目录下可以新建子目录。
18. 格式:alias [目录别名] [目录名]
功能:给指定目录设置一个别名,在切换目录时就可以使用较短的目录别名。
实例:alias inc: /incoming:为子目录incoming设置一个别名inc:。
19. 格式:email [guest的E-Mail地址]
功能:只要将某些E-Mail地址设置在这个地方,那么这些用户登录到FTP服务器时,他的身份将为guest,一般权限比real低一些,比anonymous高。
实例:email guest@xxx.net email guest@yyy.net:这里仅是一个示例,实际上可 以包含多个符合规范的E-Mail地址。
20. 格式:deny [IP地址/域名] [说明文件]
功能:这个设置可以限制哪一些IP地址或域名的用户无法登入FTP服务器。
实例:deny *.com.tw /etc/ftpd/deny.msg:设置凡是域名是以“.com.tw”结束的域名,都禁止其访问。而将/etc/ftpd/deny.msg的内容显示给用户看。
设置/etc/ftpuser,禁止某些用户登录
有时我们需要禁止一些用户使用FTP服务。其实这个设置是十分简单的,只需要将要禁止的用户帐号写入文件/etc/ftpuser中。由于从系统的安全考虑,一般我们是不希望权限过大的用户和一些与命令名相同的用户进入FTP服务器。所以在缺省的配置中,一般以下用户已经被列入了“黑名单”。
root
uucp
news
bin
adm
nobody
lp
sync
shutdown
halt
6. 设置/etc/ftphosts,禁止某些来自指定机器上的登录如果你需要拒绝来自某些主机的登录,一种方法就是在/etc/ftpaccess中设置deny命令,另一种更加简单的方法就是在/etc/ftphosts中写入你要禁止的主机的IP地址或域名。
7. 使新的配置生效
到此为止,我们已经能够根据自己的需要对FTP服务器配置进行必要的修改和调整。而让我们重新配置后,就必须使其生效。一般的,对/etc/ftpaccess的配置是直接作用于设置后的下一次FTP服务进程。而其它的则要对inetd进程重新启动。