韌館-LearnHouse

Archive for the 'Linux' Category

.htaccess 簡介與常用功能

以下內容是轉貼於我的舊部落格中的一篇文章

資料來源網站建置百寶箱

剛好最近遇到一點類似的問題,因此就貼出來和大家一起分享 

.htaccess 檔是 acache http 伺服器上的一個設定檔。
一般來說,管理人員都會開放部份功能給你自行設定,也有的會完全關閉對 .htaccess 的支援。

  1. 設定網頁密碼;
  2. 設定發生錯誤時出現的文件;
  3. 改變首頁的檔案 (index.html);
  4. 禁止讀取檔案;
  5. 重新導向文件;
  6. 加上 MIME 類別;
  7. 防止列出目綠內的檔案..等等

其實還有很多功能,不過一般只會開放一般功能給你用 (除非你是管理員...),而我也不識那麼多。所以我只說一般會用到的功能。

【.htaccess 簡介 】

.htaccess 是一個文字檔,你可以做任何好像 notepad 的文字編輯器去寫一個。
或者你會對 .htaccess 這個名字有點困惑,其實 .htaccess 是一個完全的檔案名, 不是 filaname.htaccess 或者甚麼的(當然也有管理員故意把它設定成其他名字,但一般都是用 .htaccess 的)。 為何是 .htaccess?因為所有以 "." 開頭的檔名在 *nix 系統中也是有屬性隱藏的,平常列出資料夾時不會出現,所以保安會好一點。 你可能會問:『MS Windows 要我一定給它一個名字,如何把它存檔成為 .htaccess?』 其實方法有兩個。 第一個是到 ms-dos 的視窗中,按 ren filename.xxx .htaccess 就可以了;第二個是在上傳到伺服器時才改名做 .htaccess。
而 .htaccss 內設定的格式是一行一個指令,如果你的 notepad 設定了自動換行的話,請關上它,這樣會比較安全。
一點要注意, .htaccess 是 apache 的產物,不是 IIS 的。IIS 伺服器不支援它,也就是說你不能以簡單地上傳一個 ASCII 檔去設定在 IIS 伺服器上的 http 服務。
在上載 .htaccess 時,必需使用 ASCII 模式!你或許還要 chmod 它到 644(RW_R__R_)。
每一個放了 .htaccess 的目錄和它的子目錄都會被 .htaccess 影響。如果我在 /abc/ 放了一個 .htaccess,那麼 /abc/ 和 /abc/def/ 內所有 file 都會被它影響,但 /index.html 不會被它影響 ←← 這一點是很重要的。

【密碼保護 】

