Posts Tagged ‘ Linux

將 Samba 昇級成 3.0.13

為什麼要將 Samba 昇級成 3.0.13 呢? 唉…還不是為了 Unicode。原本的 2.2.7 版本,我再怎麼設定,都無法顯示 Unicode 字元。所以本來在 Windows 裡顯示得好好的 Unicode 檔名,放到 Samba 裡就破功了! 我想,這個問題應該是很難讓人接受的吧?!

而最後結論就是,昇級成 3.0.13 就搞定了。

Read more

安裝 Samba 伺服器 *

Samba 這個套件的功用,可以讓你把 Linux 伺服器變成 Windows 裡的「網路上的芳鄰」中的一台電腦,提供檔案伺服器的服務,即使在沒有網域管理(Domain)的區域網路環境中,也可以提供比 Windows 網路上的芳鄰更多的權限控管。

本教學只介紹兩種常用的配置方式:

  • 開放式的設定
  • 需要身份驗證的設定
  • 安裝好 Samba 套件之後,就可以開始進行設定了。

    安裝 Samba

  • 使用 Apt 安裝 Samba 套件:
  • apt-get install samba
  • 啟用 Samba 服務:
  • service smb start
    爾後如果有修改 Samba 的設定,只要輸入下列指令重新載入即可:
    service smb reload

    開放式的設定

    開放式的意思,就是不用任何身份驗證,就可以存取提供 Samba 服務的伺服器。以下的範例,是設定區域網路裡的任何用戶都可存取伺服器,並分享 [/tmp] 裡的檔案:

  • 編輯 /etc/samba/smb.conf,設定如下:
  • [global]
    #欲加入的群組名稱
    workgroup = WORKGROUP
    #在「網路上的芳鄰」顯示的電腦名稱,如果不設定,就會以目前的 HostName 去掉網域名稱顯示。
    netbios name = FileServer
    #伺服器的註解
    server string = Samba 檔案伺服器
    #設定哪些電腦可以存取伺服器(以空白隔開)
    hosts allow = 192.168.1.0/255.255.255.0 127.0.0.1
    #顯示繁體中文
    client code page = 950
    #身份驗證的方式
    security = share
    
    #分享 [/tmp]
    [tmp]
      path = /tmp
      comment = 檔案暫存區
      public = yes
      writable = yes
      create mode = 0666
      directory mode = 0777
  • 重新啟動 Samba 服務:
  • service smb restart

    需要身份驗證的設定

    如果你希望用戶要連到伺服器時,必須先輸入帳號、密碼才可以進入,並且可以存取自己的家目錄及 [/tmp],請依照下列設定:

  • 編輯 /etc/samba/smb.conf,設定如下:
  • [global]
    #欲加入的群組名稱
    workgroup = WORKGROUP
    #在「網路上的芳鄰」顯示的電腦名稱,如果不設定,就會以目前的 HostName 去掉網域名稱顯示。
    netbios name = FileServer
    #伺服器的註解
    server string = Samba 檔案伺服器
    #設定哪些電腦可以存取伺服器(以空白隔開)
    hosts allow = 192.168.1.0/255.255.255.0 127.0.0.1
    #顯示繁體中文
    client code page = 950
    #身份驗證的方式
    security = user
    #將密碼加密傳輸
    encrypt passwords = yes
    #指定密碼檔位置
    smb passwd file = /etc/samba/smbpasswd
    
    #讓用戶可以存取自己的家目錄
    [homes]
      comment = 個人資料夾
      public = no
      browseable = no
      valid users = %S
      writable = yes
      create mode = 0600
      directory mode = 0700
    
    #分享 [/tmp]
    [tmp]
      path = /tmp
      comment = 檔案暫存區
      public = no
      writable = yes
      create mode = 0666
      directory mode = 0777
  • 建立 Samba 的密碼檔,並轉換用戶到這個密碼檔:
  • cat /etc/passwd | mksmbpasswd.sh > /etc/samba/smbpasswd
    chmod 600 /etc/samba/smbpasswd
    chown root.root /etc/samba/smbpasswd
  • 重新啟動 Samba 服務:
  • service smb restart
  • 你必須要再設定用戶的密碼才可以存取:
  • smbpasswd UserName

    其它有用的參數

    以下介紹其它有用的參數,這些參數必須放在宣告的分享資源的區段下:

  • public = yes|no
  • 設定針對 Guest 是否「顯示」該分享項目。
  • browseable = yes|no
  • 設定是否「顯示」分享項目。
  • valid users = 用戶列表
  • 允許「檢視」該分享項目的用戶,可輸入「用戶名稱」或「@群組名稱」,如有多個項目,請用「,」分隔。
  • invalid users = 用戶列表
  • 不允許「檢視」該分享項目的用戶,可輸入「用戶名稱」或「@群組名稱」,如有多個項目,請用「,」分隔。
  • read only = yes|no
  • 是否唯讀。
  • writable = yes|no
  • 是否可以寫入。
  • write list = 用戶列表
  • 允許「寫入」該分享項目的用戶,可輸入「用戶名稱」或「@群組名稱」,如有多個項目,請用「,」分隔。
  • create mode = 權限
  • 建立檔案時預設的權限。
  • directory mode = 權限
  • 建立目錄時預設的權限。
  • force user = 用戶名稱
  • 建立檔案或目錄時預設的用戶。
  • force group = 群組名稱
  • 建立檔案或目錄時預設的群組。

    Samba 的變數

  • %S: 取代目前的「資源名稱」,所謂的「資源名稱」就是在 [ ] 裡面的內容。
  • ex: valid users = %S
  • %U: 代表目前登入的使用者的使用者名稱。
  • %m: 代表 Client 端的 NetBIOS 名稱。
  • %g: 代表登入的使用者的群組名稱。
  • %M: 代表 Client 端的 Internet 主機名稱,就是 HOSTNAME。
  • %L: 代表 SAMBA 主機的 NetBIOS 名稱。
  • %h: 代表目前這部 SAMBA 主機的 HOSTNAME。
  • %H: 代表使用者的家目錄。
  • %I: 代表 Client 端的 IP。
  • %T: 代表目前的日期與時間。
  • 新增 Samba 用戶

    關於 Samba 上的用戶帳號,有一些規則要說明:

  • Samba 上的用戶帳號必須是已存在於 Linux 系統的帳號。
  • Linux 系統與 Samba 用戶的密碼是不同的,它們有各自的密碼檔。
  • Samba 的密碼檔位於 /etc/samba/smbpasswd。
  • 因此,如果你要新增 Samba 用戶,你就必須先在 Linux 系統增加一個本機用戶,新增本機用戶之後,再輸入下列指令將用戶的帳號及密碼加入至 Samba 的密碼檔:

    smbpasswd -a UserName

    以後如果只是要變更該用戶的密碼,只要輸入:

    smbpasswd UserName

    用戶自行變更密碼

    原本 Samba 有提供一個 Swat 套件,就是 Samba 的網頁管理介面,不過,我覺得似乎不太夠用(給管理者用還可以)。如果我希望用戶可以自行變更 Linux 系統的密碼,並同步變更 Samba 的密碼,那就要試試 ChangePassword 套件:

  • 從本站下載 ChangePassword 套件至 [/tmp]
  • cd /tmp
    wget http://www.vixual.net/download/source/ChangePassword/changepassword-0.9.tar.gz
    tar -xzvf changepassword-0.9.tar.gz
    cd changepassword-0.9
    ./configure --enable-cgidir=/var/www/cgi-bin --enable-smbpasswd=/etc/samba/smbpasswd --disable-squidpasswd
    請注意,上面(第 5 行)的 “/var/www/cgi-bin” 請改為你的網站的 cgi-bin 路徑。
  • 然後繼續下列步驟:
  • make
    make install

    這樣就安裝完成了,以後你就可以到 “http://host.example.com/cgi-bin/changepassword.cgi” 同步變更 Linux 系統及 Samba 的密碼。

    網頁管理介面

    這個套件(Swat)其實不是那麼必要(尤其是有了上面的 ChangePassword 套件之後),但仍然列出安裝步驟給大家參考:

  • 安裝 Samba-Swat 套件:
  • apt-get install samba-swat
  • 編輯 /etc/xinetd.d/swat,搜尋:
  • disable = yes
    改成:
    disable = no
    繼續搜尋:
    only_from = 127.0.0.1
    改成允許連線的位址:
    only_from = 192.168.1.0/24
  • 重新啟動 Xinetd:
  • service xinetd restart
  • 從瀏覽器輸入連線位址:
  • http://host.example.com:901/

    參考網頁

  • Samba: User and Group Based Controls
  • Samba Documentation
  • 鳥哥的 Linux 私房菜
  • 網管專區
  • Samba 設定
  • 架設 linux 網站,如何收費?

    今天有一位朋友問我「幫人家架設 Linux 伺服器,以及轉移電子信箱該如何收費」相關的問題,我上網去找了一下,從 Google 的討論群組看到這一則討論: 架設 linux 網站,如何收費?,裡面有一段話,讓我深感認同,這段話就是…

    奉勸各位,千萬別給公眾如下的印像:

    • Linux 很容易 (no! 它比許多人想像的專業多了!)
    • Linux 很便宜 (no! 專業服務是一分錢一分活的!)

    如何即時封鎖想要用「暴力密碼」破解 SSH 的入侵者

    本程式無法處理 IPv6 的問題,請改用功能更強大、更完整的 Fail2Ban,請參考本站文章:


    粉久之前寫了一支 Log 分析的程式,可以統計、分析前一天系統的 Log,在這一份報表裡面,總是會看到有一些人使用「暴力法」,嘗試以各種帳號、密碼,藉由 SSH 或 FTP 入侵伺服器! 而我只能看著「前一天」的報表,分析他們用過哪些帳號、統計他們嘗試了幾次…實在有點不是滋味
    Read more

    實用的 screen 終端機管理程式

    screen 是一個很方便的終端機管理程式,可以讓你在同一個終端機開啟多個 Session 來操作,加強多工的處理。即使你要離開電腦,也可以將 Session 執行脫離,或直接關閉終端機,這時執行中的程式還是會繼續執行,下次登入終端機時再取回 Session 來操作即可。

    首先執行 Screen 程式,開始一個 Session:

    $ screen

    某些終端機視窗會在標題列顯示目前在操作的終端機編號,如果沒有顯示,你也可以輸入:

    $ tty

    來了解你目前正在哪個終端機中。

    以快速鍵操作

    切換時的快速鍵一開始都是 Ctrl + A

    • 新增 Session:
      Ctrl + ACtrl + C
    • 切換到上一個編號的 Session:
      Ctrl + ACtrl + P
    • 切換到下一個編號的 Session:
      Ctrl + ACtrl + N
    • 切換到指定編號的 Session:
      Ctrl + A數字鍵
    • 切換到下一個編號的 Session:
      Ctrl + ASpace
    • 在兩個 Session 之間互相切換:
      Ctrl + ACtrl + A
    • 鎖定 Session:
      Ctrl + ACtrl + X
    • 顯示 Session 列表,可供你選取:
      Ctrl + A⇧Shift + "
    • 新視窗的標題列顯示所有的 Session 編號 (其中有加上 * 表示是目前使用的 Session) :
      Ctrl + ACtrl + W
    • 水平分割視窗 (可以持續分割) :
      Ctrl + A⇧Shift + S
    • 垂直分割視窗 (可以持續分割,只有特定版本才支援,請參考後方的說明) :
      Ctrl + A⇧Shift + |
    • 在分割的視窗做切換:
      Ctrl + ATab
    • 關閉分割的視窗:
      Ctrl + A⇧Shift + Q
    • 將所有的 Session 脫離(Detach),並回到執行 screen 前的狀態:
      Ctrl + ACtrl + D
      在這種狀態下,用戶可以不須理會這些 Session。不管用戶離線或是要從別的地方登入,只要下次登入時執行:

      screen -r

      將所有 Session 叫回來繼續操作。

    • 重新命名 Session:
      Ctrl + A⇧Shift + A
    • 顯示日期、主機名稱及負載:
      Ctrl + ACtrl + T
    • 將畫面暫停 (程式仍繼續執行):
      Ctrl + ACtrl + S
    • 將暫停的畫面恢復:
      Ctrl + ACtrl + Q

    screen 的相關指令

    • 啟動 Screen 程式,開始一個 Session:
      $ screen

      或指定 Id

      $ screen -S SessionId
    • 查看同一帳號共開啟過多少個 Session 及其 Id:
      $ screen -ls
    • 取回被脫離執行的 Session:
      $ screen -r

      $ screen -r SessionId
    • 將其它的 Session 強制脫離:
      $ screen -d

      $ screen -d SessionId

      這功能適用於原本操作的電腦當機或斷線了,讓你可以在下次取回還在主機中執行的 Session。

    • 同步操作終端機 Session (兩邊必須登入相同的帳號):
      $ screen -x

      $ screen -x SessionId
    • 移除 Session:
      $ screen -wipe SessionId

    模擬頁籤顯示

    如果要在畫面底部秀出現在在哪個編號的 Session,請編輯 /etc/screenrc 或 ~/.screenrc,加入:

    hardstatus alwayslastline "%-w%{= BW}%50>%n %t%{-}%+w%<"

    同步作業說明

    假設我在我目前所操作的終端機 Session 要分享給另一端的登入者查看,並且可以操作 (或者是我不想將遠端登入的用戶脫離 Session),則我要先以我的帳號登入主機並且執行 screen -S 特定名稱,然後另一端的登入者:

    1. 以相同的帳號登入主機
    2. screen -ls 查看要取回的終端機 Session
    3. screen -x 特定名稱screen -x SessionId 進入相同的終端機 Session

    垂直分割視窗

    因為 screen 只能水平分割視窗,不能充分利用寬螢幕的特性實在有點可惜! 這裡有新版可垂直分割功能的 screen:

    垂直分割 screen 視窗

    請自行編譯安裝。

    命令別名

    因為 screen 很實用,於是我在 bashrc 建立兩個 screen 指令的別名:

    alias scr='screen -d -r Normal || screen -S Normal'
    alias scl='screen -ls'

    我只要登入終端機就先打一次 scr,以取回上一次沒關閉的 Session。如果沒有上一次沒關閉的 Session,則會建立一個新的 Session。

    scl 則可以列出目前有幾個屬於我的 session。

    參考網頁

    hdparm 參數

    測硬碟速度:

    hdparm -tT /dev/hda

    UDMA3(ATA33):

    # hdparm -X66 -c1 -d1 -m16 /dev/hda

    UDMA4(ATA66):

    # hdparm -X68 -c1 -d1 -m16 /dev/hda

    UDMA5(ATA100):

    # hdparm -X69 -c1 -d1 -m16 /dev/hda

    [轉載]Linux 上的用戶管理

    轉載自: 中文 PHP 資訊站


    在linux中,每個普通用戶都有一個帳戶,包括用戶名、密碼和主目錄等資訊。除此之外,還有一些系統本身創建的特殊用戶,它們具有特殊的意義。其中最重要的是超級用戶,在linux中,它默認用戶名是root。

    基本操作

    增加一個用戶 newuser :

    useradd newuser
    passwd newuser

    然後根據提示兩次輸入新用戶的密碼,請注意,用useradd增加一個用戶後應該立刻用passwd給新用戶修改密碼,沒有密碼的新帳號將不能使用。在/etc/passwd文件中,沒有密碼的新用戶的記錄是如下一行:

    newuser:!!:506:506::/home/newuser:/bin/bash

    在這一行裏,用戶的密碼域被設置成了”!!”,這就意味著用戶密碼還沒有設置,用戶不能登陸。(passwd文件的格式是 用戶名:密碼:用戶ID(UID):組ID(GID):全名:用戶目錄:外殼腳本)。

    當然你可以用-d參數設置新用戶的主目錄(例如:useradd newuser -d /www),也可以用-g參數為用戶指定新組名(例如:useradd newuser -g linuxusers),你還可以用-G參數把新用戶設成系統其他一些組的成員(例如:useradd newuser -G users,shutdown)。所有這些,你都可以在本站的命令查詢中得到詳細資訊。

    附注:相應的,僅僅增加一個新組可以用命令groupadd。

    修改現有用戶的帳號:

  • 修改密碼
  • 普通用戶可以用passwd修改自己的密碼,只有管理員才能用passwd username為其他用戶修改密碼。
  • 修改用戶shell設置
  • 使用chsh命令可以修改自己的shell,只有管理員才能用chsh username為其他用戶修改shell設置。注意,指定的shell必須是列入/etc/shells文件中的shell,否則該用戶將不能登陸。
    你也可以使用usermod命令修改shell資訊,如下所示:
    usermod -s(new shell path)(username)
    其中new shell path和username應取相應的值。
  • 修改主目錄設置
  • usermod -d(new home directory)(username)
    如果想將現有主目錄的主要內容轉移到新的目錄,應該使用-m參數,如下所示:
    usermod -d -m/www/newuser newuser
  • 修改UID
  • usermod -u UID username
    主目錄中所有該用戶所擁有的文件和目錄都將自動修改UID設置。但是,對於主目錄外該用戶所擁有的文件,只能手工用chown命令修改所有權設置。
  • 修改默認組設置
  • username -g(group name) or GID username
  • 修改帳號的有效期
  • 如果使用了影子密碼,則可以使用如下命令來修改一個帳號的有效期:
    usermod -e MM/DD/YY username
    例如把用戶newuser的有效期定為12/31/01:
    usermod -e 12/31/01 newuser
  • 刪除或禁止用戶帳號
  • 使用userdel命令刪除現有用戶。例如,下面的命令將刪除bluewind用戶:
    usedel bluewind
    如果想同時刪除該用戶的主目錄以及其中所有內容,要使用-r參數來遞迴刪除。值得注意的是你無法刪除已經進入系統的用戶,如果想強行完成,需要先killall有關它的進程,然後再運行userdel命令。
  • 如果只是想暫時禁止某個帳號,可以使用下列方法:
  • - 使用無效的shell。例如使用usermod -s newshell username將用戶的 shell改為/bin/false(最好把它列入/etc/shells文件裏)。
    - 使該帳號過期。如果使用影子密碼,可使用usermod -e MM/DD/YY username命令使該帳號過期。
    如果想禁止所有帳號(root帳號當然除外)的訪問,可以創建一個名為/etc/nologin的文件,說明系統暫時不允許訪問。注意,確認你還能用root直接登陸才使用這個辦法,否則你慘了。

    本文中的所有命令都可以在linuxaid獲得中文詳細的幫助,下面我們一起來繼續探討有關用戶管理的高級內容。

    建立多個超級用戶

    不少新系統管理員認為root用戶是唯一的超級用戶,其實root只是系統默認的超級用戶的名稱,root並非因為它叫root而成為超級用戶的。隨便打開一個/etc/passwd文件的例子,你就會發現如下幾行:

    root:asiewhgYfaoO/J:0:0:root:/root:/bin/tcsh
    bin:*:1:1:bin:/bin:
    daemon:*:2:2:daemon:/sbin:
    lanf:Yuao56Ioyefg:0:0:bluewind:/home/bluewind:/bin/bash
    jake:gUyfaiIodashfj:501:501:jake cheng:/home/jake:/bin/tcsh
    apache:!!:502:502::/usr/local/apache:/bin/false

    可以看到,root的UID和GID都被設置為0了。實際上,超級用戶的充要條件就是UID和GID都等於0。也就是說,任何用戶,只要它的UID和GID都為0,就與常被稱為root超級用戶沒有什麼兩樣了。比如上面那個例子裏面的lanf,也是一個超級用戶。

    所以,可以將任何普通用戶變成超級用戶。但是,這樣做並沒有好處,很多時候這都會增加系統的隱患。除非在組織中需要多個系統管理員管理同一個系統,這就需要有多個超級用戶帳號。這有利於各個管理員明確責任,通過日誌知道不同的人分別做過什麼事。

    還有一種情況,也可能出現多個超級用戶帳號,那就是黑客入侵後設置一個看起來象普通帳號的用戶,卻修改了UID和GID使之為0。這樣根本就不需要知道root用戶密碼,就可以執行超級用戶許可權了。而從我們的系統管理員的一方來說,我們不可能時刻注意passwd文件的變化的,沒有那個時間也沒有那個精力。這時只好編寫一個腳本來幫助監視,例如:

    /bin/grep '0:0' /etc/passwd |awk 'BEGIN{FS=":"}{print $1}'|mail -s "`date +"%D%T"`"root

    這是一個很小的腳本程式,使用了一些常規的命令來查看/etc/passwd文件,把UID和GID為0的行寄給root用戶。把這個腳本放在/etc/cron.daily文件中讓cron運行,root將每天收到一封信,報告當前的超級用戶。

    實際上,由於PAM(可插入驗證模組)的限制,在telnet上是不允許超級用戶登入的,也就是說,黑客修改了自己的UID和GID後,想再次登陸從而獲得超級用戶的許可權的話,不修改/etc/seuretty文件是不可能的–除非你傻到自己添加了為TTY設備ROOT用戶登陸許可權。一般可以讓超級用戶先用普通用戶帳號登陸,再su(su命令相關內容請參考本站命令查詢部分)。

    為普通用戶分配特權

    使用sudo命令可以允許普通用戶執行超級用戶才能執行的命令。無論是基於信任的建立需要時間,還是基於是否存在這種必要,我們都不會把超級用戶的所有權限輕易許人的。這是網管工作的原則。所以,當一些用戶必須訪問某些內容時,我們可以配置sudo以允許單獨的普通用戶運行特權命令。

    sudo命令允許已經在/etc/sudoers文件中指定的用戶運行超級用戶命令。例如,一個已經獲得許可的普通用戶可以運行:

    sudo vi /etc/passwd

    實際上,sudo的配置完全可以讓我們指定某個列入/etc/sudoers文件的普通用戶可以做什麼、不可以做什麼。/etc/sudoers的配置行如下:

  • 空行或注釋行(以#字元打頭):無用行。
  • 可選的主機別名行:用來創建主機列表的簡稱。必須以Host_Alias關鍵字開頭,列表中的主機必須用逗號隔開。例如:
  • Host_Alias REDHAT=binbu,qd

    其中binbu和qd是倆主機名,你可以用REDHAT(別名)統稱它們。

  • 可選的用戶別名行:用來創建用戶列表的簡稱。用戶別名行必須以User_Alias關鍵字開頭,列表中的用戶名必須以逗號隔開。其格式同主機別名行。
  • 可選的命令別名行:用來創建命令列表的簡稱。必須以Cmnd_alias開頭,列表中的命令必須用逗號隔開。
  • 可選的運行方式別名行:也是用來創建用戶列表的簡稱。不同的是,使用這樣的別名可以告訴sudo程式以列表中某一用戶的身份來運行程式。
  • 必要的用戶訪問說明行:用戶訪問的說明語法如下:
  • user host= [run as user ] command list

    在user處指定一個真正的用戶名或定義過的別名,同樣的,host也可以是一個真正的主機名或者定義過的主機別名。默認情況下,sudo執行的所有命令都是以root身份執行。如果你想使用其他身份可以指定。至於command list可以是以逗號分隔的命令列表,也可以是一個已經定義過的別名。例如:

    lanf binbu=/sbin/shutdown

    這一句說明lanf可以在binbu主機上運行關機命令。

    注意:

  • 可以在一行定義多個別名,中間用:隔開。
  • 可以在命令或命令別名之前加上!號,使該命令或命令別名無效。
  • 有兩個關鍵字:ALL 和NOPASSWD。ALL意味著”所有文件”(所有主機或所有命令),NOPASSWD意味著不用密碼。
  • 下面是一個sudoers文件的例子:

    #sudoers files#User alias specificationUser_Alias ADMIN=yourid:POWERUSER=hisid,herid#user privilege specification ADMIN ALL=ALLPOWERUSER ALL=ALL,!/bin/su

    第三行定義了兩個別名ADMIN和POWERUSER,第五行說明在所有主機上ADMIN都可以以root身份執行所有命令。第六行給POWERUSER除了運行su命令外同等ADMIN的許可權。

    iptables 防火牆的一些基本用法

  • 列出目前的規則
  • iptables -L -n
  • 刪除 “INPUT” 的第 1 條規則
  • iptables -D INPUT 1
  • 丟棄來自 192.168.1.203 的封包
  • iptables -A INPUT -p all -s 192.168.1.203 -j DROP
  • 禁止 192.168.1.203 的用戶以 SSH 登入(Port:22)
  • iptables -A INPUT -p tcp -s 192.168.1.203 --dport 22 -j DROP
  • 儲存防火牆的設定到 filename
  • iptables-save > filename
  • 從 filename 讀取防火牆的設定
  • iptables-restore < filename

    .htaccess 簡易的網頁帳號認證

    .htaccess 讓你不用寫程式,就可以用最簡單的方式做出「網頁登入」的功能,限制哪些用戶能進到網頁的某一層目錄。

    建立用戶驗證資料

    建立用戶驗證檔

    建立用戶驗證檔,並新增一組帳號及密碼:

    htpasswd -c /path/to/.htusers UserName1

    這裡所產生的 .htusers 是一個文字檔,裡面會有用戶名稱及編碼過的密碼。第一次建立檔案時,必須加 -c 參數。同時,請找一個安全的地方放置 .htusers 這個檔案,所謂的「安全」是指至少不要在公開網頁可以被下載到的路徑,例如放在 public_html 的上一層。

    繼續增加第二組帳號及密碼到驗證檔時,就不用加 -c 參數:

    htpasswd /path/to/.htusers UserName2

    建立群組資料檔

    如果用戶比較多,你可能會想要用群組的方式來做管理。群組資料檔的目的是要將多個用戶設為一個群組,請新增或編輯 /path/to/.htgroups,依需求增加類似如下的設定:

    Group1:UserName1 UserName2

    代表 Group1 包含 UserName1UserName2 這兩個用戶。

    驗證登入

    在欲執行用戶驗證的網頁目錄下,建立一個 .htaccess 檔案,驗證的方式可針對用戶或群組,差別在於 require 這個參數。

    針對用戶:

    AuthName "Restricted Area" # 名稱必須用英文
    AuthType Basic
    AuthUserFile /path/to/.htusers
    require user UserName1 # 僅針對特定用戶,以空白分隔多個用戶

    上述的最後一行是只有 UserName1 允許進入,你也可以改成:

    require valid-user # 針對全部用戶

    表示針對 .htusers 裡的所有用戶。

    針對群組:

    AuthName "Restricted Area" # 名稱必須用英文
    AuthType Basic
    AuthUserFile /path/to/.htusers
    AuthGroupFile /path/to/.htgroups
    require group Group1 # 僅針對特定群組的用戶,以空白分隔多個群組

    表示針對 .htgroups 裡,歸屬於 Group1 下的用戶。

    針對特定檔案:

    若你只想針對特定檔案做保護,那可以與 <Files>~</Files> 一起使用:

    <Files FileName>
         require valid-user
    </Files>

    <Files>~</Files> 一次只能填寫一個檔案,但支援正規表示式。以下是使用正規表示式限制圖檔存取的範例:

    <Files ~ "\.(gif|jpe?g|png)$">
         require valid-user
    </Files>

    或是:

    <FilesMatch "\.(gif|jpe?g|png)$">
         require valid-user
    </FilesMatch>

    設定好之後,當用戶要存取該目錄 (或檔案),就會跳出叫你登入的對話框:


    另外,你也可以在網址中直接輸入你的帳號、密碼,格式:

     http://UserName:Password@www.example.com/directory/

    問題排除

    如果在設定 htaccess 認證方式之後,在進入網頁時,仍然沒有跳出驗證的對話框,則請編輯 /etc/httpd/conf/httpd.conf,搜尋相關的「AllowOverride」設定,改成:

    AllowOverride All

    安全性問題

    雖然用戶儲存在 Server 端的密碼有經過加密,但因為是採用 Basic 方式驗證,當要存取網頁時,用戶輸入的帳號與密碼僅是以 Base64 編碼,包裹在 Headers 裡進行傳輸,有機會被竊聽之後解碼、盜用! 網站必須導入 SSL 才能完全在傳輸的過程中加密。

    參考網頁

    [Perl]格式化系統 LOG 分析 *

    本文件是參考鳥哥寫的 logfile.sh,我把它改成符合我自己系統的 LOG 分析程式,全面以 Perl 重寫。我自己用了一段時間 (其實也半年了),覺得勉強還可以用,所以公開給大家用看看…
    Read more

    return top