2012-10-22

Linux出現Read-Only,沒辦法寫檔案時,重新mount root目錄(/)或許可以解決

Linux出現Read-Only,沒辦法寫檔案時,重新mount root目錄(/)或許可以解決


開機時若出現,以下訊息
=================================
Give root password for maintenance
(or type Control-D to continue):
=================================

可以重新mount / 看看是否可以解決!
$ mount -o remount,rw /


fsck 檢查

Linux出現Read-Only,沒辦法寫檔案時,可用fsck檢查

Linux出現Read-Only


# fsck -y -A -f
參數說明:
A: 依據/etc/fstab 的設定,檢查所有檔案系統的完整性。
a: 自動修復檔案系統。
y: 在修復時,fsck可能會詢問您是否要採取某一個動作。-y是用來告訴fsck不用再問了,直接yes。
f: 即使檔案系統的狀態是乾淨的,也要強制檢查檔案系統。

Liunx如何強制踢掉使用者!

 Liunx如何強制踢掉使用者!


有root權限時,使用以下指令:
# w
------------------------------------------------------------------------------------
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.1.1 12:30 0.00s 0.00s 0.00s w
user1 pts/1 192.168.1.1 12:30 0.00s 0.00s 0.00s ls -al
------------------------------------------------------------------------------------

# pkill -kill -t pts/1
就可以把user1給踢掉。

Linux磁區分割與格式化

Linux磁區分割與格式化


1. # fdisk /dev/sda
(磁區分割)


2. # mkfs.xfs /dev/sda1
(格式化為xfs)
但mkfs.xfs需要自行安裝格式化工具,mkfs.ext3則否。


3. # mount /dev/sda1 /mnt
(把sda1掛載到mnt目錄下)


4. # mount
(看掛載是否成功為xfs)

Linux下如何觀看partition的Raid level!

Linux下如何觀看partition的Raid level!


方法一:

# cat /proc/mdstat
----------------------------------------------------

Personalities : [raid6] [raid5] [raid4]
md0 : active raid6 sdi[7] sdh[6] sdg[5] sdf[4] sde[3] sdd[2] sdc[1] sdb[0]
11721086976 blocks level 6, 64k chunk, algorithm 2 [8/8] [UUUUUUUU]

unused devices: <none>

----------------------------------------------------



方法二:
 
# mdadm --detail /dev/md0

----------------------------------------------------

/dev/md0:
Version : 0.90
Creation Time : Thu Mar 1 16:02:23 2012
Raid Level : raid6
Array Size : 11721086976 (11178.10 GiB 12002.39 GB)
Used Dev Size : 1953514496 (1863.02 GiB 2000.40 GB)
Raid Devices : 8
Total Devices : 8
Preferred Minor : 0
Persistence : Superblock is persistent

Update Time : Sat Mar 3 14:55:36 2012
State : active
Active Devices : 8
Working Devices : 8
Failed Devices : 0
Spare Devices : 0

Chunk Size : 64K

UUID : e284e7b9:99c901d0:f70f6018:f966ca9f
Events : 0.3

Number Major Minor RaidDevice State
0 8 16 0 active sync /dev/sdb
1 8 32 1 active sync /dev/sdc
2 8 48 2 active sync /dev/sdd
3 8 64 3 active sync /dev/sde
4 8 80 4 active sync /dev/sdf
5 8 96 5 active sync /dev/sdg
6 8 112 6 active sync /dev/sdh
7 8 128 7 active sync /dev/sdi

----------------------------------------------------

Linux下,找出command(指令)所在位置

Linux下,找出command(指令)所在位置


若要找出ls指令的實際存放位置,可以下which指令來取得,如下:

# which ls
alias ls='ls --color=auto'
/bin/ls


那我們就可以知道ls是存放在/bin目錄下。

wget可以用來抓網頁的html原始檔(source code)

wget可以用來抓網頁的html原始檔(source code)


# wget http://192.168.100.100/test.txt
(下載test.txt)

# wget -q http://192.168.100.100/test.txt
(下載test.txt,而不顯示任何訊息)

# wget -q http://192.168.100.100/test.txt
(下載test.txt,而不顯示任何訊息)

# wget -O test123.txt http://192.168.100.100/test.txt
(下載test.txt,但output至檔案test123.txt)

# wget -qO - http://192.168.100.100/test.txt
(顯示test.txt檔案內容在螢幕上)

另一例:
# wget -qO - http://192.168.100.100/index.html
(顯示index.html程式碼內容在螢幕上)

grep 指令範例

grep 指令:


$ grep -A 3 "model name" /proc/cpuinfo

抓出model name的這一列,並顯示它下面的其他三列

Linux掛載Windows的網路芳鄰(cifs)

# mkdir /mnt/cifs

# mount.cifs //192.168.1.1/file_dir /mnt/cifs -o username='myUsername',password='myPassword',codepage=cp950
(此指令為掛載)

or

# mount -t cifs //192.168.1.1/file_dir /mnt/cifs -o username='myUsername',password='myPassword',codepage=cp950
(此指令也是掛載)


# umount /mnt/cifs
(此為取消掛載)

debian安裝手記

debian安裝手記
 

這是我第一次安裝debian系統,為免日後再裝時裝不起來,故安裝過程中勤作筆記記錄於此。第一次安裝過程花了好幾個禮拜,第二次安裝有了這份筆記後一兩天內就裝起來了,本文使用 debian 4.0 R4a 系統安裝,若你使用的版本與我相同,那就絕不會有安裝設定上的差異。

內容簡介:使用 debian 4.0 R4a i386版安裝,設定內容含:1.debian、2.ssh、3.vim、4.環境設定、5.設定語系、6.samba、7.改固定IP、8.apache、9.awstats、10.mysql、11.phpmyadmin、12.vsftp、13.加帳號、 14.iptables、15.ADSL、16.域名更新、17.mrtg、18,cacti、19.apache 目錄加密碼保護、20.NAT、21.DHCP、22.apache 加掛cache和proxy功能、23.IP 更換記錄、24.rsync、25.DNS 設定、26.檢查硬碟壞軌、27.系統備援、28.斷線重連、29.apache 啟用ssl連線、30.NFS 設定、31.網路校時、32.安裝公鑰、33.監控網路流量、34.Xshell、35.apache 頻寬限制、36.解 rar檔、37.mysql 問題、38.傳真伺服器、39.列印伺服器、40.關閉服務。




vim 的用法請參照鳥哥的教學 vi文書處理,vim為vi的進化版,所以操作方法上大同小異。

以下內容,紅字部份皆為指令或是您需要修改的內容,藍字部份則為設定檔內容。


1.安裝設定
安裝 debian 4.0 R4a 版
(下載點 <=== 請選擇 debian-40r4a-i386-CD-1.iso 下載燒成光碟即可,它會隨著版本更新而移掉舊版本)

安裝過程中在選擇軟體時,只要選擇「web網頁伺服器、標準系統」這兩項即可
別安裝SQL伺服器,那是PostgreSQL,不是我們要的MySQL
也別安裝檔案伺服器,那不是vsftpd

底下是我的硬碟分割參考
/dev/sda1 /boot 100mb (EXT3格式)
/dev/sda5 swap 1.5G
/dev/sda6 /tmp 650mb (XFS格式)
/dev/sda7 / 157.8G (XFS格式)

設定時間,日期
date -s 2008/06/06 <===改日期
date -s 08:55:30 <===改時間
先改日期,再改時分秒。
 


安裝指令
apt-get install -y ssh
 

改ssh 的 port 位
vim /etc/ssh/sshd_config

底下是 sshd_config 內容介紹

Port 22 (←改這兒)
在安全上的考量 通常會把port 改成我們想要的port

底下選項請先尋找有沒有這行,沒有的話,再自行加入此行,避免同一個選項在不同地方做了不同設定,會使你怎麼設都不成功

PermitRootLogin=no
↑permitRootLogin 改成NO 意思是指 讓人家不能利用root的身分用ssh登入 因為root權限很大

LoginGraceTime 30 

#密碼輸入時限為 30 秒
 

TCPKeepAlive yes
#↑確定使用者是否仍在線,在測得無回應後馬上切斷連線。


底下幾行可能沒有,要自行增加


Allowusers user1 user2
# ↑此仍設定只允許哪些帳號登入,若要開放很多人登入,只有少數不行登入,使用以下設法
 

#DenyUsers 使用者1 使用者2
 

#DenyGroups 群組名
 

MaxAuthTries 5
#最多只能輸入 6 次密碼


#廢除密碼登錄, 強迫使用 RSA 驗證
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication no


限制某 IP ssh 連線進來(配合 tcp wrapper來使用)
vim /etc/hosts.allow

#只允許底下這2個IP用ssh連入
sshd:140.128.1.123 192.168.0.150


vim /etc/hosts.deny
#擋掉所有的ssh連線(除了我在 hosts.allow裡開放的IP)
sshd:all

這樣一來,只有 140.128.1.123 和 192.168.0.150 這2個 IP 才可以用 ssh 連上來了。


ssh 安全設定參考資料ssh限制IP
ssh免密碼登入設定: 教學1教學2
ssh 安全設定參考(英文)

