關於Apache的配置及使用,在LinuxAid中已經有不少文章做了詳細的闡述,本文討論了在使用Apache時,有關配置文件的使用及對文件的訪問控制等內容,算是對Apache的使用所做的一些補充吧! 如果您對Apache有一定的了解,特別是對幾個配置文件有一定的了解,這將會有助於您對本文內容的理解;如果恰巧您不是很了解這幾個配置文件的使用,那麼就借著這個機會來一起熟悉一下吧。 一、關於CGI執行腳本的配置 這裡有兩種設置CGI腳本的方法。第一、CGI的腳本文件以.cgi為擴展名;第二、設置腳本可執行目錄。但是這兩種方法都需要將要執行的文件設置為711,才可以被執行。 第一種方法,我們需要在Access.conf文件種將你要發行的目錄設置為Option ExecCGI All,在srm.conf資源配置文件中,加上下列一句: AddHandle cgi-script .cgi 這樣在所有的目錄種只要你的文件是.cgi為擴展名的,且文件訪問權限為711的,無論給文件在你發行目錄的任何一個地方都可以做為CGI被Apache服務器調用。這種方法一般沒有第二種方法安全。 第二種方法,是將一個目錄作為一個可執行目錄,將所有的cgi文件都放在其中,這裡就不一定非得是以.cgi為擴展名得文件可以執行,而是只要有711屬性的文件就可以被執行,而且其它的非可執行文件都被禁止訪問。我們的默認配置文件種就有一個很好的例子: access.conf: Allow Override None Options ExecCGI srm.conf ScriptAlias /cgi-bin/ /home/httpd/cgi-bin/ 這樣只要在/home/httpd/cgi-bin/目錄中的可執行文件都可以被Web服務器調用,而其它的非可執行文件將被拒絕訪問。 二、配置用戶的發行目錄 這裡有兩種設置方法: 第一種是系統的默認方法,即用戶目錄下的public_Html目錄為用戶的發行目錄,且默認的主頁文件為index.html,且該目錄不支持CGI。 第二種是在其它目錄種專門為用戶設置發布目錄,如我想在/home/html目錄做為用戶的web目錄,那管理員就應該在該目錄下為每一個用戶設置一個子目錄,如:/home/html/user01、/home/html/user02等。那麼,你的srm.conf文件中的UserDir後面就不能再是public_html了,應該改為:UserDir /home/html/*/,注意這裡的“*”代表anyone,當你再浏覽器中請求一個如http://www.domain/~user01時,Apache服務器就會自動的將你的請求轉移到/home/html/user01中,然後去尋找index.html文件。 這種設置不需要到access.conf中設置該目錄的訪問屬性,還有,當我們設置虛擬主機時也不用設置目錄的訪問屬性,但是如果你想讓某個目錄具有CGI權限,都要到Access.conf文件中去配置目錄的訪問權限,如:你想讓你的所有用戶在他們的發布目錄中具有CGI訪問權,則需要在你的access.conf中這樣設置: Allow Override None Options ExecCGI 注意這裡設置用戶目錄中的cgi-bin子目錄為cgi執行目錄,這是一種安全的設置,而且也是一種UNIX的習慣。 三、如何將Apache服務器設置為inetd的子服務 當你安裝了Apache後,默認設置為standalone方式運行,如果你想將它設置為inetd的子服務,首先在每次激活Linux時不激活httpd,然後編輯/etc/inetd.conf,在其中加入下列語句:http stream tcp nowait root /usr/sbin/httpd httpd 然後重新激活inetd服務器。這樣你用ps -aux命令查看進程運行情況時,你不會發現httpd的進程的存在,但是一旦有客戶請求一個頁面時,inetd就激活一個httpd進程為該請求服務,之後就自動釋放,這種運行方式有助於節省系統資源,但是如果你的web服務很重要,一般不建議設置為這種方式運行。 四、將httpd.conf做為唯一的配置文件 在Apache中給用戶提供了三個配置文件: srm.conf、 access.conf 和 httpd.conf files。 實際上這三個文件是平等的,所有的配置都可以放在一個單獨的httpd.conf文件中,事實上在Apache 1.3.2中就已經這樣做了,在httpd.conf中應包括以下兩條指令來防止Apache對srm.conf和access.conf兩個配置文件的訪問: AccessConfig /dev/null ResourceConfig /dev/null 在apache1.3.2中只要注釋掉以下這兩行即可: AccessConfig conf/access.conf ResourceConfig conf/srm.conf 五、用戶授權和訪問控制 你也許在訪問某些網站時會遇到過這樣的情況,當你點擊某個連接時,你的浏覽器會彈出一個身份驗證的對話框,要求輸入賬號及密碼,如果沒有,就無法繼續浏覽了。有人會以為這是用CGI做出來的,其實不然,這是WWW服務器的用戶授權和訪問控制機制在發揮作用。 你是否還記得在設置Apache服務環境的過程中,有……..<./Directory>這個指令,可以對不同的目錄提供不同的保護。但是這樣的設定,需要重新啟動服務器才會生效,靈活性較差,通過AccessFile指令指定訪問控制文件的方式則比較靈活,在Apache服務器中設置用戶的訪問控制權限步驟如下: 1、首先對httpd.conf文件進行設置如下: # AllowOverride FileInfo AuthConfig Limit # Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec Options Includes FollowSymLinks Indexes AllowOverride All //*注意AllowOverride 一定要設置為All,這樣後面的.htaccess文件才會起作用 Order allow,deny Allow from all # # Order deny,allow # Deny from all # #指定配置存取控制權限的文件名稱 AccessFileName .htaccess 2、創建.htaccess文件內容 要控制某目錄的訪問權限必須建立一訪問控制文件,文件名前面指定的“.htaccess”,其內容格式如下: AuthUserFile 用戶帳號密碼文件名 AuthGroupFile 群組帳號密碼文件名 AuthName 畫面提示文字 AuthType 驗證方式 密碼驗證方式 用戶驗證方式AuthType目前提供了Basic和Digest兩種。 密碼檢驗設定方法與httpd.conf中的相關設定相同。 具體例子如下: AuthUserFile /etc/secure.user AuthName 安全認證中心 AuthType Basic require valid-user 3、建立用戶密碼文件 如果你是第一次創建用戶密碼,命令格式如下: htpasswd -c 密碼文件名 用戶名稱 在上面的例子中,我們將用戶密碼文件放到了/etc/secure.user文件中,所以這裡應按照如下進行操作: htpasswd -c /etc/secure.user sWord 程序會提示你輸入兩次用戶的口令,然後用戶密碼文件就已經創建sword這個用戶也添加完畢了。 如果要向密碼文件中添加新的用戶,按照如下命令格式進行操作: htpasswd 密碼文件 用戶名稱 這樣,重新啟動httpd後,進行該WEB目錄時就會有一個對話框彈出,要求輸入用戶名及用戶口令了。 4、如何減少訪問控制對Apache性能的影響 頻繁的使用訪問控制會對Apache的性能產生較大的影響,那麼,如何才能減少這種影響呢?最簡單也是最有效的方法之一就是減少.htaccess文件的數目,這樣可以避免Apache對每一個請求都要按照.htaccess文件的內容進行授權檢查。它不僅在當前的目錄中查找.htaccess文件,它還會在當前目錄的父目錄中查找。 / /usr /usr/local /usr/local/etc /usr/local/etc/httpd /usr/local/etc/httpd/htdocs /usr/local/etc/httpd/htdocs/docs 通常在根目錄下沒有htaccess文件,但Apache仍然會進行例行檢查以確定該文件確實不存在。這是影響很影響服務器工作效率的事情。下面的方法可以消除這個討厭的過程:將AllowOverride選設置為None,這樣Apache就會檢查.htaccess文件了。將/根目錄的AllowOverride選項設為None,只將需要進行訪問控制的目錄下的AllowOverride選項設置為all,如下面的例子中將/根目錄的AllowOverride 選項關閉了,只打開了/usr/local/etc/httpd/htdocs目錄下的AllowOerride選項,這樣,系統就只在/usr/local/etc/httpd/htdocs中檢查.htaccess文件,達到的提高服務效率的目的。 AllowOverride None AllowOverride All 如果除了根目錄以外,還有其它存放WWW文件的目錄,你也可以采取同樣的方法進行設置。比如:如果你使用UserDir來允許用戶訪問自己的目錄,AllowOverride的設置如下: AllowOverride FileInfo Indexes IncludesNOEXEC 5、防止用戶訪問指定的文件 系統中有一些文件是不適宜提供給WWW用戶的,如:.htaccess、htpasswd、*.pl等,可以用達到這個目的: order allow,deny deny from all 用戶訪問控制三個.htaccess文件、.htpasswd和.htgroup(用於用戶授權) ,為了安全起見,應該防止用戶浏覽其中內容,可以在httpd.conf中加入以下內容阻止用戶對其進行訪問: Order deny, allow Deny from all 這樣這三個文件就不會被用戶訪問了。 6、限制某些用戶訪問特定文件 可以對目錄進行約束,要限制某些用戶對某個特定文件的訪問可以使用,比如:不允許非domain.com域內的用戶對/prices/internal.html進行訪問,可以用如下的設置: order deny,allow deny from all allow from .domain.com 如果你要授於相應權限的機器沒有公開的域名,請在你的/etc/hosts文件中,將其IP地址映射到某個指定的名稱,然後在Location中對其進行設置,否則該選項是不起作用的。 7、只接受來自特定鏈接的訪問 例如,只讓所有來自 http://www.sina.com.cn/* 的鏈接的用戶進入此目錄,由其它鏈接來的訪客都不得進入; " * "表示此網站底下所有的鏈接。其中的 http://www.sina.com.cn/* 也可以是:http://202.106.184.200/* 或是指定文件 http://www.sina.com.cn/news.html .htaccess文件的內容如下: AuthUserFile /dev/null AuthGroupFile /dev/null AuthName ExampleAllowFromSpecificURL AuthType Basic order deny,allow deny from all referer allow from http://www.sina.com.cn/* 六、如何通過Apache訪問掛接到mnt中的目錄內容 在Linux下,要浏覽光盤的內容,必須要先將光盤掛接到/mnt/cdrom上,在Linux下訪問dos或其它分區也一樣,都要將其先掛接到/mnt下。下面提供的方法,可以通過Apache顯示上掛的目錄內容: 1、 先將需要掛接的內容掛接到mnt下,如: mount –t iso9660 /dev/cdrom /mnt/cdrom 2、修改/usr/local/etc/httpd/conf中的srm.conf文件(在Apache1.3.2中修改httpd.conf) 加入別名支持: # Alias fakename realname # alias for netware server // Alias /netware/ /mnt/MYDOM_NW/vol1/home/htmldocs/ Alias /winNT/ /mnt/MYDOM_NT/ Alias /unix/ /mnt/MYDOM_UNIX 其實這一步還有個最簡單的方法就是直接在WWW文件目錄下建立鏈接目錄,比如: ln –s /mnt/MYDOM_NT/ winNT 也能達到同樣的效果。 3、最後,用Directory 分別指定用戶對上面這幾個目錄的訪問權限: Options Indexes MultiViews AllowOverride None Order allow,deny Allow from all 注意, Options中的Indexes一定要注明,否則被打開的目錄中若沒有文件,用戶無法浏覽整個目錄的結構,服務器會返回錯誤指示。 這些工作都完成後,別忘了重新啟動Apache。在客戶端通過 http://www.yourdomain/CDROM/訪問光盤內容,其余系統以此類推。