這里以為實例,指導在以服務器模式安裝redhat以后,如何以最快的速度建設一個如同的服務器。在這里網站服務器上運行有以下服務器軟件:Ftp、DNS、WWW、Mysql、Sendmail。
服務器安全
安裝完Linux服務器以后,首先要對服務器進行初步的安全設置,一般來講要考慮下面這些安全問題:安裝服務器結束以后,缺省的各種服務器都是打開的,所以,首先需要關閉那些不需要的服務,因為這些服務可能會對系統安全造成威脅。首先需要關閉以下服務:finger、talk、ntalk、shell、login、pop3、tftp、linuxconf、ftp、telnet。這些服務的特點是他們都是由inetd進程啟動的,也就是說這些服務并不直接啟動,而是有inetd代其監聽自己的服務端口,當有服務請求到來以后,inetd才會啟動真正的服務進程,處理請求。而inetd的配置文件/etc/inetd.conf則指定了哪些服務需要從inetd來啟動。因此如果需要關閉不需要的服務則應該編輯該文件,在相應的服務前加上注釋符號 “#”例如,需要關閉finger服務,將:
finger stream tcp nowait nobody /usr/sbin/tcpd in.finger
修改為:
# finger stream tcp nowait nobody /usr/sbin/tcpd in.finger
對其他的服務可以采取同樣的措施。
而對于那些不是從inetd啟動的服務,則通過命令來關閉,例如需要關閉sendmail服務,則:
/etc/rc.d/init.d/sendmail stop
然后再設置其不在系統啟動時啟動:
chkconfig –level 12345 sendmail off
也可以使用ntsysv命令來設定是否自啟動某個服務。
一般來講,服務器上應當只啟動必須的服務,對于那些不需要的服務,必須關閉??梢允褂妹頽etstat –l –n來查看本機開放了那些服務:
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 ins:domain *:* LISTEN
tcp 0 0 ns:domain *:* LISTEN
tcp 0 0 www:domain *:* LISTEN
tcp 0 0 *:www *:* LISTEN
tcp 0 0 *:ftp *:* LISTEN
udp 0 0 *:1036 *:*
udp 0 0 ins:domain *:*
udp 0 0 ns:domain *:*
udp 0 0 www:domain *:*
raw 0 0 *:icmp *:* 7
raw 0 0 *:tcp *:* 7
Active UNIX domain sockets (only servers)
Proto RefCnt Flags Type State I-Node Path
從上面的輸出可以看到,這臺機器開放了dns、www、ftp、1036、icmp、tcp端口,可以查看/etc/service來確定數字表示的端口具體都是什么服務。
這里關閉了telnet服務,那么如何登錄服務器進行配置呢?這里推薦使用SSH,因為telnet協議是采用明文方式傳輸密碼和用戶名,因此這些信息可能在傳輸過程中被竊聽,而SSH是telnet的一種替代品,它的服務器和客戶端之間的所有數據傳輸都進行了加密,因此提高了安全性。
若某個系統帳號用戶不允許登錄系統,而只允許其修改自己的密碼,則需要修改起shell,也就是編輯/etc/passwd文件。舉例如下,若不允許ideal登錄系統則需要編輯passwd文件,修改:
ideal:x:500:500:ideal:/home/ideal:/bin/bash
為:
ideal:x:500:500:ideal:/home/ideal:/usr/bin/passwd
這樣當該用戶登錄進入系統以后,只能修改自己的密碼,修改完畢以后,系統會自動斷開連接。
23.2 設置DNS服務器
我們首先為服務器設置dns服務器。這里假定的服務器ip地址為202.99.11.120,該服務器除了要解析linuxaid.com.cn的區信息以外,還要解析longshine.com.cn的區信息。也就是說本機要負責解析兩個區的域名信息。這里假設的IP地址是202.99.12.120。
第一步:
編輯系統已經存在的/etc/resolv.conf文件,設置內容如下:
domain linuxaid.com.cn.
nameserver 202.99.11.120
該文件定義了本地域名和缺省域名服務器,可以根據自己的實際情況修改該文件。
第二步:
編輯系統已經存在的/etc/named.conf文件,初始內容為:
options {
directory \"/var/named\";
};
zone \".\" {
type hint;
file \"named.ca\";
};
zone \"0.0.127.in-addr.arpa\" {
type master;
file \"named.local\";
};
修改內容如下:
options {
directory \"/var/named\";
};
zone \".\" {
type hint;
file \"named.ca\";
};
zone \"linuxaid.com.cn\"{
type master;
file \"linuxaid.com.cn\";
};
zone \"longshine.com.cn\"{
type master;
file \"longshine.com.cn \";
};
zone \"0.0.127.in-addr.arpa\"{
type master;
file \"named.local\";
};
zone “12.99.202.in-addr.arpa\"{
type master;
file \"12.99.202\";
};
zone “11.99.202.in-addr.arpa\"{
type master;
file \"11.99.202\";
};
其中,type指定了該域的性質,hint指根域,master表示本機對該域是權威的主域名服務器。
第三步:
創建/var/named下的名為linuxaid.com.cn文件內容如下:
@ IN SOA ns. linuxaid.com.cn. root. linuxaid.com.cn. (
2000080701 ; serial
28800 ; refresh
7200 ; retry
604800 ; expire
86400 ; default_ttl
)
@ IN A 202.99.11.120
@ IN NS ns. linuxaid.com.cn.
@ IN MX 10 mail. linuxaid.com.cn.
localhost IN A 127.0.0.1
www IN A 202.99.11.120
mail IN A 202.99.11.120
ns IN A 202.99.11.120
ftp IN A 202.99.11.120
該文件是linuxaid.com.cn的域數據信息文件,其中定義了各種服務器的IP vs 域名的對應信息。其中:
@ IN A 202.99.11.120
一行定義域名linuxaid.com.cn對應的IP地址為201.99.11.120,當對linuxaid.com.cn進行通常的域名解析(這里指不是進行MX—郵件網關域名解析)時將會返回IP地址202.99.11.120的應答。
第四步:
創建/var/named目錄下的名為longshine.com.cn文件內容如下:
@ IN SOA ns. longshine.com.cn. root. longshine.com.cn. (
2000080701 ; serial
28800 ; refresh
7200 ; retry
604800 ; expire
86400 ; default_ttl
)
@ IN A 202.99.12.120
@ IN NS ns. longshine.com.cn.
@ IN MX 10 longshine.com.cn.
localhost IN A 127.0.0.1
www IN A 202.99.12.120
mail IN A 202.99.12.120
ns IN A 202.99.12.120
ftp IN A 202.99.12.120
該文件是longshine.com.cn的域數據信息文件,其中定義了各種服務器的IP vs 域名的對應信息。
第五步:
創建/var/named目錄下的名為named.local的文件內容如下:
@ IN SOA localhost. root.localhost. (
1997022700 ; serial
28800 ; refresh
14400 ; retry
3600000 ; expire
86400 ; default_ttl
)
@ IN NS localhost.
1 IN PTR localhost.
該文件定義了本地回路的域名反向解析信息。
第五步:
創建/var/named目錄下的名為11.99.202的文件,內容如下:
@ IN SOA ns.linuxaid.com.cn. root.linuxaid.com.cn. (
2000080501 ; serial
28800 ; refresh
7200 ; retry
604800 ; expire
86400 ; default_ttl
)
@ IN NS ns.linuxaid.com.cn.
;
; SERVER SECTION
;
120 IN PTR .
120 IN PTR mail.linuxaid.com.cn.
120 IN PTR ns.linuxaid.com.cn.
120 IN PTR .
該文件定義了202.99.11網絡的域名反向解析信息。
第六步:
創建/var/named目錄下的名為12.99.202的文件內容如下:
@ IN SOA ns.longshine.com.cn. root.longshine.com.cn. (
2000080501 ; serial
28800 ; refresh
7200 ; retry
604800 ; expire
86400 ; default_ttl
)
@ IN NS ns.longshine.com.cn.
;
; SERVER SECTION
;
120 IN PTR .
120 IN PTR mail.longshine.com.cn.
120 IN PTR ns.longshine.com.cn.
120 IN PTR .
該文件定義了202.99.12網絡的域名反向解析信息。
啟動
啟動dns服務器可以使用命令:ndc start,若輸出結果為”new pid is 2317”,若輸出錯誤,則需要查看上面的配置文件是否正確設置。這時,使用命令”ps ax|grep named” 應該輸出:
2317 ? S 0:00 /usr/sbin/named
2319 pts/0 S 0:00 grep named
停止dns服務器進程的命令為:ndc stop。
也可以使用命令/etc/rc.d/init.d/named start|stop來啟動或關閉某個服務。
若需要在啟動時自動啟動DNS服務器,則使用命令:
/sbin/chkconfig –level 35 named on
若需要關閉自動啟動DNS服務器,則使用命令:
/sbin/chkconfig –level 35 named off
測試:
啟動DNS服務器以后,使用命令nslookup命令進行測試:
[root@www /]nslookup
Default Server: ns.linuxaid.com.cn
Address: 202.99.11.120
>www
Server: ns.linuxaid.com.cn
Address: 202.99.11.120
Name:
Address: 202.99.11.120
>set q=mx
>linuxaid.com.cn
> set q=mx
> plagh.com.cn
Server: ns.linuxaid.com.cn
Address: 202.99.11.120
linuxaid.com.cn preference = 10, mail exchanger = mail. linuxaid.com.cn
linuxaid.com.cn nameserver = ns linuxaid.com.cn
mail. linuxaid.com.cn internet address =202.99.11.120
ns. linuxaid.com.cn internet address =202.99.11.120
>exit
若測試結果和上面的一樣,則說明DNS服務安裝成功。
19.2 設置FTP服務器
只要成功地以服務器模式安裝了redhat,ftp服務器就應該已經正常的在運行了,在本機,使用命令測試:
ftp localhost
若顯示連接成功,則說明ftp服務器已經成功安裝并且運行正常。若連接時顯示:
ftp: connect: Connection refused
ftp>
則說明ftp服務沒有開放,則需要編輯/etc/inetd.conf文件,確保有如下的內容:
ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l –a
相反的,若希望關閉ftp服務器,則需要在上面一行的內容前面添加#,將其注釋掉,然后查找inetd進程的進程號,
ps ax|grep inetd
353 ? S 0:00 inetd
作說明inetd的進程號為353,然后kill –HUP 353,就可以關閉ftp服務器了。
下面討論這樣一種情況,現在有一個目錄為/www/htdocs/developer,希望用戶user1能讀寫該目錄,但是其不能telnet進入系統,而user1的主目錄為/home/user1。這種需求主要是滿足多個管理員對網站的不同部分進行管理,但是又不允許其通過telnet服務登錄網站,只允許其將內容ftp到網站上。這就需要添加一個組,這里隨便定義為developer組:
/usr/sbin/groupadd developer
然后將user1添加到該組內:
/usr/sbin/usermod –G developer user1
然后修改/www/htdocs/developer屬于developer組:
chgrp –R developer /www/htdocs/developer
最后,設置該目錄為developer完全控制:
chmod -R 775 /www/htdocs/developer
這樣/www/htdocs/developer就屬于developer組所有,并且完全可以由屬于developer組的用戶控制。
19.3 安裝設置mysql服務器
需要從下載最新版本,目前最新版本是3.23。這里主要討論以二進制包的方式安裝Mysql。
首先從mysql主頁下載mysql-3.23.24-beta-pc-linux-gnu-i686.tar.gz到/usr/src目錄下,然后運行命令:
[root@www /]# tar xvfz mysql-3.23.24-beta-pc-linux-gnu-i686.tar.gz
解壓發布,然后使用命令”cd mysql-3.23.24-beta”進入mysql的目錄,運行:
[root@www /]# ./scripts/mysql_install_db
就會實現mysql的缺省安裝,缺省是安裝在/usr/local/mysql目錄下,該目錄下包含了mysql的所有的lib庫,可執行文件等等。
下面使用mysql的客戶端來測試mysql是否正常:
[root@www /]# mysql –u root
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 61 to server version: 3.23.22-beta
Type \@#help\@# for help.
mysql>
缺省安裝情況下mysql有一個root用戶(注和系統的root用戶沒有直接關系),該數據庫用戶具有對整個庫的讀寫權限,而且root用戶是沒有任何密碼的,所以首先需要為該用戶添加密碼,。在mysql提示符下輸入如下SQL語句:
\@#UPDATE user SET Password = PASSWORD (\@#yourpassword\@#)\@#
\@#WHERE user = \@#root\@#;\@#
\@#FLUSH PRIVILEGES;\@#
這樣,就實現了對root用戶增加密碼的任務,現在使用quit命令退出mysql,然后重新連接mysql服務器就需要指定密碼信息:
[root@www /]# mysql –u root –pyourpasswd
然后才能連接mysql服務器。
但是一般都推薦添加一個非root的而具有root的所有權限的數據庫用戶,因此使用下面的SQL語句實現添加一個具有root權限的名為ideal的用戶:
\@#INSERT INTO users\@#
\@#VALUES (\@#localhost\@#,\@#ideal\@#,\@#idealsppasswd\@#,\@#y\@#,\@#y\@#,\@#y\@#,\@#y\@#,\@#y\@#,\@#y\@#,\@#y\@#,\@#y\@#,\@#y\@#,\@#y\@#,\@#y\@#,\@#y\@#,\@#y\@#,\@#y\@#);\@#
這樣,你就完成了在本系統上安裝Mysql服務器的任務,具體的權限設置及如何建庫、如何建表、如何訪問庫數據,請參考mysql的手冊,里面有非常詳盡的使用幫助。
19.4設置www服務器
以服務器模式安裝redhat以后,系統缺省地就已經安裝了apach服務器,使用命令:
ps ax+grep httpd
來查看系統的apache服務器是否正在運行,若已經正在運行了,從另外一臺windows機器上,在瀏覽器中輸入www服務器的IP地址就會訪問到apache的缺省主頁。若apache沒有啟動,則需要使用命令:
/etc/rc.d/init.d/httpd start
來啟動apache服務器,若服務器成功啟動,然后再從windows機器上使用瀏覽器進行測試,一般來講只要成功按服務器模式安裝了Redhat,一般apache就能啟動運行的,若不能啟動運行,最常見的毛病是apache服務器的httpd.conf中本機的名字沒有正確設置,這時候需要編輯/etc/httpd/conf/httpd.conf中ServerName一行的內容,對于本機具有正式域名的服務器,這里設置ServerName為服務器域名,以為例:
ServerName
若服務器沒有正式域名,則在這里指定ServerName為本機IP地址。然后再啟動apache服務器。
若希望在機器啟動時自動啟動www服務器,則需要使用以下命令:
[root@www /]# /usr/sbin/chkconfig –level 35 httpd on
若希望在啟動時不啟動www服務器,則使用命令:
[root@www /]# /usr/sbin/chkconfig –level 35 httpd off
若希望在本機上創建多個,這里假設linuxaid需要設置兩個:和forum.linuxaid.com.cn。由于只能分配一個IP地址,所以這里采用基于域名的多虛擬域名服務器。編輯/etc/httpd/httpd.conf,添加下面的內容:
NameVirtualHost 210.12.114.130
ServerAdmin
DocumentRoot /home/httpd/www.linuxaid.com.cn
ServerName
ErrorLog /var/log/httpd/www.linuxaid.com.cn/error.log
ServerAdmin
DocumentRoot /home/httpd/forum.linuxaid.com.cn
ServerName forum.linuxaid.com.cn
ErrorLog /var/log/httpd/forum.linuxaid.com.cn/error.log
然后分別在/home/httpd/創建名字為和forum.linuxaid.com.cn的目錄,分別將兩個www服務器的html頁面拷貝到各自的目錄下。然后在/var/log/httpd/創建名字為和forum.linuxaid.com.cn的目錄,然后分別在這兩個目錄下創建文件error.log:
touch error.log
然后重新啟動apche服務器:
/etc/rc.d/init.d/httpd restart
然后從網絡上就可以測試虛擬服務器的可達性。
對于大規模應用的web服務器,則需要調整其運行參數以使其能處理更多的服務請求。這就需要調整配置文件/etc/httpd/conf/httpd.conf中下面兩個參數:
MinSpareServers 5
MaxSpareServers 20
StartServers 8
MaxClients 150
這幾個參數的含義分別為:
系統中最少有MinSpareServers個www服務器空閑進程等待服務請求。
系統中最少有MaxSpareServers個www服務器空閑進程等待服務請求。
系統啟動以后,初始有StartServers個www服務器進程等待服務請求。
最大同時有有MaxClients個www服務器進程。
管理員應該根據自己系統的負載情況,設置這些參數。
19.4設置sendmail服務器
當前linux的各個發布都將sendmail作為缺省地郵件服務器軟件,所以這里主要討論在redhat6.2環境下如何將sendmail郵件服務器軟件運行起來,實現正常的郵件收發。
編輯/etc/sendmail.cw文件,添加本機的域名到該文件中,這里以linuxaid.com.cn為例:
linuxaid.com.cn
mail.linuxaid.com.cn
然后重新啟動sendmail郵件服務器:
/etc/rc.d/init.d/sendmail restart
然后測試郵件服務器,使用mail程序:
[lix@mail /etc]# mail
這里你應該將設置為你自己的外部郵箱。然后看能否收到,只要缺省安裝了sendmail,正確地修改了/etc/sendmail.cw文件,就肯定可以接收到信件,收到信件以后可以回復給發送者,然后再使用mail程序接收信件,若接收成功就表示 sendmail初步接收成功,更復雜的設置可以參考具體章節。
若需要在啟動時自動啟動SENDMAIL服務器,則使用命令:
/sbin/chkconfig –level 35 sendmail on
若需要關閉自動啟動SENDMAIL服務器,則使用命令:
/sbin/chkconfig –level 35 sendmail off
下面討論兩個比較典型的需求:
一種是若本機器有兩個域名:test1.com和test2.com,這里設定test1.com為主域名,于是當為系統添加一個系統帳號man1,則帳號man則會具有,但是也許管理員會希望man在test1.com和test2.com兩個域上都有郵箱,而且是同一個信箱,也就是說,當我向和發送郵件,man都可以從信箱收到。要實現這種設置,需要編輯文件/etc/mail/virtuusertable文件,添加如下內容:
man
然后運行make,重新啟動sendmail:
/etc/rc.d/sendmail restart
就可以實現這個效果。
第二種情況是,希望設置一個別名信箱,也就是希望發往的所有的信件都實際上發給了用戶,而且實際上并沒有添加webmaster這個郵件帳號,它只是的一個別名。編輯/etc/alliases文件,添加如下內容:
webmaster: man
然后運行命令/usr/bin/ newaliases,重新啟動sendmail服務器:/etc/rc.d/init.d/sendmail restart就可以了。