debina 或 ubuntu 所附的 vim 為精簡版的,所以不能顯示顏色,需安裝完整版
apt-get install -y vim
 

然後編輯vim 的設定檔
vim /etc/vim/vimrc
"syntax on
"set background=dark
↑把前面的"號拿掉
 

set ignorecase
"↑設定搜尋時英文不分大小寫
 

set hlsearch
"↑將搜尋到的字加hilight
 

highlight Search term=reverse ctermbg=4 ctermfg=7
"↑將搜尋到的字由土黃色變成深藍色

 

vim /etc/profile (寫在這裡是對所有的使用者生效)
在最後加上以下內容(主要是改提示符號、設定別名和中文語系輸出)
---------------------profile內容------------------------------------------ -
 

# Some more alias to avoid making mistakes:
alias rm='rm -iv'
alias del='rm -iv'
alias cp='cp -iv'
alias mv='mv -iv'

# Added aliases
alias cls='clear'
alias ls='ls --color=auto -F'
alias dir='ls -alh --color=auto -F'
alias ll='ls -alh --color=auto -F'
#alias ftp="ncftp"
#alias lo="exit"
alias md="mkdir"
alias rd="rmdir"

# Added for Chinese supported
#export LC_ALL=zh_TW.Big5
#export LANG=zh_TW.Big5

#建議設成 UTF8
export LC_ALL=zh_TW.UTF-8
export LANG=zh_TW.UTF-8

 

---------------------profile內容------------------------------------------ -

若要讓 root 也能看到中文的介面訊息
vim /root/.profile
將底下這兩行前面標註起來
#LANG=C
#LANGUAGE=C
 

指令:
dpkg-reconfigure locales

這樣會跳出一個文字選單,裡面記得至少要選擇
en_US.UTF-8 UTF-8
zh_CN.GBK GBK
zh_CN.GB2312
zh_CN.UTF-8 UTF-8
zh_TW BIG5
zh_TW.UTF-8 UTF-8
(用空白鍵選擇、Tab 鍵切換到 OK、Default Locale 建議選 zh_TW.UTF-8 UTF-8)。

設完後重開機,便能顯現中文
 


6.samba 設定
安裝
apt-get install -y samba
 

設定檔
vim /etc/samba/smb.conf
 

smb.conf 設定檔參考
↑此設定檔可直接copy使用,需修改的地方有...(特別註意紅字地方)
 

---------------smb.conf內容--------------------
 

interfaces = eth0, lo
#↑網卡請一定要設定正確,否則smb無法啟動,若你不是eth0 而是 eth1 請改正確
 

[share]
path
/mnt/share
#請改成你要分享的路徑
 

recycle:repository = /mnt/trashbox
#網路資源回收筒的路徑,請改成你的設定

[recycle]
path =
/mnt/trashbox
#這裡即是設定回收筒的路徑,在 share 分享資料夾內刪除的檔案都會丟到這裡來,故請你自己定期刪除裡面的東西吧
 

---------------smb.conf內容--------------------
欲分享其它資料夾,請參照其內容設定吧

相關指令:
/etc/init.d/samba reload|restart|start

檢查 smb.conf 語法是否正確,指令 testparm

看samba狀態
↓此指令在debian版不能用,須改用 smbstatus 指令
/etc/init.d/samba status


smbclient -L ip 列出分享資料夾

註:samba裝完後,必須自己手動下指令加每個帳號才能使用
webmin 裡帳號同步的功能似乎不能使用

加個虛擬帳號 guest
vim /etc/passwd
 

#↓加入此行
guest:x:1001:100:guest:/etc/samba:/bin/false

加帳號到samba裡
smbpasswd -a guest
#之後連按兩個enter,密碼設為空白

若要加其它帳號,請下指令
smbpasswd -a username
 

改密碼
smbpasswd username  



7. 固定ip後
vim /etc/network/interfaces
-------------interfaces內容-----------------
 

auto lo
iface lo inet loopback
#auto eth0
#iface eth0 inet dhcp
auto eth0
iface eth0 inet static
address 192.168.0.1
network 192.168.0.0
netmask 255.255.255.0
broadcast 192.168.0.255
gateway 192.168.0.254

-------------interfaces內容-----------------


設定DNS
若未設定DNS,就只能以IP的方式連線,不能使用熟知的Domain Name如 forum.liferec.com 連線,相當不方便。

 
修改 /etc/resolv.conf 檔案內容:
#168.95.1.1是HiNet提供的DNS,這是HiNet最大方的地方,並不限制HiNet的客戶才能使用。

 
nameserver 168.95.1.1

單網卡多個 IP 設定 (直接在網卡後,加上 “:n“)
 

------------------------------------------
 

auto eth0
iface eth0 inet static
address 192.168.0.1
network 192.168.0.0
netmask 255.255.255.0
broadcast 192.168.0.255
gateway 192.168.0.254
dns-nameservers 168.95.1.1

auto eth0:0
iface eth0:0 inet static
address 192.168.0.50
network 192.168.0.0
netmask 255.255.255.0
gateway 192.168.0.254

auto eth0:1
iface eth0:1 inet static
address 192.168.0.49
network 192.168.0.0
netmask 255.255.255.0
gateway 192.168.0.254

auto eth0:2
iface eth0:2 inet static
address 192.168.0.48
network 192.168.0.0
netmask 255.255.255.0
gateway 192.168.0.254

auto eth0:3
iface eth0:3 inet static
address 192.168.0.47
network 192.168.0.0
netmask 255.255.255.0
gateway 192.168.0.254

auto eth0:4
iface eth0:4 inet static
address 192.168.0.46
network 192.168.0.0
netmask 255.255.255.0
gateway 192.168.0.254

 

------------------------------------------

●將硬碟移機後,網卡 eth0 或 eth1 不見了?

首先用 ifocnfig -a 看你的系統內有幾張網卡,記下該網卡的 mac address
編輯以下檔案

vim /etc/udev/rules.d/z25_persistent-net.rules
(有可能不是一模一樣的檔名↑,它也有可能是 70-persistent-net.rules 這樣的檔名,只要記住關鍵字 net 去試試即可)

------------------------該檔大概內容如下----------------------------

# PCI device 0x14e4:0x1659 (tg3)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:1a:92:19:63:ab", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

# PCI device 0x14e4:0x1659 (tg3)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:1a:92:19:63:ac", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"

 

----------------------------------------------------------------------

此檔內你會看見有一堆 SUBSYSTEM =="net",.......NAME="ethX"
此處的 "ethX" 那個 X 數字可能是任意數
找到你實際網卡所對映的 mac address
例如,我的機器上所找到的該網卡,被編到 eth5 去了
SUBSYSTEM =="net",.......NAME="eth5"
將此 eth5 改成 eth0 之後,其它沒用的網卡編號全刪掉或 mark 起來,重開機即ok



8.apache設定
編輯設定檔內容
vim /etc/apache2/apache2.conf
 

apache2.conf <===設定檔參考
此設定檔,設了80~84port的虛擬站台,和 awstats、server-info、server-status
若無特殊需求,你可copy全部內容貼上 apache2.conf,就可以用了。

啟動、停止、重啟 apache 等指令
/etc/init.d/apache2 start | stop | restart

apache 設定檔測試指令 (apache 設定檔的語法若寫錯,會使apache無法啟動,可用此指令測試)
apache2ctl configtest

/etc/rc.d/init.d/httpd start | stop | restart
↑以上是在Fedora Core3的指令,debian不適用

開機就啟動的設定在
/etc/default/apache2
預設是開機啟動 (NO_START=0),不想開機啟動請改成 1

debian 裝好的 apache 版本為 2.2.3-4+etch5

apache2.conf說明與註意事項:


(1).不是使用傳統的 httpd.conf 而以 /etc/apache2/apache2.conf 取代之。
 

(2).Listen 80 port位的設定也不同於一般版本的設定
在apache2.conf 此檔內有一行 Include /etc/apache2/ports.conf
vim /etc/apache2/ports.conf 加入你要監聽的port 位
 

(3).VirtualHost設定,以往在win32平台上,我只設了這行
NameVirtualHost *:80
↑而其它port的服務81,82,83,84的服務就可正常運行
 

但現在卻要如此設定↓
NameVirtualHost *:80
NameVirtualHost *:81
NameVirtualHost *:82
NameVirtualHost *:83
NameVirtualHost *:84
其它port的服務81,82,83,84的服務才可正常運行
 

(4).改了預設的使用者與群組
User www
Group users
然後在 passwd 內新增此一帳號
vim /etc/passwd #加入底下這行,106數字請勿重覆
www:x:106:100:www:/var/www:/bin/false

註:此設定是便於users群組共用與管理,此設定會影嚮日後安裝與apache相關軟體的設定,如cacti,mrtg,你在這兒改了群組,在安裝這兩樣東西時,就要多道手續去改群組,否則cacti,mrtg等無法正常運作,本文會提及它們的設定。