這是最常見 .htaccess 被使用的功能之一,資料夾密碼保護。
這種方法可以使沒有授權的瀏覽者不能進入你所設定的限制區域,使用了 Javacript 設的密碼太簡單了,一下字就會被破解,而使用 .htaccess 系統就比使用 CGI 程式保護會員專頁將更為有效,更安全。更重要的是使用 .htaccess 方式去設定不需要編寫程式的技能。
首先,你要開啟一般文字編輯工具,做出一個名叫 .htpasswd 的檔名(當然又可能是其他,但一般伺服器都會設定 .htpasswd 是不能經由 http 讀到的。 檔案中的的每一句代表一個使用者,使用者名稱以及加密了的密碼是以冒號(:)分隔。而密碼必須經過加密才可以使用。 加密的方法是一般密碼使用了的 crypt,如果你不知如何加密,請到以下的網頁。
UHome
http://www.euronet.nl/~arnow/htpasswd/

注: Win32 版本的 apache 好像不支援用了 crypt 加密法的密碼檔,只支援 SHA1 和 MD5 的。 如果你是使用 apahce for win32 版本,請使用 C:Program FilesApache GroupApachebinhtpasswd.exe 做出以 MD5 加密的密碼檔!!

再在 .htaccess 中,加上以下句子

AuthName MemberPage
AuthType Basic
AuthUserFile /absolute/path/.htpasswd
require valid-user

AuthName 就是當 browser 得知要密碼時所出現的句字,你可以自行改動 MemberPage; 而第二句的 AuthType Basic 就千萬不要去改; 第三句的 AuthUserFile 就是設定所使用的 .htpasswd 檔,要留意它好像必需是在伺服器上的絕對路徑。 請留意,這不是 URL 的位置、也不一定是在 ftp 中看到的位置、就算是由 CGI 自行測到的路徑也未必準確,請細看伺服器上的說明 (例如在 virtualave.net,URL 是 /.htpasswd ftp 看到的是 /public_html/.htpasswd,CGI 測到 /home/public_html/.htpasswd,但是事實上你要設定路徑為 /data1/virtualave.net/USERNAME/public_html/.htpasswd)。
為了保安理由,不建議把 .htpasswd 放到可以用 http 去到的目錄;
最後的 require 就是命令伺服器誰可以進入,require valid-user 就是指只要是 .htpasswd 中的任何一人就可了; 你也可以指定在名單上只有某人可以通過,require user username 或 require user username1 username2 username3; 也可以指定是某組人才可以,require group groupname

而設定組的方法是再做一個叫 .htgroup 的文字檔,內容如下:

groupname1: username1 username2 username3
groupname2: username1 username3 username4

再在 .htaccess 中加多一句 AuthGroupFile /absolute/path/.htgroup 和 .htpasswd 的方法一樣,我不再說了。

以 ASCII 模式上傳所有檔案後,在那個資料夾中所有檔案都會被保護。
而再進一步,我們更可以設定個別設定只有某個檔案會密碼,不同檔案要不同的密碼,但是我會晚一點才說。


【自設錯誤報告文件 】

想做到好像 www.microsoft.com 一樣, 找不到文件不只是幾句白底黑字,也不是 IE 本身那個有 bug 的 "找不到網頁",而是另一頁 HTML 文件嗎?
逢法很簡單,首先寫一頁說找不到文件的 HTML,再用 notepad 打開您的 .htaccess。在最後加上一句

ErrorDocument 404 404.html

404.html 是錯誤檔案路經,即所顯示的檔案;404 是錯誤碼。以下就是一般會見到的錯誤碼和所代表的錯誤原因。

401
Authorization failed 授權失敗;即是錯誤 password
403
Access denied 存取違規;即是你不可以讀取這個檔案
404
File not found 找不到檔案
500
Internal Server Error 伺服器內部錯誤;可能是 http 伺服器本身是問題,也可能是 CGI 出錯

也有以下兩類做法

ErrorDocument 404 "<html><body>找不到</body></html>"
ErrorDocument 500 http://www.xxx.com/xxx

Ps. 如果所用的錯誤文件是一個 CGI 檔,就會有一點關於那個錯誤的資科放到環境變數內給 CGI 讀取。


【自設首頁檔案 】

這個可以算是最簡單的一個設定了

DirectoryIndex index.html index.htm index.cgi

很簡單,常你的網址是一個目錄,沒有注明檔名時 (如: http://www.xxx.com/) 它會顯示 index.html。 如果沒有這個檔案,就找下一個檔案。如果沒有任可一個名單上的檔案,就會依設定列出目錄內的檔名。


【禁止讀取檔案 】

如果你的 CGI 會把秘密的內容(如: 密碼)存到一個檔案,那麼別人只要知道這個檔案的位置,就可以很簡單的看到一切。不想這樣嗎?你可以完全不改變其他設定,不用把那個檔案移到其他地方,只需在 .htaccess 加幾句就可以。

<Files filename.ext>
order allow,deny
deny from all
</Files>

而 Apache 1.3 以後的版本,我們更可以用支援 regular expression 的 filesmatch

<filesmatch ".tmp">
order allow,deny
deny from all
</filesmatch>

其實 files 也可用 regular expression 的,但要加一個 ~ 在前(例: <files ~ ".xxx$">)。 files 和 filesmatch 的意思就是,內裏被包著的幾句只會對付合要求的部份檔案生效。
接著我就說有關中間的文字→order deny, allow,就是先找出禁止(deny) 的,才去找例外許可的 (allow)。 如果把它們反轉,就是 order allow, deny 就是,就是先找出許可(allow) 的,才去找禁止的 (deny)。 之後的 deny form all 就是說,全部 IP 來的都不可以。 相對地 allow form all 也就是全部都可以。 而你更可以這樣做

order allow,deny
allow form all
deny form 123.456     所有以 123.456 開始的 IP,如 123.456.1.1

除了設定 IP 外,您也可以設定 hostname(如: xxx.com)

Files 和 Filesmatch 的用途很多,你不但可以設定 deny,更可以設定 個別檔案的密碼,如

<files abc>
require user abc
</files>
<files def>
require user def
</files>


【重新導向文件 】

就是重新導向文件。

Redirect /abc http://www.xxx.com/abcabc
Redirect permanent /def http://www.xxx.com/def

即是說,如果 browser 要求 http://_____/abc 它就會重新導向至 http://www.xxx.com/abcabc。 而第二句又有甚麼不同呢?答案就是 http 的狀能碼不同,parmanet (301) 是永遠的,代表 browser 下一次未必會再要求這檔案,而直接找另一個。除了 permanent 之外,還有 temp ( 301;和不寫一樣)、seeother(303) 和 gone(410)。
也有 RedirectMatch,不過它就支援 regular expression。


【防止列出目綠內的檔案 】

其實要做到這個目標可以不用 .htaccess,你只要自己寫一頁 index.html 放入去就可以了。但是,用 .htaccess 會方便很多,在 .htaccess 中加一句。

Options -Indexes

這樣做,伺服器就不會多事地把目錄內的檔名列出。如果你只不過是想不列出某幾個檔案,請用以下的設定

IndexIgnore *.gif *.jpg

我想就算只識一點英文的人也會明白,就是在列出檔名時不理會(ignore) 後面的檔案。

Ps. 如果設定了 IndexIgnore *,它就不會列出任何檔案,但是會有 HEADER 和 README 的內容,而它們是可以自設的。

 

2007年7 月 posted by admin in Linux and have No Comments

Apache認證網頁設定

其實這篇早就該發表了,因為當時在做專題時所使用到的apache功能

今天偶然翻起專題的書面附錄,由於站長的部落格主要是為了以後方便查詢

避免同樣的問題卻突然忘記而迷失在google大海中盲目的搜尋

因此就把它記錄下來

在/etc/httpd/conf.d/下新增一檔案nagios.conf(或直接寫在httpd.conf)內容為  

             <Directory "/usr/local/nagios/share">

                    Options None

                     AllowOverride None

                    Order allow,deny

                    Allow from all

                    AuthName "Nagios Access"

                    AuthType Basic

                    AuthUserFile /usr/local/nagios/etc/htpasswd.users

                    Require user nagios(視你所設的帳號修改)

                </Directory>
 

 

建立使用者帳號:

  htpasswd -c /usr/local/nagios/etc/htpasswd.users nagios

  #註:第一次建立使用參數-c產生htpasswd.users,以後每新增一帳號不需加參-c
  

另外由於常常會需要看系統資訊

而看系統資訊最好的幫手莫過於phpinfo了

<?
phpinfo();
?>

2007年7 月 posted by admin in Linux and have No Comments

設定VNCServer

指定用哪個 XWindow 是設定在 $HOME/.vnc/xstartup 裡

#!/bin/sh
xrdb $HOME/.Xresources
xsetroot -solid grey
xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
gnome-session & (==> for GNOME)
startkde & (==> for KDE)

去掉原來陽春的 twm &,改成上述紅色適用的XWindow

 

上面是擷取舊網誌的資料,之前就講過了

而今天要說的是如果哪天公司或家裡有設防火牆,

如果只開啟port 5801指能確認身分,但不能通過驗證 

因此需要開啟port 5801與5901

實際連線時的操作是經由port 5901與VNC Server溝通 

 

另外,如果你是一般使用者的話xstartup路徑將會在

/var/www/html/.vnc/xstartup

2007年5 月 posted by admin in Linux and have No Comments

phpMyAdmin中使用者只能操作與看到自己的資料庫

之前使用學校的空間架設論壇

老師給我的phpMyAdmin權限只能看到自己的資料庫與test資料庫

其它更改自己的權限與瀏覽別人的資料庫的權限是關閉的

這麼一來資料庫也變得比較安全

如今我自己在家的電腦也架設了幾個需要用到資料庫的網站

而且也分給不同網站建置者使用MySQL

因此決定要使用和學校一樣的方式提升資料庫的安全

引用來源 

一.利用phpMyAdmin這套軟體來新增學務系統的資料庫使用者帳號,並建立一個新的資料庫給此帳號來使用。

1.安裝phpMyAdmin

cd /home/x/public_html #進入x的家目錄
wget http://ftp.ccu.edu.tw/pub/packages/database/phpmyadmin/phpMyAdmin-2.7.0-rc1.tar.gz #下載phpMyAdmin
tar zxvf phpMyAdmin-2.7.0-rc1.tar.gz #解壓縮
mv phpMyAdmin-2.7.0-rc1 phpMyAdmin #將解完的目錄更名為phpMyAdmin

2.修改phpMyAdmin的設定檔config.default.php

vi phpMyAdmin/config.default.php

3.修改31行,設定phpMyAdmin的執行網址(記得按A,以進入編輯模式):

$cfg['PmaAbsoluteUri'] = 'http://網址/~x/phpMyAdmin/';

4.修改71行,設定phpMyAdmin的認證方式,建議用http較安全,不建議用config跟cookie:

$cfg['Servers'][$i]['auth_type'] = 'http';

最後按 Esc ,輸入「:wq」儲存離開。

5.打開瀏覽器,輸入剛剛在31行所寫的phpMyAdmin執行網址,然後用root帳號跟密碼登入。

6.先建立一個資料庫,資料庫名稱的第一個字一定要是英文,不可用數字。

圖 1. 建立資料庫
圖 1. 建立資料庫

7.點選「權限」,準備新增使用者。

圖 2. 設定權限
圖 2. 設定權限

圖 3. 新增使用者
圖 3. 新增使用者

8.輸入使用者名稱.主機跟密碼,下面的整體權限皆不給,也就是說,他只能看到自己能用的資料庫而已,別的資料庫一律無法讓他使用。

圖 6. 設定新使用者帳號密碼和整體權限(整體權限不要勾)
圖 6. 設定新使用者帳號密碼和整體權限(整體權限不要勾)

9.指定剛剛新增的資料庫給新使用者用:

圖 7. 指定該使用者能用的資料庫
圖 7. 指定該使用者能用的資料庫

注意喔!

萬一您點選「權限」出現錯誤訊息時:

圖 8. 權限表太舊所產生的訊息
圖 8. 權限表太舊所產生的訊息

那表示您的權限紀錄表太舊,解決方法很簡單:
1.用root身份ssh連回主機中
2.在任何地方下以下指令:mysql_fix_privilege_table 資料庫管理者密碼
3.若找不到 mysql_fix_privilege_table 指令,那麼用 locate mysql_fix_privilege_table 找一下,並以完整路徑來執行以上指令即可。
4.再回到phpMyAdmin就OK囉!

10.把該資料庫的功能權限都開給他,但管理權限則否。

圖 4. 設定該使用者對該資料庫的權限
圖 4. 設定該使用者對該資料庫的權限

11.登出phpMyAdmin,然後以新使用者的身份登入,如果看見如以下訊息,那表示OK囉!

圖 5. 重新以新使用者身份登入試試
圖 5. 重新以新使用者身份登入試試
小常識

您也可以用指令來新增資料庫,並指定可以使用此資料庫的使用者:
CREATE DATABASE `資料庫名稱`;
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,INDEX,ALTER,CREATE TEMPORARY TABLES ON 資料庫名稱.* TO '資料庫帳號'@'localhost' IDENTIFIED BY '資料庫密碼' ;

小技巧 若忘了MySQL的管理者密碼該怎麼辦?

1.先停掉mysql

/etc/rc.d/init.d/mysqld stop

2.以--skip-grant-table 的參數啟動mysql

safe_mysqld --skip-grant-table&

3. 更改root 密碼

mysql mysql

mysql> UPDATE user SET password=password('newpassword') WHERE user='root';
mysql> FLUSH PRIVILEGES;
mysql> exit

4.停掉mysql再重跑
mysqladmin -uroot -p shutdown
Enter password: //輸入新設定的密碼
/etc/rc.d/init.d/mysqld start

2007年3 月 posted by admin in Linux and have Comments (2)

重新編譯核心 讓DLink DWL G122可以運行在Fdeora 5

安裝環境: 

OS:Linux kernel 2.6

無線網卡: DLink DWL G122  Ver:C1  chipsetrt73

驅動下載:http://www.ralinktech.com/ralink/data/RT73_Linux_STA_Drv1.0.3.6.tar.gz
 

Linux編譯核心所需套件:

  • make
  • gcc
  • kernel-source 及 (或) kernel-header 及 (或) kernel-devel

kernel-devel:驅動程式在編譯時會使用到的一些函式庫或系統資料

假使一開始沒有裝 kernel-devel套件時,使用yum安裝者同時也要更新kernel

因為使用yum會裝最新版的kernel-devel,新版的目錄位置會與舊版kernel不同,導致在編譯驅動程式時會找不到目錄。

還有一點要注意的,Linux kernel 2.6 以後的版本,預設將核心原始碼放在 /usr/src/kernels/(version) 這個目錄內

但一般程式卻是假設核心原始碼在 /usr/src/2.6.XX-X.XXXX_FC5

因此多加了一行指令:

ln -s /usr/src/kernels/(version) /usr/src/2.6.XX-X.XXXX_FC5

裡面雖然安裝過程已經寫的很清楚了,但如果對英文有排斥的人可以參考這篇中文

2007年2 月 posted by admin in Linux and have No Comments

使用 Linux 系統寄信

用 Linux 來寄信,最常使用的就是 mail 這個指令了,基本的使用情況是這樣的:

引用來源 

寄出一般文字信件:

  可以輸入 mail id@person.domain.name 來寄出信件。 


· 寄出檔案:

  你也可以直接以 vi 先編輯好一個檔案之後,再傳送出去!例如你寫好了一個檔案,名稱為 mail_raw 則寄出去可以寫成這樣:

 

2007年2 月 posted by admin in Linux and have No Comments