用Linux架設(shè)FTP服務(wù)器(中)發(fā)布時間:2007-11-09 13:14:02 來源: 作者: 點(diǎn)擊:314
先設(shè)置編譯器的編譯參數(shù):
CC="egcs" 這些編譯參數(shù)告訴編譯器如何編譯wu-ftpd: 不要用失敗的DNS查詢 加入對定額(QUOTA)的支持(如果OS支持) 加入對PAM的支持 不允許作為單獨(dú)的daemon運(yùn)行 刪除過多的空行 不支持虛擬服務(wù)器 禁止PID加鎖睡眠消息(用于繁忙的站點(diǎn)) 被動連接的時候不要求用同樣的IP 不允許匿名ftp訪問 使用內(nèi)部的“l(fā)s”命令(試驗性的) 內(nèi)部的“l(fā)s”命令顯示UID而不顯示用戶名(為了提高速度) 用下面的命令編譯和安裝軟件: make 上面的“make”和“make install”可以配置軟件以保證系統(tǒng)中有編譯所需要的函數(shù)庫,然后把所有的源文件都編譯成可執(zhí)行的二進(jìn)制文件,最后把二進(jìn)制文件和配置文件安裝到相應(yīng)的目錄里。 “install ?m”安裝“xferstats”程序,用于統(tǒng)計傳輸了多少文件。“touch”命令為xferstats在“/var/log”目錄下創(chuàng)建日志文件。“chomod”把“xferlog”的權(quán)限改為只對超級用戶“root”可讀和可寫。接著,我們?yōu)椤癷n.ftpd”二進(jìn)制文件創(chuàng)建符號鏈接。最后,用“strip”命令減小所有二進(jìn)制文件的大小以提高wu-ftpd的性能。 清除不必要的文件 [page] “rm”命令刪除所有編譯和安裝wu-ftpd所需要的源程序,并且把wu-ftpd軟件的壓縮包刪除掉。 為FTP站點(diǎn)的用戶建立沒有shell的賬號 第一步 用下面的命令在“/etc/passwd”文件中創(chuàng)建用戶。對于每個允許訪問ftp服務(wù)器的新用戶都要重復(fù)這個步驟。 [root@deep]# mkdir /home/ftp Changing password for user ftpadmin 第二步 編輯“/etc/shells”文件并加入一個空shell,如:null。這個假的shell可以限制用戶對ftp服務(wù)器的訪問。 [root@deep]# vi /etc/shells /bin/bash 第三步 現(xiàn)在編輯“/etc/passwd”文件,手工加上“/./”把“/home/ftp”目錄和“/ftpadmin”目錄分開,用戶“ftpadmin”會自動轉(zhuǎn)到(chdir)“/ftpadming”目錄下。在“passwd”文件中每添加一個ftp用戶都要重復(fù)這個步驟。 編輯“passwd”文件(vi /etc/passwd),把下面這一行改為: ftpadmin:x:502:502::/home/ftp/ftpadmin/:/dev/null 改為: ftpadmin:x:502:502::/home/ftp/./ftpadmin/:/dev/null 賬號為“ftpadmin”,這這個賬號的家目錄有一些奇怪。第一部分“/home/ftp/”表示“chroot”時作為根目錄的目錄。被點(diǎn)號分開的“/ftpadmin”表示當(dāng)?shù)卿沠tp服務(wù)器的時候會自動轉(zhuǎn)到這個目錄?!?dev/null”這個空shell不允許“ftpadmin”像正常用戶那樣登錄。經(jīng)過這些改變,“ftpadmin”用戶用的不是真正的shell而是偽shell,這樣訪問ftp服務(wù)器就受到限制。 創(chuàng)建一個“chroot”用戶環(huán)境 [page] 第一步 [root@deep]# mkdir /home/ftp/dev 第二步 [root@deep]# chmod 0511 /home/ftp/dev 上面這些“chmod”命令把chrooted之后的“dev”、“etc”、“bin”和“l(fā)ib”目錄設(shè)置成超級用戶“root”可讀、可執(zhí)行,用戶組和所有用戶可執(zhí)行。 第三步 [root@deep]# cp /bin/ls /home/ftp/bin (require only if you are not using the “--enable-ls” option) 第四步 [root@deep]# ldd /bin/ls (require only if you are not using the “--enable-ls” option) libc.so.6 => /lib/libc.so.6 (0x00125000) 把共享庫拷貝到“/home/ftp/lib”目錄下: [root@deep]# cp /lib/libc.so.6 /home/ftp/lib/ (require only if you are not using the “--enable-ls” option) 注意:如果想用Linux的“l(fā)s”程序而不是用WU-ftpd自帶的“l(fā)s”(編譯時加上“--enable-ls”參數(shù)),才需要第三和第四步。 第五步 [root@deep]# mknod /home/ftp/dev/null c 1 3 第六步 [root@deep]# cp /etc/passwd /home/ftp/etc/ 編輯“passwd”文件(vi /home/ftp/etc/passwd)把除了“root”和允許使用ftp的用戶之外的所有其它項刪掉。這對于改變根文件系統(tǒng)的環(huán)境很重要,改變之后的“passwd”文件會是象下面這樣的: root:x:0:0:root:/:/dev/null 編輯“group”文件(vi /home/ftp/etc/group),把除了“root”和允許使用ftp的用戶之外的所有其它項刪掉。改變之后的“group”文件會是象下面這樣的: root:x:0:root 配置 [page] 為了運(yùn)行FTP服務(wù)器,必須創(chuàng)建或者把下面的文件拷貝到相應(yīng)的目錄下: 把“ftpaccess”文件拷貝到“/etc”目錄下 可以把“floppy.tgz”解壓之后,找到上面列出來的文件,并拷貝到相應(yīng)的目錄下,或者用拷貝粘貼的方法從本書中直接粘貼出。 配置“/etc/ftpaccess”文件 創(chuàng)建ftpaccess文件(touch /etc/ftpaccess),在文件中加入: class openarch guest 208.164.186.* 現(xiàn)在把文件的權(quán)限設(shè)成600: [root@deep]# chmod 600 /etc/ftpaccess 下面解釋配置文件中的設(shè)置: class “class”用來定義一個允許訪問ftp服務(wù)器的用戶類別??梢远x任意多的類別(class)。每一個“class”行的格式如下: class <classname> <typelist> <addrglob> <classname>是class的名字,<typelist>是允許加到類別(class)中的用戶類型,<addrglob>是這個class允許的IP地址范圍。 <typelist>中的項是用逗號隔開的,每一個項有三種可能的取值:anonymous、guest或real。anonymous用戶是用anonymous或ftp賬號訪問ftp服務(wù)器而且只需要訪問公用文件的那些用戶。guest用戶有一些特殊因為他們在系統(tǒng)中沒有賬號,但是卻又是guest組的成員。real用戶必須在FTP服務(wù)器上有賬號,而且需要經(jīng)過服務(wù)器的安全驗證。 [page] <addrglob>可以用通配符,例如:“*”表示所有的站點(diǎn)。下面這一行: class openarch guest 208.164.186.* 表示只有在系統(tǒng)中有自己賬號的guest用戶而且IP地址為“208.164.186.*”才能訪問ftp服務(wù)器。 limit “l(fā)imit”根據(jù)class和時間范圍來限制登錄ftp服務(wù)器的用戶數(shù)?!發(fā)imit”的格式是: limit <class> <n> <times> <message_file> 其中<class>是受限制的類別(class),<n>表示在這個類別中受到限制的最多用戶數(shù),<times>表示“l(fā)imit”有效的時間段,<message_file>是當(dāng)達(dá)到最大的用戶數(shù)目的時候,別的用戶還想登錄時顯示的信息。 <times>中的字符串用逗號隔開,每一個字串表示一天。星期一到星期日分別用Mo、Tu、We、Th、Fr、Sa和Su表示,周末也可以用Wk表示。表示時間的小時和分鐘之間不要用冒號隔開?!?”用來表示范圍。 例如,限制“openarch”這個類別,最多可以有20個用戶,訪問時間是星期一道星期四全天,星期五從半夜到下午六點(diǎn)。用下面這一行來表示: limit openarch 20 MoTuWeTh,Fr0000-1800 /home/ftp/.too_many.msg 如果一旦達(dá)到最大的用戶數(shù),還有別的用戶想連接ftp服務(wù)器,就會把“/home/ftp/.too_mang.msg”中的信息傳給用戶。 loginfails “l(fā)oginfails”設(shè)置最多允許的登錄失敗的次數(shù)??梢杂孟旅孢@一行來表示: loginfails <n> ?。糿>表示最多允許的登錄失敗的次數(shù)。例如,只允許失敗兩次可以這樣表示: loginfails 3 readme “readme”設(shè)置在什么條件下,一旦當(dāng)前目錄中的文件發(fā)生了變化需要提醒用戶。 這個命令的格式為: readme <path> <when> ?。紁ath>是用來提醒用戶的文件的名字(例如:README),<when>設(shè)置出現(xiàn)這個提示信息的條件。 ?。紈hen>可以為下面兩種形式:LOGIN或CWD=<dir>。如果為LOGIN,當(dāng)用戶成功登錄的時候就會出現(xiàn)提示信息。如果為CWD=<dir>,當(dāng)用戶進(jìn)入<dir>目錄的時候就會有提示信息。 請記住當(dāng)給匿名(anonymous)用戶設(shè)置提示信息的路徑的時候,這個路徑必須是相對于匿名ftp目錄。 |
|