apache log檔的設定↓
vim /etc/logrotate.d/apache2
此檔內,設定每週替換一次log檔,保留30個,預設輪替後是有壓縮的
※壓縮後的log檔是不能能讓awstats正常分析,故需將 compress 字眼的選項的設定刪去

欲看 apache 狀態,apache2.conf 大約在684~713行這兒
啟用該功能,把每行前面的#拿掉後,重啟apache即可
 

<IfModule mod_status.c>
<IfModule mod_info.c>

http://IP/server-info
http://IP/server-status


apache 系統裝起來後,即內含 php 功能,不需另外安裝,現暫且記下php安裝指令,待日後備用
apt-get install libapache2-mod-php5 php5-cli php5-common php5-cgi 



9.apache 內的 awstats 設定

awstats是一詳實的apache log檔分析程式,分析你網站的流量等相關記錄,多國語言版

安裝方法分兩種,一種是使用 debian 包好的安裝包,這會比較簡單容易,另一種安裝方法是到 awstats 的官網去下載主程式回來安裝。
底下就先介紹到 awstats 官網下載主程式回來安裝的方法。


安裝方法1:官網安裝

a.安裝指令
wget http://prdownloads.sourceforge.net/awstats/awstats-6.8.tar.gz
tar zxvf awstats-6.8.tar.gz
mv awstats-6.8 awstats
↑將目錄名稱改成好看些

b.然後把 awstats 搬到你要放的路徑去,本文的設定範例是放在 /var/www/84/awstats
mv awstats /var/www/84/awstats
ps:鳥哥說 awstats/wwwroot 這目錄需要建密碼保護 .htaccess,待設定

c.使用 awstats_configure.pl 重新設定路徑
需在此路徑 /var/www/84/awstats 底下執行這指令,它才不會抓錯路徑
cd /var/www/84/awstats
/var/www/84/awstats/tools/awstats_configure.pl


-----------------↓awstats_configure.pl 設定內容↓-----------------------
 

Warning: AWStats standard directory on Linux OS is '/usr/local/awstats'
.......
Do you want to continue setup from this NON standard directory [yN] ?
這兩行是問你 awstats 不是安裝在標準的路徑,問你是否繼續,請按y 之後enter

Enter full config file path of your Web server.
請輸入你的apache 設定檔的完整路徑
/etc/apache2/apache2.conf
↑若你跟我用一樣的版本,請輸入上面的路徑

Do you want me to build a new AWStats config/profile
file (required if first install) [y/N] ? y
問你要不要開始建立網站分析的設定檔,y 啦!

Your web site, virtual server or profile name:
輸入你站台的名字,例如 www.xxx.com 之類的,我取名為 80port,別自找麻煩用中文命名呀!

Directory path to store config file(s) (Enter for default):
問你awstats的設定檔要存放在哪,按 enter 用預設的就行了。
它會放在 /etc/awstats 底下

接下來還會有些文字提示,按兩次 enter 就可以了。
 

-----------------↑awstats_configure.pl 設定內容↑-----------------------

設定完後,它會在/etc/awstats/ 底下產生一些檔案
awstats.你站台的名字.conf

若有設虛擬站台的,請自行增加,或是重跑一次 awstats_configure.pl

cp /etc/awstats/awstats.80port.conf /etc/awstats/awstats.81port.conf
cp /etc/awstats/awstats.80port.conf /etc/awstats/awstats.82port.conf
cp /etc/awstats/awstats.80port.conf /etc/awstats/awstats.83port.conf

d.修改awstats.xxxxx.conf的內容
vim /etc/awstats/awstats.你站台的名字.conf
vim /etc/awstats/awstats.80port.conf
...
....若有設虛擬站台的,請自行增加編輯
vim /etc/awstats/awstats.83port.conf
vim /etc/awstats/awstats.84port.conf
 

找出這行,把log檔指到正確的路徑
LogFile="
※此log檔路徑乃對應著你 apache2.conf 內的log檔名稱設定,所以底下內容不要照抄,依你的設定填入

LogFile="/var/www/84/awstats/tools/logresolvemerge.pl /var/log/apache2/80port_access*.*|"
#↑此為80port多個log檔設法
LogFile="/var/www/84/awstats/tools/logresolvemerge.pl /var/log/apache2/84port_access*.*|"

 

底下設定需檢查,若不同,請改成與下面相同
DirData="/var/www/84/awstats/wwwroot/cgi-bin"
DirIcons="/awstatsicons"

EnableLockForUpdate=1
#這是指AWStats進行更新時是否鎖定檔案,避免有兩人以上同時從web更新而引起故障,log檔出錯可能會使apache起不來。
 

PurgeLogFile=1
#awstats分析後,是否自動刪除 apache 的 log 檔,此功能挺好用的,但我尚未測試過。


查看awstats的網址
http://IP/awstats/awstats.pl?config=80port
 

e.更新awstats的log檔

請下指令
/var/www/84/awstats/wwwroot/cgi-bin/awstats.pl -update -config=80port
#↑此為更新我80port log


/var/www/84/awstats/wwwroot/cgi-bin/awstats.pl -update -config=你站台的名字
#↑此為更新你另名取的站台名字的 log

f.設定定期更新 awstats
要寫在crontab內的更新指令不太一樣
vim /etc/crontab


加入底下這行
/var/www/84/awstats/tools/awstats_updateall.pl now -awstatsprog=/var/www/84/awstats/wwwroot/cgi-bin/awstats.pl
#↑此為更新awstats所有的log檔指令,請寫在 crontab 檔內


註意:此寫法只是簡單更新 awstats的寫法,但日後會有apache log 越來越大的問題,所以我們要一併解決這兩個問題

故我寫了個 script 名為 apache_log_rotate.sh 內容為分析log後刪除,並重啟apache
vim /home/backup/apache_log_rotate.sh


ps:若你的 home底下若沒有backup這目錄,請先建一個目錄吧,否則會出錯 mkdir /home/backup
貼上以下內容
 

----------------------apache_log_rotate.sh 內容--------------------------------
 

#!/bin/bash
#apache log 經 awstats 分析後,刪除
 

/var/www/84/AWStats/tools/awstats_updateall.pl now -awstatsprog=/var/www/84/AWStats/wwwroot/cgi-bin/awstats.pl
#更新所有web log for awstats
 

/etc/init.d/apache2 stop
#停止 apache2
 

rm -f /var/log/apache2/8?port_access.*
rm -f /var/log/apache2/8?port_error.*
rm -f /var/log/apache2/error.*
#刪除已被 awstats 分析過後的 log 檔cd
 

#/etc/init.d/apache2 start
/etc/init.d/apache2 restart
#重啟 apache 服務,自動產生新的log檔,啟動2次是避免啟動失敗
 

date >>/tmp/log_rotate.txt
echo "apache log 分析與輪替完成" >>/tmp/log_rotate.txt

 

----------------------apache_log_rotate.sh 內容--------------------------------
 

改成可執行權限
chmod 775 /home/backup/apache_log_rotate.sh

編輯 crontab 內容設定 apache_log_rotate.sh 於每週1上午4時10分執行
並於 /tmp/log_rotate.txt 內設定記錄,待觀察是否有正常執行

vim /etc/crontab 加入底下這兩行
10 4 * * 1 root /home/backup/apache_log_rotate.sh > /dev/null 2>&1
#↑ apache log 分析,並清除,於每週1上午4時10分執行


安裝方法2:deb包安裝
請下指令安裝
aptitude install awstats
 

裝完之後,它的設定檔會在此 /etc/awstats/
複製一份 awstats.conf 然後修改其內容
cp /etc/awstats/awstats.conf /etc/awstats.你的站台.conf
vim /etc/awstats.你的站台.conf
底下為需要修改的內容,請找到相對位置更改成適合你的設定
 

------------------awstats.你的站台.conf-------------------
 

LogFile="/var/log/apache2/access.log"
LogFormat=1
#↑這地方的LogFormat與你的 apache 設定有關 combined
 

SiteDomain="你的站台"
DirData="/var/lib/awstats"
#此即放awstats分析後資料的地方
 

AllowToUpdateStatsFromBrowser=0
#是否允許從網頁更新log檔
EnableLockForUpdate=0
#awstats 更新時是否要鎖住log檔不讓寫入,這是為避免 awstats在更新資料時,log還有人寫入而造成log檔損壞,主要是為了避免從有2人同時從網頁更新。
 

PurgeLogFile=1
#awstats更新完後,自動幫你清log檔
 

ArchiveLogRecords=0
#awstats 清掉的log需不需要幫你備份,可設日期變數,但無法指定路徑
 

SkipHosts="127.0.0.1 REGEX[^192\.168\.] REGEX[^10\.]"
#略過內網的流量不計算
 

------------------awstats.你的站台.conf-------------------
 

mv /etc/awstats/awstats.conf /etc/awstats/awstats.conf.bak
這樣awstats在計算時,就不會把預設的設定檔的內容給吃進去

寫到這兒才發現 debian 的安裝包裡,並不會去自動的幫你的apache設定檔內產生 awstats 的相關參數,全都要自己來,並沒有比較輕鬆,所以建議直接用官網安裝
+_+ 哎...步驟太繁瑣了,不想寫了,網路上有許多人都寫好了,看參考資料吧!

