Vixual / 106 posts / tags / 31 comments / feed / comments feed /
Search:

Posts Tagged ‘linux’


突然想到 MySQL 備份的問題,其實 MySQL 本身有一個 “mysqldump” 的指令,可以用來備份/還原資料庫的內容,用這個指令來備份資料通常沒什麼問題,但當你要把資料還原時,除非裡面沒有中文字,否則,中文字的衝碼,經常會導致還原失敗!

解決的方法

  • 方法一: 改用 UTF-8 編碼格式儲存資料,即可繼續使用 mysqldump 指令。
  • 方法二: MySQL 的資料庫放在 [/var/lib/mysql] 下,直接將 [/var/lib/mysql] 下的資料庫目錄用 “tar” 指令備份起來即可(備份及還原前最好先暫停 MySQL 的服務)。
  • P.S.我已經儘量都把程式及資料庫改成 UTF-8 編碼了,但我還是用 “方法二” 來備份資料的。

    程式說明

    screen 是一個很方便的程式,可以讓你在同一個畫面開啟多個終端機來操作,即使你要離開電腦,也可以將終端機放到背景執行,下次登入時,再取回來操作。

    首先啟動 Screen 程式:

    screen

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

    tty

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

    以快速鍵操作

  • Ctrl + A -> C
  • 新增終端機畫面。
  • Ctrl + A -> P
  • 切換到上一個編號的終端機畫面。
  • Ctrl + A -> N
  • 切換到下一個編號的終端機畫面。
  • Ctrl + A -> Ctrl + A
  • 在兩個終端機之間互相切換。
  • Ctrl + A -> X
  • 鎖定終端機畫面。
  • Ctrl + A -> Shift +
  • 顯示終端機列表,可供你選取。
  • Ctrl + A -> W
  • 新視窗的標題列顯示所有的終端機編號 (其中有加上 “*” 表示是目前使用的終端機)。
  • Ctrl + A ->Shift + S
  • 水平分割視窗 (多按幾下可以持續分割)。
  • Ctrl + A -> Tab
  • 在分割的視窗做切換。
  • Ctrl + A -> D
  • 將終端機的程序及畫面放到背景執行。在這種狀態下,用戶可以不須理會這個終端機,即使用戶離線了,只要下次登入時,就可以輸入:
    screen -r
    將這個終端機叫回來繼續操作。

    screen 的相關指令

  • 啟動 Screen 程式:
  • screen
  • 查看目前已開啟多少個終端機:
  • screen -ls
  • 取回被放到背景執行的終端機:
  • screen -r
    如有多個終端機要取回,可以在指令的後面接著輸入要取回的終端機名稱。
  • 將終端機放到背景執行:
  • screen -d 終端機名稱

    相關網頁

  • http://www.seety.org/Members/yungyuc/yblog/213
  • 測硬碟速度:

    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

    轉載自: 中文 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 -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 驗證方式」可以達到以較簡單的方式來規範網頁目錄的讀取權限,以限制哪些用戶可以進入到網頁的哪一層目錄。

    建立用戶驗證檔

  • 建立用戶驗證檔,並新增一組帳號及密碼:
  • htpasswd -c /usr/local/etc/htusers UserName1
  • 繼續增加一組帳號及密碼到驗證檔:
  • htpasswd /usr/local/etc/htusers UserName2

    建立群組資料檔

    群組資料檔的目的是要將多個用戶設為一個群組,請新增或編輯 /usr/local/etc/htgroups,依需求增加類似如下的設定:

    Group1:UserName1 UserName2

    登入驗證檔

    在欲執行用戶驗證的網頁目錄下,建立一個 .htaccess 檔案,驗證的方式可針對使用者或群組。

  • 針對用戶:
  • AuthName " 請輸入帳號與密碼"
    AuthType Basic
    AuthUserFile /usr/local/etc/htusers
    require user UserName1
    上述的最後一行是針對 UserName1 做驗證,你也可以改成:
    require valid-user
    表示針對 /usr/local/etc/htusers 裡的所有用戶。
  • 針對群組:
  • AuthName " 請輸入帳號與密碼"
    AuthType Basic
    AuthUserFile /usr/local/etc/htusers
    AuthGroupFile /usr/local/etc/htgroups
    require group Group1

    問題排除

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

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

    ImageMagick 是個功能強大的圖片工具,讓你讀取、寫入、操作任何熱門的圖片格式,如 GIF、JPEG、PNG、PDF… 等。使用 ImageMagick 可以即時的建立 GIF 的圖片檔案,讓圖形可以更融入網頁等應用介面。你也可以更改圖片的大小、反轉圖形、增強亮度、減少顏色對比、加入額外特殊的效果。圖片可以儲存不同的格式依你的工作需求。
    繼續閱讀 »

    教你快速安裝 Redhat Linux 7.3,這也是本站的伺服器架構…

    特點及功能如下

  • 使用單純的結構,以提供主流服務,系統將不安裝 X-Window 介面。
  • 具備 ProFtp、Sendmail、Webmail、web 及資料庫 (MySQL) 的服務。
  • 可使用瀏覽器在線上做系統管理 (WebMin)、資料庫維護 (phpMyAdmin) 及流量監控 (Mrtg)。
  • 每天與時間伺服器對時。
  • 每週自動更新系統的套件。
  • 繼續閱讀 »

    故名思意,pop-before-smtp 就是在 smtp 前,先用 pop3 的帳號登入,以確保伺服器上有你的帳號。以下的步驟,先將 Sendmail 換成 Postfix,再將 smtp 的認証則改用 pop-before-smtp 的方式。

    安裝 Postfix

  • 先移除 sendmail:
  • apt-get remove sendmail
  • 使用 apt 安裝 postfix:
  • apt-get install postfix
  • 編輯 /etc/postfix/main.cf,搜尋之參數及修改方式如下:
  • myhostname  ->  host.example.com
    mydomain  ->  example.com
    myorigin  ->  $myhostname
    inet_interfaces  ->  all
    mydestination  ->  /etc/postfix/local-host-names
    mynetworks  ->  127.0.0.0/8, hash:/etc/postfix/access
    relay_domains  ->  $mydestination
    alias_maps  ->  hash:/etc/postfix/aliases
  • 設定本機收件時的領域名稱,將領域名稱新增到 /etc/postfix/local-host-names,每個名稱佔一行:
  • example.com
    mail.example.com
    host.example.com
  • 初始化相關資料庫:
  • postmap hash:/etc/postfix/access
    postalias hash:/etc/postfix/aliases
  • 至此已完成 Postfix 的安裝,直接啟動 Postfix 即可:
  • service postfix start

    安裝 pop-before-smtp

    顧名思義,pop-before-smtp 就是在寄信前,必須先用 pop3 檢查郵件,只要 pop3 登入正確,你就可以用同一台伺服器寄信 (30分鐘內)。安裝步驟如下:

  • 安裝 Perl 的 File::Tail、Time::HiRes、Net::Netmask、Date::Parse 模組,建議使用 WebMin 安裝,或執行下列指令:
  • perl -MCPAN -e 'install File::Tail'
    perl -MCPAN -e 'install Time::HiRes'
    perl -MCPAN -e 'install Net::Netmask'
    perl -MCPAN -e 'install Date::Parse'
  • 從本站下載 pop-before-smtp 的安裝檔至 /tmp,並執行安裝:
  • cd /tmp
    wget http://www.vixual.net/download/source/postfix/pop-before-smtp-1.33-1.noarch.rpm
    rpm -ivh pop-before-smtp-1.33-1.noarch.rpm
  • 編輯 /etc/pop-before-smtp-conf.pl,將下列三行前的註解 # 拿掉:
  • #$file_tail{'name'} = '/var/log/maillog';
    #$grace = 30*60;
    #$dbfile = '/etc/postfix/pop-before-smtp';
  • 編輯 /etc/postfix/main.cf,在最後面加上:
  • smtpd_recipient_restrictions = permit_mynetworks,reject_non_fqdn_recipient,check_client_access hash:/etc/postfix/pop-before-smtp,check_relay_domains
  • 啟動 pop-before-smtp,並重新載入 postfix:
  • service pop-before-smtp start
    service postfix reload