第一篇:總結Linux系統下Web、FTP、SMTP服務器常見的故障和排除。
一:Linux系統下Web服務器常見的故障和排除
1、服務器響應緩慢
如果服務器響應緩慢,需要做的第一件事情就是判斷問題來自服務器還是網絡,第一個工具就是uptime。
uptime 會顯示服務器的平均負載,如果最后的這個數字高于 2 或者 3 ,問題的原因就在于有一些進程占用系統太多資源。如果這個數字不是很高,你就需要考慮網絡的因素了。
如果看到的高的負載的話,就需要使用 top 命令來確定那些進程在消耗系統資源。
top 命令缺省顯示10條進程,當然你可以使用 top N 來指定需要查看的進程數。
更加詳細的進程列表可以使用 ps-auxw 命令
比較 Web 進程的“硬”限制(Apache 編譯時的限制)和“軟”限制(httpd.conf的限制),如果兩者的數字接近,那么你就要考慮升級硬件或者重新編譯 Apache 了。
2、未授權登錄
如果擔心有非法用戶闖入系統,最簡單的辦法就是用 w 命令來檢查。
如果真的看到有非法用戶在你的系統上,可以立即 kill 他的進程, 用 vipw 命令把他的口令修改為“*”,或者把 shell 改為 /sbin/nologin。
3、服務不能啟動或者崩潰
如果 Web 服務器不能啟動或者啟動時崩潰,就需要使用 apachectl 命令來找到原因。首先用 apachectl configtest 命令檢查 httpd.conf 的合法性。但是 apachectl 并不是萬能的。如果問題依然不能解決,我們就應該檢查錯誤日志。另外,apachectl 檢查 /var/run/httpd.pid 文件來找到原來的進程,如果進程號不同,apachectl stop 命令不會工作。這種情況下就需要使用 ps 命令來 kill 對應的進程。
4、網絡檢測
查找因為網絡問題引起的原因時,第一個簡單的命令就是 ping。
如果 ping 的結果看起來很正常,或許就需要使用比較大的包來試一下,ping 的缺省包大小為 56 字節,我們用-s 指定包大小為 2048 字節來試一下。采用大的包之后,返回時間延長很正常,但是非常長的時間返回或者包丟失就顯示網絡有問題了。
5、交叉信號
如果懷疑服務器和交換機之間的網絡配置有問題,可以采用 netstat-finet 命令來顯示打開的端口以及連機的外部服務。
如果你關心自己的服務器是否遭到攻擊,就會顯示內核的內存使用超常,可以采用
netstat 的-m 參數來查看。
如果你發現 httpd 的負載不是很重,但是網絡資源占用的內存還是很大的話,可以考慮關閉一些服務和端口。
6、網絡問題
如果網絡發生了問題,就需要使用 ifconfig 命令來檢查網卡是否正常。這個命令會顯示網卡的 IP 地址,掩碼,雙工,速率等。
常見的問題是網卡的速率或者雙工設置和交換機端口不一致。特別是設置了“autosense” 選項,但是卻沒有成功。可以采用
ifconfig down eth0 [options]
來關閉。
7、權限問題
有些稀奇古怪的問題,很可能來自沒有剩余空間。可以采用 df 命令來檢查剩余的硬盤空間。一個簡單的例子,就是 PHP 的session 無效了,原因就是寫入 session 的文件系統 /tmp 已經滿了。
有些問題就是沒有設置好權限,常見的問題就是沒有為 CGI 腳本設置 x 權限,沒有為一些目錄設置 rx 權限。
8、常見的懷疑對象
如果有問題發生,其實第一件事就應該是檢查系統日志:/var/log/messages。
如果不能在 /var/log/ 目錄找到有些日志文件,可以查看 /etc/syslog.conf 的配置。
對于 Apache 來說,就需要檢查 [apache_dir]/logs/error _log 來確定不能啟動的原因。二.Linux系統下FTP服務器常見的故障和排除
1.日志文件文件出現錯誤信息“500 OOPS: vsFTPd: not found: directory given in 'secure_chroot_dir':/usr/share/empty”。解決方法:vsFTPd.conf 添加一行:
secure_chroot_dir=/opt/usr/share/empty 建 立一個目錄
mkdir /opt/usr/share/empty 然后關閉匿名登錄把 vsFTPd.conf 中的 anonymous_enable=YES 修改為
anonymous_enable=NO 2.怎么配置linux vsFTPd服務器來chroot虛擬用戶? 解決方法: 當嘗試在vsFTPd下chroot虛擬用戶的時 候,需要這樣做:在vsFTPd.conf里 guest_enable=yes #virtual users are mapped to user FTP which owns all dirs guest_username=FTP #chroots the virtual user to his directory(user joe has directory joe)chroot_local_user=YES user_sub_token=$USER 關 鍵的事情是確保在/etc/passwd的FTP用戶的主目錄實際上包含在/var/FTP/$USER里的字符串$USER 守護進程會做一個簡單的字符串匹配比較,來決定到哪里替換用戶的名字。
3.vsFTP中怎樣限制用戶只能在自己的home目錄下? 解決方法: 有些時候你不想讓FTP用戶可以訪問他自己home目錄之外 的其他文件。vsFTP守護進程可以通過chroot配置這個策略。編輯/etc/vsFTPd/vsFTPd.conf文件,添加一行: chroot_local_user=YES 保 存之后記得重啟vsFTPd服務: service vsFTPd restart 重啟服務之后,FTP所有用戶都將受限制,只能訪問他們 home目錄的文件了。4.如何修改vsFTPd的默認根目錄/var/FTP/pub到另一個目錄? 解決方法:修改FTP的根目錄只要修改/etc /vsFTPd/vsFTPd.conf文件即可: 加入如下兩行:
local_root=/var/www.tmdps.cne to blah FTP service 設置登錄FTP服務器是顯示的信息
4、設置客戶端登錄后所在的目錄
local_root=/var/ftp 設置本地用戶登錄后所在的目錄,默認情況下沒有此項,本地用戶登
錄FTP服務器后,所在目錄為用戶的家目錄 anon_root=/var/ftp 設置匿名用戶登錄FTP服務器時所在的目錄,若未指定默認為/var/ftp
5、設置是否將所有的用戶鎖定在指定的FTP目錄
默認情況下,匿名用戶會被鎖定在默認的FTP目錄中,而本地用戶可以訪問到自己的FTP目錄
以外的內容。處于安全考慮,建議將本地用戶鎖定在指定的FTP目錄中。
chroot_list_enable=YES 設置是否啟用chroot_list_file配置項指定的用戶列表文件。chroot_local_user=YES 用于指定用戶列表文件中的用戶,是否允許切換到指定的FTP目錄>以外的其他目錄
chroot_list_file=/etc/vsftpd/chroot_list 用于指定用戶列表文件,改文件用于控制那>些用戶可以切換到指定的FTP目錄以外的其他目錄
當chroot_list_enable=NO且chroot_local_user=NO 所有用戶都可以切換到指定的FTP目錄>以外的其他目錄
當chroot_list_enable=YES且chroot_local_user=NO時,在 /etc/vsftp/chroot_list文件>中列出的用戶可以切換到指定的FTP目錄以外的其他目錄,未在改文件中列出的用戶不可以>切換到指定目錄之外的其他目錄。
6、設置用戶訪問控制
userlist_enable=YES /etc/vsftpd/user_list文件生效,取NO時不生效 userlist_deny=YES /etc/vsftpd/user_list文件中的用戶不能訪問服務器 三:Linux系統下Web服務器常見的故障和排除
Linux下sendmail的smtp認證的問題及其解決方案
1,問題的提出
為了防止垃圾郵件,通常管理員會 啟用郵件服務器的smtp認證功能。但是發現在配置了smtp的認證之后,如果客戶端不勾選“我的服務器需要認證”,則客戶端同樣能夠發送郵件
2,質疑
如果用戶都能夠不勾選認證選項就進行郵件的發送,還要smtp的認證做什么?
3,測試環境 red hat Linux AS 4 sendmail 8.14,新建郵件用戶,測試的時候用這個用戶樣為自己發郵件
4,問題的分析
分析中。。反復測始終。。
5,問題的解決
1,發現問題所在,通常配置smtp的方法
TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl DAEMON_OPTIONS(`Port=submission, Name=MSA,ME=a')dnl 問題就出現在了第一句話上(他的意思是只要通過其列出的認證方法認證的用戶,不通過smtp也可以發送郵件)2,初步方案
dnl #TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl DAEMON_OPTIONS(`Port=submission, Name=MSA,ME=a')dnl 注釋掉第一行的內容,這樣只有通過認證的用戶才能發送郵件了.3,第二方案,TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl dnl #DAEMON_OPTIONS(`Port=25, Name=MSA')dnl 這樣就強制所有使用該郵件服務器進行郵件轉發的用戶在認證后才能發郵件了。此時只有在發件人或收件人中至少有一方是服務器本地用戶是才予以發送,否則拒絕.4.注意問題, 初步方案和第二方案中的access文件中必須保持只有127.0.0.1 是RELAY的,其它內容都清空掉.不要忘記把它生成數據庫格式