Debian安裝 awstat



10.mysql 設定
安裝指令
apt-get install -y mysql-server
apt-get install -y php5-mysql

ps:這裡安裝完後,要reboot,否則無法正常運作
↑若phpmyadmin不能存取mysql時,必需安裝此指令
 

Php5 默認已經不支持 Mysql,為了打開支持,要修改
vim /etc/php5/apache2/php.ini
找到這行將前面的;拿掉
extension=mysql.so
 

默認安裝的 Mysql,其 root 用戶沒有密碼,實在危險,我們為他加一個密碼。 請下指令:
mysqladmin -uroot password 'xxxxxxxx'
其中xxxxxxxx就是你的密碼。

或是用此指令重設 mysql 的密碼
mysql_secure_installation

設定檔位於 /etc/mysql/my.cnf

註意:從win32系統copy資料庫檔案到linux下需改檔案權限並重開機後,才能正常使用
chown and chgrp 都改成 mysql

參考資料:
mysql基本指令
mysql -h host -u user -p
show databases;
use 資料庫名
SHOW TABLES;
select * from 欄位;


範例:
mysql -h 127.0.0.1 -u root -p
之後請輸入 root 的密碼後,就進入 mysql 指令模式了,請輸入以下指令

GRANT SELECT ON `syscp` . * TO 'syscp_read'@'localhost'; 
此指令的用意為 建一帳號 syscp_read 並給予 select syscp 這個資料庫的權限

SET PASSWORD FOR 'syscp_read'@'localhost' = PASSWORD( '123456' );此指令的用意為 設定 syscp_read 此帳號的密碼為 123456

quit
離開 mysql 指令模式 



11.phpmyadmin設定
下載指令
wget http://nchc.dl.sourceforge.net/sourceforge/phpmyadmin/phpMyAdmin-3.0.0-all-languages.tar.gz
 

若以上連結失效自行到官網下載新版3.0 all-languages.tar.gz 多國語語版
http://www.phpmyadmin.net/home_page/downloads.php
 

解壓縮
tar zxvf phpMyAdmin-3.0.0-all-languages.tar.gz
 

改目錄名稱成另一個較安全的名字
mv phpMyAdmin-3.0.0-all-languages phpmyxxx
 

改權限
chmod 755 phpmyxxx/*.php -R
 

然後搬到網頁的目錄底下,如 /var/www/84/
mv phpmyxxx /var/www/84
cd /var/www/84/phpmyxxx
 

接下來要做個設定檔(預設沒有)
cp config.sample.inc.php config.inc.php
vim /var/www/84/phpmyxxx/config.inc.php
 

(1).↓找到底下這行 'qwertyuiuyyr' ←這裡自己設一個亂數密碼
$cfg['blowfish_secret'] = 'xxjfd;kljhxx' // 自己設一個亂數密碼

(2).將此行的 cookie 改成 http
$cfg['Servers'][$i]['auth_type'] = 'http';

註:/var/www/84/phpmyxxx/ 此目錄待設密碼保護在apache內

參考文件,錯誤訊息: 無法讀取 mcrypt 模組,請檢查 PHP 設定 *
http://itblog.blogdns.net/index.php?load=read&id=27 



12.FTP 設定
安裝指令
apt-get install -y vsftpd
 

啟動、停止、重啟、重載入...等指令
/etc/init.d/vsftpd start|stop|restart|reload
 

設定檔在此
vim /etc/vsftpd.conf
請加入或更改成底下設定:
 

================================
anonymous_enable=NO //禁止使用匿名登入
local_enable=YES //允許本機帳號登入
write_enable=YES //允許使用者寫入
listen=YES //要自己加入此行
listen_port=38 //改 port 38 ←vsftp.conf 內找不到這樣的設定,所以我們要自己加入這行
chroot_local_user=YES //讓使用者無法往上進入目錄
pasv_enable=YES //啟用被動式連線,要自己加入此行
pasv_min_port=3100 //要自己加入此行
pasv_max_port=3300 //定義被動式連線的 port 範圍
local_umask=002 //這樣的上傳檔案權限設為 664,才能從網頁被讀取

================================ 

PS:↑此設定內容可能不適合 debian 5.0 的 vsftpd 會使其無法啟動,需另外再研究5.0的設定。

補充說明:
local_umask=002
※註意:↑此設定會將上傳的檔案權限設為 664。但是若上傳目錄則會自動設為775。
請不要更改目錄的權限,若有改動到,也請將目錄權限設回775,否則的話無法透過網頁讀取該目錄下的檔案。
 

其它補充:
禁止ftp登入帳號,看此檔內容
/etc/pam.d/vsftpd
sense=deny file=/etc/ftpusers onerr=succeed
 

↓此檔設定著不能登入ftp的帳號
/etc/ftpusers


設定 SSL 登入
apt-get install openssl
openssl req -new -x509 -nodes -newkey rsa:1024 -out /etc/ssl/certs/vsftpd.pem -keyout /etc/ssl/certs/vsftpd.pem
↑建立SSL key,其它指令參考,產生20年的SSL加密文件↓
openssl req -new -x509 -days 7305 -nodes -out vsftpd.pem -keyout vsftpd.pem

vim /etc/vsftpd.conf

rsa_cert_file=/etc/ssl/certs/vsftpd.pem
#↑預設已有這行了,請確認其路徑和檔案是否存在,此檔即ssl的加密文件
ssl_enable=YES


經以上設定後,重啟 vsftpd 後,就只能用 ssl 的方式來登入了,以前的連線方式不能再登入。
連線方式用Filezilla,參考下圖設定:


手動加帳號指令
useradd -g 100 -c test -m -p test test
指令說明
useradd -g gid的設定, -c 帳號說明 -d 指定家目錄 -s /bin/bash -p 密碼 帳號名稱

例:
useradd 帳號 -g 100 -c 帳號說明 -d /home/user1 -s /bin/bash

-g 100 為 users 群組
-m 自動建家目錄
-M 不自動建家目錄
-G 指定使用者所屬的附加群組
-p 後面接密碼,但是這個參數好像無效,得另外為其設密碼
將/bin/sh 或/bin/bash 改為 /sbin/nologin 就可以禁止登入了 



14.iptables 設定
我寫了個script
vim /home/backup/iptables.sh
 

-------------------iptables.sh 內容----------------------------
 

#!/bin/sh
#我的防火牆設定
iptables -P INPUT DROP
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT 

#允許 ping 回應
 

#iptables -A INPUT -i ! lo -s 127.0.0.1/8 -j DROP 
#封包若不是從 lo 這張網卡進入,但來源是 127.0.0.1/8 的ip,則丟棄此封包
 

#iptables -A OUPUT -i ! lo -d 127.0.0.1/8 -j DROP 
#封包若不是輸出至 lo 這張網卡,但目地是 127.0.0.1/8 的ip,則丟棄此封包
#以上2行是避免入侵者假造 127.0.0.1/8 網段的封包以嘗試突破防火牆
 

iptables -A INPUT -i lo -j ACCEPT 
# 127.0.0.1 本地端回應全接受
 

iptables -A INPUT -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT 
#針對 eth0 這張網卡,設定我主動發出去的回應都予放行
 

iptables -A INPUT -i ppp0 -m state --state RELATED,ESTABLISHED -j ACCEPT 
#針對 ppp0 (撥號連線)這張網卡,設定我主動發出去的回應都予放行
 

iptables -A INPUT -i eth0 -s 192.168.0.0/16 -j ACCEPT 
# 192.168.0.1~255 這個網段全放行
 

iptables -A INPUT -i ppp0 -p tcp --dport 80:84 -j ACCEPT 
#↑此為設定80prot到84port開放
 

iptables -A INPUT -i ppp0 -p tcp --dport 22 -j ACCEPT
#↑此為設定 ssh port 打洞
 

iptables -A INPUT -i ppp0 -p tcp --dport 38 -j ACCEPT
iptables -A INPUT -i ppp0 -p tcp --dport 3100:3300 -j ACCEPT
# ↑此為設定ftp:38 和被動式連線的port位範圍
 

# ↓隱形掃瞄攻擊防範
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
iptables -A FORWARD -p tcp --tcp-flags ALL NONE -j DROP
iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
iptables -A FORWARD -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
iptables -A INPUT -p tcp --tcp-flags FIN,RST FIN,RST -j DROP
iptables -A FORWARD -p tcp --tcp-flags FIN,RST FIN,RST -j DROP
iptables -A INPUT -p tcp --tcp-flags ACK,FIN FIN -j DROP
iptables -A FORWARD -p tcp --tcp-flags ACK,FIN FIN -j DROP
iptables -A INPUT -p tcp --tcp-flags ACK,URG URG -j DROP
iptables -A FORWARD -p tcp --tcp-flags ACK,URG URG -j DROP
 

# ↓因為有些 Hacker/Cracker 會利用 IPv6 的漏洞攻擊主機,所以封閉幾個重要的 PORT
/sbin/ip6tables -F
/sbin/ip6tables -A INPUT -p tcp --dport 21:23 -j DROP
/sbin/ip6tables -A INPUT -p tcp --dport 139 -j DROP
/sbin/ip6tables -A INPUT -p tcp --dport 445 -j DROP
/sbin/ip6tables -A INPUT -p udp --dport 137:138 -j DROP
/usr/bin/pon dsl-provider
#↑啟動防火牆後連線ADSL

 

-------------------iptables.sh 內容----------------------------
 

ADSL連線設定請見後面
改可執行權限
chmod 755 /home/backup/iptables.sh

設定開機啟動防火牆,請下指令
ln -s /home/backup/iptables.sh /etc/init.d/iptables.sh
update-rc.d iptables.sh defaults 50
 

↓此行指令是設定 run level,有下上面那行指令即可...我有點忘了,不太確定,都下也沒關係
update-rc.d iptables.sh start 50 2 3 4 .

要移除在開機時啟動防火牆請下此指令
update-rc.d -f iptables.sh remove
 

註:我試過用rcconf 來管理開機啟動好像會有些問題
在rcconf 曾試著把 iptables.sh 設定為不啟動
重開後,在 rcconf 內就再也看不到 iptables.sh了
想再次啟動也不行了,最後只好下移除開機啟動 iptables.sh 的指令,
重新設定之後,再也不敢用 rcconf 了

參考文件:
 

==========================================
Debian 設定 開機啟動
Debian 跟 Redhat 有點小小的不同..
 

主要的是開機的時後, Redhat 有 rc.local 可以設定.. 
Debian 沒有 rc.local. 所以設定的時後.. 有兩種方法.
 

1. 設定 /etc/init.d/rcS
2. update-rc.d -n nat start 93 2 3 4 . (cd /etc/init.d/)

建議是用第二種方法.. 還能夠用 rcconf 來管理.
Service 號碼資料檔案位置:
代碼:
vim /var/lib/rcconf/services

如何新增一個自己的 /etc/rc.d script ?

Linux 下的 run level 有共七個,分別為:
* run level 0 關機
* run level 1 單一使用者模式
* run level 2 多使用者模式(沒有NFS)
* run level 3 多使用者模式
* run level 4 保留
* run level 5 X11
* run level 6 重開機
========================================== 



15.設定 ADSL,開機自動連線
安裝指令
apt-get install -y pppoeconf
執行 pppoeconf 設定連線
 

hinet連線的帳密如下格式
838538@hinet.net
xxxxxxx
 

設定時請註意,當它問你開機要不要自動連線時,請選擇NO
Would you like to start the connection at boot time?
↑選NO,否則網路連線會有問題,連外OK,但連進來就不行,不曉得什麼原因。

設好連線後,設定檔預設在此
/etc/ppp/peers/dsl-provide

聽說預設斷線之後會自動重撥,但是還是把此參考資料記在此好了
參考資料:
Debian Linux: ADSL PPPoE 自動重撥 Script
 


16.設定域名更新
a. Dyndns 域名設定
安裝指令:
apt-get install ddclient
(在 debian 4 安裝的 ddclient 是 3.6.7 版,並不支援 ssl 加密更新,得安裝新版的 3.7.0以上 才能使用 ssl 更新)


欲重新設定指令
dpkg-reconfigure ddclient
(但這只能更新同一帳號內的域名,不同帳號不能如此做)

進設定畫面它就會問你的帳號密碼和域名,若你有兩個域名請用,逗號分隔
最後還會問你使用哪一個裝置,這句話的意思是指你要監聽哪張網卡的IP。

設定檔的內容在此
vim /etc/ddclinet.conf
# Basic configuration file for ddclient
# /etc/ddclient.conf
pid=/var/run/ddclient.pid
use=if, if=ppp0
login=帳號
password=密碼
protocol=dyndns2
server=members.dyndns.org你的域名1,你的域名2

註意紅字的部份是否正確。若不需ssl加密更新的話這樣設定就可以了。
若要啟用 ssl 加密更新的話,得加裝此套件 libio-socket-ssl-perl。 (使用 ssl 加密更新,目前我不會暫時放棄! )

apt-get install libio-socket-ssl-perl
安裝新版的 ddclient 目前是 3.8.4 版本
wget http://ftp.tw.debian.org/debian/pool/main/d/ddclient/ddclient_3.8.0-4_all.deb

dpkg -i ddclient_3.8.0-4_all.deb
dpkg-reconfigure ddclient

會問你幾個問題:
1.動態 DNS 服務提供者→www.dyndns.com2.帳號
3.密碼
4.Find public IP using checkip.dyndns.com?→5.Selection method for updated names:→問你有哪些域名要更新,請選 From list6.Run ddclient on PPP connect?→7.ddclient 以 daemon 模式啟動?→8.Interval between ddclient runs:→問你 IP 檢查時間,用預設的 300 秒即可
9.Host names to keep updated:→勾選你要更新的域名

檢查是否啟動了
ps -u |grep ddclient
/etc/init.d/ddclient start | stop
/usr/sbin/ddclient -daemon=0 -debug -verbose -noquiet

ddclient執行一次,輸出詳細的log到console上


若是不同帳密的更新得用其它方法做↓
wget -q --delete-after http://帳號:密碼@members.dyndns.org/nic/update?hostname=要更新的域名

中文字的部份,請填入你的資料,欲使用 https 更新域名的寫法如下↓
wget -q --no-check-certificate --secure-protocol=auto --delete-after https://帳號:密碼@members.dyndns.org/nic/update?hostname=要更新的域名

設定上線後,更新域名
vim /etc/ppp/ip-up
 

加入以下內容,底下這是dyndns域名更新
wget -q --delete-after http://帳號:密碼@members.dyndns.org/nic/update?hostname=要更新的域名
參考文章
 

b.TWNIC 域名設定
下載
dyndn-1.3.1.tgz 解壓縮後....
dyndn //為主要執行檔
dyndn_setup //設定域名和密碼
Makefile //似乎不起作用,需自己設定啟動執行

正常用tarball裝的話,無法正常執行!
但是我在/etc/ppp/ip-up檔案最後加入
代碼:
/usr/bin/dyndn
若 dyndn 會莫名的停止,請參考文章:
在 Debian 使用TWNIC的dyndn
 

============================================
#
# !/bin/sh
#
if ( /bin/ping -c3 168.95.1.1 > /dev/null ); then
ETH0_IP=`/sbin/ifconfig eth0 | grep "inet" | cut -c 21-38 |awk '{ print $1 }'`
HOST_IP=`host shyur.idv.tw |awk ' { print $4 }'`
if [ "$HOST_IP" != "$ETH0_IP" ]; then
echo " The Dyndn ready to start! "
/usr/bin/dyndn
fi
fi

 

============================================

c. no-ip 域名設定
apt-get install no-ip
設定
no-ip -C
然後依提示訊息填入你的帳密即可

註:別用no-ip網頁下載的程式來設定,那會有些難度

參考文章:
使用noip2 安裝到debian 上
http://www.kurobox.org/bbs/index.php?showtopic=502 



17.mrtg 設定
apt-get install snmp snmpd
cp /etc/snmp/snmpd.conf /etc/snmp/snmpd.conf.bak
 

編輯 snmpd.conf
echo rocommunity public >> /etc/snmp/snmpd.conf
vim /etc/snmp/snmpd.conf 找到相對的位置,改成如下設定
 

========snmpd.conf的內容============
 

# sec.name source community
# com2sec paranoid default public

com2sec readonly default public
#com2sec readwrite default private
 

========snmpd.conf的內容============

重跑snmp
/etc/init.d/snmpd restart
下這個指令測試一下,有跳出很多很多行,而沒有error 就是正確的
snmpwalk -c public -v 1 localhost

接著裝
apt-get install mrtg mrtg-contrib

下指令,差生mrtg.cfg
cfgmaker --global "WorkDir: /var/www/84/xmrtg" --global "Refresh: 600" --global "Interval: 5" --global "WriteExpires: Yes" --global "Language: big5" --global "options[_]: bits" --ifdesc=descr --ifref=descr public@localhost > /etc/mrtg.cfg 

↑註意: 1.WorkDir: 可以改成其它位置

或者下此指令,差別在 WorkDir 位置不同而己
cfgmaker --global "WorkDir: /var/www/mrtg" --global "Refresh: 600" --global "Interval: 5" --global "WriteExpires: Yes" --global "Language: big5" --global "options[_]: bits" --ifdesc=descr --ifref=descr public@127.0.0.1 > /etc/mrtg.cfg

編輯 vim /etc/mrtg.cfg
若你有設不同的 WorkDir,
請註意下面,第二行要加# ,才能使你自訂的位置生效
# for Debian
#WorkDir: /var/www/mrtg

指令
mrtg /etc/mrtg.cfg
執行三次,前兩次執行會出現 rateup 的警告,不用理。

首頁生成
indexmaker --columns=1 --output=/var/www/84/xmrtg/index.html --title='Traffic Info' /etc/mrtg.cfg

設定mrtg 每5分記錄一次流量
vim /etc/crontab
*/5 * * * * root /usr/bin/mrtg /etc/mrtg.cfg > /dev/null 2>&1
 

#如果上述指令執行有問題,或不能更新圖表,請改用下面的指令
*/5 * * * * root env LANG=C /usr/bin/mrtg /etc/mrtg.cfg
 

註:mrtg安裝完後,會自動的在你的系統內的增加排程,這是我之後才發現的,如果你做了以上的 crontab 設定,那麼請移除它自動幫你加的排程。
指令:
rm /etc/cron.d/mrtg
 

參考文章
http://www.debianhelp.co.uk/mrtg.htm
MRTG for Debian Linux 4.0 r1
http://blog.roga.tw/2007/09/07/494/
http://moto.debian.org.tw/viewtopic.php?t=7195
http://bbs.cm.nsysu.edu.tw/viewthread.php?tid=33&extra=page%3D1
 


18.cacti 設定

由於安裝設定內容太多,所以另外寫一篇文章
請參閱 ===>debian 4.0 安裝 cacti
 


19.apache 目錄加密碼保護

a.編輯 apache2.conf 設定檔
vim /etc/apache2/apache2.conf
 

加入底下內容
#底下為受密碼保護的目錄
<Directory "/awstats">
AllowOverride AuthConfig
Order allow,deny
Allow from all
</Directory>
<Directory "/cacti">
AllowOverride AuthConfig
Order allow,deny
Allow from all
</Directory>

檢查apache2.conf設定檔內是否還有對同一目錄的設定,若有請把它加#號,否則密碼保護無法設定成功。
 

例如: /awstats 是對應到 /var/www/84/awstats/wwwroot 這目錄,但這目錄也有針對它的設定必須將其取消
否則密碼保護不會設定成功。
 

#<Directory "/var/www/84/awstats/wwwroot">
# Options None
# AllowOverride None
# Order allow,deny
# Allow from all
#</Directory>

設完之後重啟 apache
/etc/init.d/apache2 restart
 

b.建密碼檔
建一密碼檔名為apache.passwd 存放在 /home/backup
htpasswd -c /home/backup/apache.passwd user1
 

接著輸入密碼 xxxxxxxx
 

在密碼檔內建第二個使用者 (不加 -c 參數了)
htpasswd /home/backup/apache.passwd user2

註:user1和user2為你自訂的使用者帳號,xxxxx為你自訂的密碼

改變檔案屬性
chown www /home/backup/apache.passwd
chgrp users /home/backup/apache.passwd
 

c.在要被保護的目錄下建.htaccess檔
先進到你要密碼保護的目錄底下
cd /var/www/84/awstats/wwwroot/
vim .htaccess
 

=====加入以下內容==================
 

AuthName "This is Private directory"
Authtype Basic
AuthUserFile
/home/backup/apache.passwd
require user
user1 user2
#require:後面接可以使用的帳號。
#如果要讓該密碼檔內的使用者都能夠登入,就改成『require valid-user』即可

 

===================================
 

改變檔案屬性
chown www .htaccess
chgrp users .htaccess
 

然後再把此檔copy到你要密碼保護的另一個目錄底下去
cp .htaccess /usr/share/cacti/site


除了加密碼保護以外,我們也可以用鎖定IP的方式來增加安全性
例如:我有一站台目錄是指向 /var/www/syscp 這站台很重要,不能讓別人隨便進來,除了密碼保護外可能還不夠,那麼我們就可以鎖定只有哪些 IP 可以訪問這個站台。
vim /etc/apache2/sites-enabled/000-default
 

-----------------------------------------------
 

<Directory /var/www/syscp>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order deny,allow
deny from all
allow from 192.168.0.0/24 220.130.30.39
</Directory>

 

------------------------------------------------
 

以上設定為鎖定 syscp 後台管理頁面,只允許192.168.0.0這個網段和這個 220.130.30.39 IP可以登入
 

註意: 這兩行的上下順序若是相反的
deny from all
allow from 192.168.0.0/24 220.130.30.39

 

變成底下這樣 (deny 在最後一行)
allow from 192.168.0.0/24 220.130.30.39
deny from all

這樣就等於是將整個關閉網站了,沒有任何人可以訪問了,因為 deny 在最後才被套用。



20.架NAT server

NAT 的設定透過 iptables 就能設定
若你在第14步驟時設定了iptables,那麼只要再加下底下內容即可
vim /home/backup/iptables.sh
加入底下的內容
 

==================================================================
 

iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT
echo "1" > /proc/sys/net/ipv4/ip_forward
#將ip_forward的值由0改為1,表示啟動封包轉送的功能,讓你的 Linux 具有 router 的能力
iptables -t nat -A POSTROUTING -s
192.168.0.0/24 -o ppp0 -j MASQUERADE
 

#來自192.168.0.0/24 這網段的封包全轉到 ppp0 這張網卡去
==================================================================
 

需註意或更改的地方只有紅字的部份,若你的網段不是 192.168.0.0
或你的對外連網的網卡不是 ppp0 這張網卡,請調整參數

其它的教學可能會提到要清除規則,因為每次重開機iptables所設的規則都會自動的被清除了
所以 iptables.sh 設定檔內可以不用加底下這幾行指令了
清除 NAT table 的規則吧!
iptables -F -t nat
iptables -X -t nat
iptables -Z -t nat
 

補充說明:
鳥哥說:「如果你的 public IP 取得的方式是撥接或 cable modem 時,你的設定檔 /etc/sysconfig/network, ifcfg-eth0, ifcfg-eth1 等檔案,千萬不要設定 GATEWAY 啦!」

所以
vim /etc/network/interfaces
把裡面的gateway 給標註掉
#gateway 192.168.0.1
 


21.架 DHCP server
apt-get install -y dhcp
vim /etc/dhcpd.conf


ps: 在 ubuntu 9.04 底下可能要下這樣的指令才行,底下有綠字的部份為 ubuntu 用
sudo apt-get install dhcp3-server
sudo cp /etc/dhcp3/dhcpd.conf /etc/dhcp3/dhcpd.conf.bak
sudo vim /etc/dhcp3/dhcpd.conf
ubuntu 9.04 的設定檔可能與底下
藍字的內容有些不同,可將底下列出來這部份綠字的內容全清掉,直接貼上以下藍字的內容。有問題可自己恢復 dhcpd.conf.bak 檔


========= ubuntu 的 /etc/dhcp3/dhcpd.conf ====================
 

option domain-name "example.org";
option domain-name-servers ns1.example.org, ns2.example.org;
default-lease-time 600;
max-lease-time 7200;
 

=============清掉以上內容==============================
 
加入底下內容
 

=======================dhcpd.conf內容==========================
 

subnet 192.168.0.0 netmask 255.255.255.0 {
range 192.168.0.3 192.168.0.100;
option routers 192.168.0.1;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.0.255;
option domain-name-servers 168.95.1.1, 139.175.10.20;
option domain-name "vic";
default-lease-time 604800;
max-lease-time 259200;
}
# 第一行 定義了此網段和遮罩範圍
# 第二行 range 為此網段IP發配的範圍
# 第三行 option routers 應為NAT主機的IP
# 第四行 遮罩重複設了,故少此行應也沒關係
# 第五行 broadcast-address 應設為同網段的最後一個IP
# 第六行 可設定多部 DNS 主機,不過必須要以逗號『 , 』分隔開才行。
# 第七行 域名,沒有的話就隨便設也沒關係
# 第八行 default-lease-time 604800; 單位為秒,此為7天
# 第九行 max-lease-time 259200;最大租用期限,此為30天
# 以上是 DNS 的 IP 設定,這個設定值會修改用戶端的 /etc/resolv.conf 檔案內容!

#底下開始是靜態IP的設定,s1可隨便填,第二行為MAC位址,第三行為固定IP
#host s1 {
# hardware ethernet xx:xx:01:41:xx:xx;
# fixed-address 192.168.0.100;
}

authoritative;
#↑這個選項,英文有寫它的說明,我大概的說一下功能,就是如果你這個網段內只有你這一個 dhcp server的話,那請把前面的#號拿掉,讓它當此網段的主 dhcp server,否則 log 檔內,老是會記錄錯誤訊息
 

=======================dhcpd.conf內容==========================
 

啟動、停止指令
/etc/init.d/dhcp start | stop

sudo /etc/init.d/dhcp3-server restart

※設定dhcp 所監聽的網卡
 

若你不只一張網卡,那麼你可能要設定由哪一張網卡來分配IP
vim /etc/default/dhcp
INTERFACES=" " 

在兩個"中間填入你網卡代號。
 

PS:但是我測過此參數,加了此參數之後,好像 dhcp server 就不能正常啟動,可能是新版不支援此參數吧。

觀察 dhcp server ip 發送狀態
grep dhcpd /var/log/messages

參考設定資料: dhcpd.txtdhcp server設定(英文)dhcp server設定(中文)
 

加掛 cache 功能
說明:此功能有助於增進 apache 效能
cd /etc/apache2/mods-enabled/
ln -s ../mods-available/mem_cache.conf mem_cache.conf
ln -s ../mods-available/mem_cache.load mem_cache.load
#ln -s ../mods-available/disk_cache.load disk_cache.load
#ln -s ../mods-available/disk_cache.conf disk_cache.conf
ln -s ../mods-available/cache.load cache.load 

註:倒數第二、三行可能不需要,所以前先標註 # 號
 

vim /etc/apache2/mods-enabled/mem_cache.conf
<IfModule mod_mem_cache.c>
CacheEnable mem /
MCacheSize 20480
MCacheMaxObjectCount 100
MCacheMinObjectSize 1
MCacheMaxObjectSize 65536
# Enable caching of streamed responses up to 64KB:
MCacheMaxStreamingBuffer 65536
</IfModule>


(MCacheMaxStreamingBuffer must be less than or equal to MCacheMaxObjectSize. Resetting MCacheMaxStreamingBuffer to MCacheMaxObjectSize.)

ps:也許可用 下指令 a2enmod mem_cache 來啟動, 而關閉module指令則為 a2dismod mem_cache
加載proxy功能
 

說明:此功能即把你的網站當成一個代理,
如按以下的設定設好後,開啟網址:http://你的域名/Stream-Live.htm
則你的server就會跑去 NTDTV 抓資料來播放。

NTDTV在線收看功能
cd /etc/apache2/mods-enabled/
ln -s ../mods-available/proxy.load proxy.load
ln -s ../mods-available/proxy_connect.load proxy_connect.load
ln -s ../mods-available/proxy_http.load proxy_http.load
ln -s ../mods-available/proxy.conf proxy.conf
vim proxy.conf
Deny from all 前標 # 號,並在其下一行加上這行文字 Allow from all

vim /etc/apache2/apache2.conf
 
在最後加入這兩行
ProxyPass /Stream-Live.htm http://httplive.ntdtvcast.com/Stream-Live
ProxyPassReverse /Stream-Live.htm http://httplive.ntdtvcast.com/Stream-Live 
vim /etc/ppp/ip-up
最後加入這些內容
----------------------------
# 底下3行為IP更換記錄
IP1=`/sbin/ifconfig ppp0 | grep "inet" | cut -c 21-38 |awk '{ print $1 }'`
date1=`date +%Y/%m/%d,%T`
echo IP更換:$IP1 於$date1 >>/tmp/pppoe.log

----------------------------

vim /etc/ppp/ip-down
最後加入這些內容
------------------------
date1=`date +%Y/%m/%d,%T`
echo ADSL斷線.... 於$date1 >>/tmp/pppoe.log

------------------------

IP更換記錄檔寫於 /tmp/pppoe.log 檔內,重開機後此檔就會消失重建
 

24.設定rsync
安裝
apt-get install rsync
vim /etc/default/rsync
 
底下這行:
RSYNC_ENABLE=ture
#要當server就改成 TRUE , 當 client 送檔案就改成 false

以下設定 僅為 rsync client端,完整的 rsync 設定教學→ 請見此頁 ←請點我。
自己做一個密碼檔,裡面填上密碼
vim /etc/rsync.client.passwd
xxxxxxx
改檔案屬性,擁有者和群組都必須是root
chmod 600 /etc/rsync.client.passwd

vim /home/backup/file-sync.sh
 
========================================
 
#!/bin/sh
rsync --port=可改其它port位 -rv --exclude-from=/home/backup/rsync_exclude.txt --size-only --progress --delete --password-file=/etc/rsync.client.passwd 帳號@域名::web /var/www
chown www /var/www -R
chgrp users /var/www -R

 
========================================
↑說明:rsync 後面帶了一大堆的參數,詳細說明請參閱 rsync 說明
設定例外檔檔案 (即不要更新的檔案)
說明:Stream-live.htm 和 Stream-Live.htm 這兩個檔名即為不要更新的檔名,寫入 rsync_exclude.txt 檔內
echo "Stream-live.htm" > /home/backup/rsync_exclude.txt
echo "Stream-Live.htm" >> /home/backup/rsync_exclude.txt
chmod 755 /home/backup/file-sync.sh
再將此檔 file-sync.sh 加入排程內定時執行即可
安裝
apt-get install bind9

vim /etc/bind/named.conf.options

==========加入在 options 下================
version "ooxx";
allow-query { any; };
allow-recursion { any; };
forwarders { 168.95.1.1; 139.175.10.20; };

===========================================

vim /etc/bind/named.conf
==============================
zone "lemon.cx" {
type master;
file "/etc/bind/named.lemon.cx";
allow-query { any; };
};

zone "0.168.192.in-addr.arpa" {
type master;
file "/etc/bind/named.192.168.0";
allow-query { any; };
};

==============================
更新 root 網域資料
cd /etc/bind/
wget ftp://rs.internic.net/domain/named.root
mv db.root db.root.bak
mv named.root db.root

==============================
vim /etc/bind/named.lemon.cx
------------------------------
$TTL 86400
@ IN SOA lemon.cx. admin.lemon.cx. ( 2006102001 28800 14400 720000 86400 )
@ IN NS main
@ IN A 192.168.0.52
@ IN MX 10 main
main IN A 192.168.0.52
www IN CNAME main
ftp IN CNAME main
forum IN CNAME main
admin IN CNAME main
mail IN CNAME main

-----------------------------

vim /etc/bind/named.192.168.0
-----------------------------
$TTL 86400
@ IN SOA lemon.cx. admin.lemon.cx. ( 2006102001 28800 14400 720000 86400 )

; 本領域的 DNS 伺服器的主機名稱與 IP 的對應
@ IN NS main.lemon.cx.
52 IN PTR main.lemon.cx.


-----------------------------
/etc/init.d/bind9 restart
-----------------------------
若DNS不能正常啟動,請檢查語法是否有錯
cd /etc/bind
named-checkzone lemon.cx named.lemon.cx
named-checkzone vic.com.tw named.vic.com.tw
named-checkzone 192.168.0 named.192.168.0
named-checkconf /var/named/chroot/etc/named.conf

--------------------------------------------------
檢查是否 LISTEN Port 53 (named)、953 (rndc)
netstat -tnl

若無法啟動,查 log 檔
可從 DNS Server 上看到如下訊息 (zone transfer denied)
tail /var/log/messages 
可以用 dd 去掃

dd if=/dev/xxx of=/dev/null

如果沒有任何錯誤訊息,就沒有壞軌了喔。
使用 rsync 做 mirror 功能
a.兩顆硬碟分割區請切成一樣大小,不要用 LVM 分割 (因為我不會用,所以沒在 LVM 上試成過)
我的切法就是 sda1 掛到 / , sda2 為 swap 就這樣
第一顆硬碟 代號為 sda
sda1 掛載到 /
sda2 swap
第二顆硬碟 代號為 sdb
sdb1 掛載到 /
sdb2 swap
看硬碟分區指令 fdisk -l
切割硬碟指令 fdisk /dev/sdb 切割完後記得先重開機,再格式化硬碟
df -h 看磁碟機掛載情況
du -s -h /etc 看單一資料夾的大小
b.掛載第二顆硬碟 sdb
mkdir /mnt/sdb1
mount /dev/sdb1 /mnt/sdb1
設定開機自動掛載 sdb
vim /etc/fstab
加入底下這行
/dev/sdb1 /mnt/sdb1 ext3 errors=remount-ro 0 1
c.安裝 rsync
apt-get install -y rsync
備份指令,請自行將此指令加入排程去
rsync -aHDSt --delete --exclude=/proc/* --exclude=/sys/* --exclude=/tmp/* --exclude=/mnt/* /* /mnt/sdb1
ps:少加了參數 D 可能會造成 apache 啟動錯誤
參數說明:
-a, --archive 權限保存模式
-H, --hard-links 保留硬式連結
-D, --devices 保留device資訊(root only)
-S, --sparse 嘗試去處理稀疏的檔案,讓這些檔案在目的端佔去較少的磁碟空間.
-t, --times 保留時間點
-v , --verbose 複雜的輸出訊息,若要在背景執行請拿掉此參數

-x, --one-file-system 不要跨越檔案系統分界(只在一個檔案系統處理)
-u, --update 僅僅進行更新,也就是跳過所有已經存在於DST,並且文件時間晚於要備份的文件。(不覆蓋更新的文件)

--exclude=PATTER 符合PATTERN(規則表示式)樣式的檔案不進行傳送
d.mbr 備份
dd if=/dev/sda of=/dev/sdb bs=512 count=1
我們知道整顆硬盤的 MBR 為 512 bytes,就是放在硬盤的第一個 sector ,因此,我可以利用這個方式來將 MBR 內的所有資料都紀錄下來。
↑若此備份不成功的話,請用 debian 光碟開機,進救援模式,重新安裝 grup 即可。(debian 5.0 光碟進救援模式後,它會先偵測網路環境,偵測不成功也沒關係,到後面會有個選項, "重新安裝 GRUP 開機程式" 選它後會問你要裝在哪,若你是第一顆SATA硬碟,請輸入 /dev/sda 即可)

grub安裝指 令參考
grub-install /dev/sda

做到這裡,該備份的都已經備份了,可以關機,抽換被備份的那顆硬碟,看它自己能不能開機獨立作業。

若 swap 沒啟用,可下此指令
mkswap /dev/sda2
swapon /dev/sda2
 
vim /home/backup/online.sh
 
====================online.sh內容===========================
 
#!/bin/bash
ppp0=`ifconfig |grep ppp0|awk '{print $1}'`
ppp1=`ifconfig |grep ppp1|awk '{print $1}'`
#檢查 ppp1 這張網卡是否存在,若存在則執行斷線指令
if [ "$ppp1" == "ppp1" ] ;then
#echo -e "重覆撥號了,將執行斷線指令"
poff -a
fi
#檢查 ppp0 是否存在,不存在則執行撥號指令
if [ "$ppp0" == "ppp0" ] ;then
#echo -e "已連線了,離開程式"
exit
else
#若不存在則執行連線動作
#echo -e "執行撥號程式"
pon
fi
 
====================online.sh內容===========================
 
chmod 755 /home/backup/online.sh
vim /etc/crontab

*/5 * * * * root /home/backup/online.sh > /dev/null 2>&1
#↑每隔5分鐘檢查一次連線狀況,斷線自動重連

以下指令基於 debian 5,0 (lenny) 版環境測試成功。

啟用 ssl 模組
a2enmod ssl
啟用 ssl 虛擬站台
a2ensite default-ssl
安裝 ssl 套件
apt-get install openssl ssl-cert
重啟 apache
/etc/init.d/apache2 restart

sudo apt-get install nfs-common nfs-kernel-server
vim /etc/exports
/mnt/iso *(ro,sync)
啟動 nfs server 指令
sudo /etc/init.d/nfs-kernel-server start
檢查
showmount -e localhost
成功的話應該可以看到這樣的訊息:
Export list for localhost:
/mnt/iso *
apt-get install ntpdate
vim /etc/cron.d/ntpclient
-------------------------------------------------------------------
# Set PATH, otherwise restart-scripts won't find start-stop-daemon
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
#本排程為網路校時,定於每日凌晨六點
#本程式由以下指令安裝
# apt-get install ntpdate

* 6 * * * root (/usr/sbin/ntpdate time.nist.gov ; /sbin/hwclock -w) > /dev/null

-------------------------------------------------------------------
我們在做 apt-get 安裝時,經常會遇到沒有某某公鑰的提示,導致無法繼續安裝,以下是解法
apt-key adv --recv-keys --keyserver subkeys.pgp.net 9AA38DCD55BE302B
輸入以上指令即可安裝公鑰,記得將後面那串 藍字 的部份取代為你所欠缺的公鑰
apt-get install vnstat
vnstat -u -i eth0
↑指定你要監控的網卡
過5分鐘後,就可用 vnstat 指令來看流量監控
vnstat 參數說明:
-h : 24hr 的流量統計
-d : 一個月每天的流量統計
-m : 一年每月的流量統計
-t : Top 10 的流量統計
-w : 過去七天與上週跟本週的流量總計
安裝網頁圖型顯示
wget http://www.sqweek.com/sqweek/files/vnstat_php_frontend-1.4.1.tar.gz
tar zxvf vnstat_php_frontend-1.4.1.tar.gz
cd vnstat_php_frontend-1.4.1
vim config.php
找到這兩行
$vnstat_bin = '';
$data_dir = './dumps';
改成這樣
$vnstat_bin = '/usr/bin/vnstat';
$data_dir = '
/var/lib/vnstat/';
還有把沒用到的網卡給刪了,只留下你用到的那個
$iface_list = array('eth0', 'eth1', 'sixxs');
$iface_title['eth0'] = 'Internal';
$iface_title['eth1'] = 'Internet';
$iface_title['sixxs'] = 'SixXS IPv6';
改成這樣↓
$iface_list = array('eth0');
$iface_title['eth0'] = 'Internal';
#$iface_title['eth1'] = 'Internet';#$iface_title['sixxs'] = 'SixXS IPv6';
若要讓IE能直接看到流量表,則需改成底下這樣(預設是 svg 出圖, IE 不支援 svg)
// graphics format to use: svg or png
$graph_format='
png';
最後用網址 http://你的IP/vnstat_php_fronted-1.4.1 去看即可
SElinux 設定部份
vnstat 有兩個動作模式,在 audit.log 裡可以查到
確認 audit2why < /var/log/audit/audit.log 這裡面有 vnstat 的 [lock] 和 [read] 的模式被紀錄了之後,我們就可安裝 vnstat 的 module
audit2allow -a -M vnstat
semodule -i vnstat.pp
一般用來連 ssh 的工具除了 puttypietty之外,還有一個工具可 以試試就是 XshellXshell中文介紹
Xshell 裝完後,有一些小設定要改一下,參照下圖改即可

使用 pietyy 有個好處,就是可直接拉了檔案往該視窗裡丟,就能上傳檔案了。
Xshell 也有這個功能,但在 debian 的系統就得先裝個套件才能使這功能生效。 ( centOS 已有內建)
apt-get install -y lrzsz
裝完這個套件後,上傳檔案就很方便了。
要拉檔案出來也很方便哦,下這樣的指令後
sz 檔名
它就會問你要檔案要存在哪兒
安裝和啟用頻寬限制模組
apt-get install libapache2-mod-bw
a2enmod bw
vim /etc/apache2/sites-available/default
然後在你的虛擬站台裡加入以下參數
-------------------------------------------------
<VirtualHost *:80>
DocumentRoot "/home/movie"
ServerName xxx.com
#頻寬限制
BandWidthModule On
ForceBandWidthModule On
Bandwidth all 102400
#102400 ==>100K 限制
#MaxConnection all 10
#限制連線數 10

<Directory /home/abc>
Options....
...etc
</Directory>
</VirtualHost>
-------------------------------------------------
改完後記得重啟 apache
參考資料: 花慄鼠柑仔店AppleBoy
用 7zip 就能解rar檔了,所以我們不安裝 unrar,而直接裝 7zip來解
apt-get install p7zip-full
用法
7z x filename.7z
有時候登入系統可能會收到這樣的通知信
To: root@d3.vic
From: root <root@d3.vic>
Date: Sat, 29 Aug 2009 22:35:15 +0800

upload.pw_activity
error : Table upgrade required. Please do "REPAIR TABLE `pw_activity`" to fix it!
upload.pw_actmember
error : Table upgrade required. Please do "REPAIR TABLE `pw_actmember`" to fix it!
upload.pw_administrators
error : Table upgrade required. Please do "REPAIR TABLE `pw_administrators`" to fix it!
upload.pw_adminlog
error : Table upgrade required. Please do "REPAIR TABLE `pw_adminlog`" to fix it!
upload.pw_advert
error : Table upgrade required. Please do "REPAIR TABLE `pw_advert`" to fix it!
upload.pw_announce
error : Table upgrade required. Please do "REPAIR TABLE `pw_announce`" to fix it!
upload.pw_argument
error : Table upgrade required. Please do "REPAIR TABLE `pw_argument`" to fix it!
upload.pw_attachs
warning : 1 client is using or hasn't closed the table properly
upload.pw_bbsinfo
error : Table upgrade required. Please do "REPAIR TABLE `pw_bbsinfo`" to fix it!
upload.pw_cache
註: 如果都是 MyISAM 格式, 可用 myisamchk 直接做,
例:
1. cd /var/lib/mysql/資料庫名稱
2. myisamchk --quick --check-only-changed --sort-index --analyze *.MYI
參考資料:
註: 2009/09/03 下此指令 myisamchk 可能會有問題,使資料庫錯亂
所以目前我的解法是用 phpmyadmin 進後台去選擇所有的 Table 後,選擇修復資料表即可。
38.傳真伺服器

在linux底下我們的傳真伺服器將採用 hylafax 因設定步驟太多,所以另外寫成一個頁面。
詳細的 hylafax設定教學 ←請點我


39.列印伺服器

以下設定環境基於 ubuntu 9.04 64bit

vim /etc/samba/smb.conf

#以下3行是針對printer設定
printcap name = cups
load printers = yes
printing = cups

[printers]
comment = All Printers
path = /var/spool/samba
browseable = yes
writable = yes
guest ok = yes
public = yes
printable = yes
#share modes = no
locking = no

# Windows clients look for this share name as a source of downloadable
# printer drivers
[print$]
comment = Printer Drivers
path = /var/lib/samba/printers
browseable = yes
read only = yes
guest ok = no

vim /etc/cups/cups.conf
<Location />
Order Deny,Allow
Deny From All
Allow From 192.168.1.0/24
</Location>
<Location /admin>
AuthType Basic
AuthClass System
Order Deny,Allow
Deny From All
Allow From 192.168.1.0/24
</Location>
Browsing On
BrowseProtocols cups
BrowseOrder Deny,Allow
Deny From All
BrowseAllow From @LOCAL
Listen 0.0.0.0:631

然後用網址 http://yourIP:631 即可登入管理

參 考資料1, 參考資料 2


40.關閉服務

有時候我們安裝了某些服務,基於安全理由,不想讓它在開機時就自動啟動,想要自己手動啟用,可以這樣做

先安裝套件
apt-get install sysvconfig

指令語法範例
service samba stop
service samba start
service samba restart