linux系统中各个文件描述——陆续添加
1、/etc/inputrc
通過設置INPUTRC環境變量(參見/etc/profile文件),其作用主要定義或者改變一些功能鍵的定義,從而更好地使用命令行,通常情況下INPUTRC環境變量指向 /etc/inputrc文件,只要編輯/etc/inputrc文件,以及利用Tab鍵的命令補全功能,就可以實現類似于MSDOS的DOSKEY的功能。
以Redhat 7.3為例來說明,使用的bash shell版本號為2.0.5。你可以根據自己的需要定制與修改此文件,如想了解更多的內容,可以參閱man bash文檔。
定制/etc/inputrc文件內容如下:
set bell-style none
set meta-flag on
set input-meta on
set convert-meta off
set output-meta on
set show-all-if-ambiguous On
"e[1~": beginning-of-line???? # home
"e[2~": insert-last-argument # insert
"e[3~": delete-char?????????? # delete
"e[4~": end-of-line?????????? # end
"e[5~": backward-kill-word??? # page up
"e[6~": kill-word???????????? # page down
# (F1 .. F5) are "e[[A" ... "e[[E"
"e[18~": history-search-forward??????????? # F7
"e[19~": history-search-backward?????????? # F8
具體修改說明如下(注以下[]中的內容為所按的鍵):
set bell-style none
關閉計算機小喇叭發出的聲音。
set meta-flag on
set input-meta on
set convert-meta off
set output-meta on
這幾行主要是實現命令行上實現漢字的輸入以及顯示。比如想輸入漢字的文件名等等。
set show-all-if-ambiguous On
這一行主要是使命令補全的功能更好的發揮。許多Linux初學者并不知道這個功能,就是使用[Tab]鍵,能夠減少鍵盤的敲打以及拼寫錯誤。比如當前你想執行ifconfig命名,你輸入if后按[Tab]鍵兩次,就會出現所有以if開頭的命令,文件名和目錄名也可以使用這個方法輸入,當打開上述命令后可以使用[Tab]鍵,僅僅需要按一次,這樣更加方便與快捷。
"e[1~": beginning-of-line???? # home
"e[2~": insert-last-argument # insert
"e[3~": delete-char?????????? # delete
"e[4~": end-of-line?????????? # end
"e[5~": backward-kill-word??? # page up
"e[6~": kill-word???????????? # page down
這幾行主要是使命令行編輯方便,[home]、[delete]、[end]鍵保持原意,意指移動到命令行的開始、刪除一個字符、移動到命令行尾。
[insert] 鍵被定義為插入上一個命令的最后一個參數。比如執行如下命令:
$ mount /mnt/cdrom
$ cd[space][insert]??????
# 相當于 執行 cd /mnt/cdrom
可以試著按[insert]鍵幾次看看會有什么出現內容.
[Pageup]和[PageDown]鍵定義為向前和向后刪除單詞。
"e[18~": history-search-forward??????????? # F7
"e[19~": history-search-backward?????????? # F8
[F7]和[F8]定義為命令歷史查找功能,有點向MSDOS的DOSKEY功能類似,比如前面使用過mount命令,再次輸入mount后按[F8]會調出先前使用的命令,特別是當命令非常長參數非常多的時候。
二.安裝bash-completion
如果經常你使用[tab]鍵命令補全功能,就會發現它的不足之處,你可以發現它不能根據具體的需要或者命令補全所需要的參數與文件或者目錄。例如你執行cd [tab],系統會將文件與目錄一起顯示出來,而實際上這時你僅僅需要顯示文件類型為目錄。bash從2.05版開始,已經加入命令complete內部命令,從而能夠使用復雜的命令行接口,通過一個復雜的腳本bash_completion實現可編程的補全程序,減少系統管理員日常維護工作,減少差錯提高工作效率。
具體操作如下:
1. 下載最新的bash-completiton腳本,檢查bash的版本號【執行bash --version】,如果版本低于2.0.5最好升級bash.
http://www.caliban.org/files/bash/bash-completion-latest.tar.gz
http://www.caliban.org/files/redhat/RPMS/i386/bash-2.05-51.i386.rpm
2. 安裝
# rpm -Uvh bash-2.05-12.i386.rpm????
# tar xzvf bash-completion-latest.tar.gz -C /tmp
3. 仔細閱讀bash_completetion目錄下的README文件,修改/etc/bashrc文件,在行尾加入如下命令:
bash=${BASH_VERSION%.*}; bmajor=${bash%.*}; bminor=${bash#*.}
?? if [ "$PS1" ] && [ $bmajor -eq 2 ] && [ $bminor '>' 04 ]?
???? && [ -f /etc/bash_completion ]; then # interactive shell
??????? # Source completion code
??????? . /etc/bash_completion
?? fi
?? unset bash bmajor bminor
4. 拷貝bash_completion文件:
# cp /tmp/bash_completion/bash_completion /etc
注銷再重新進入后,你就會發現許多命令在使用命令補全時都會發生一些變化。
通過以上的修改,你會發現在命令行上使用Linux,同樣高效與快捷,減少了許多不必要的錯誤。
2、/.bash_profile ? ?~/.bash_login ? ~/.profile
這三個文檔有一個就可以了,用來定義個人化的路徑與環境變量,bash啟動時,先讀取~/.bash_profile,如果找不到,就去讀取 ~/.bash_login,如果還找不到,那就讀取~/.profile。
3、~/.bashrc
我們一般把自己的個性化定制環境變量寫在這里,如命令別名、路徑等等。這個文件在每次執行shell script的時候都會被重新使用一遍,所以是最完整的的。而上頭的~/.bash_profile 則只有在登入的時候會被讀取一次。
4、~/.bash_logout
這個文件記錄了當我注銷bash后,系統再幫我做完什么動作后才離開。預設情況下,注銷bash只是幫我們清掉屏幕訊息,不過我們也可以將一些備份或者其他你認為重要的工作寫在這個文件中(例如清空暫存盤)。
5、/etc/login.defs
與密碼還有 UID/GID 有關的設定檔則是在 /etc/login.defs 里面, 這個檔案有點像這樣:
MAIL_DIR /var/spool/mail ? ?<==使用者預設郵件信箱放置目錄
PASS_MAX_DAYS 99999 ? ?<==/etc/shadow 內的第 5 欄
PASS_MIN_DAYS 0 ? ?<==/etc/shadow 內的第 4 欄
PASS_MIN_LEN 5 ? ?<==密碼最短的字符長度,建議可以改到 6 以上
PASS_WARN_AGE 7 ? ?<==/etc/shadow 內的第 6 欄
UID_MIN 500 ? <==使用者最小的 UID,意即小于 500 的 UID 為系統保留
UID_MAX 60000 ? ?<==使用者能夠用的最大 UID
GID_MIN 500 ? ?<==使用者自訂群組的最小 GID,小于 500 為系統保留
GID_MAX 60000 ? ?<==使用者自訂群組的最大 GID
CREATE_HOME yes ? ? <==在不加 -M 及 -m 時,是否主動建立使用者家目錄?
看到這個檔案后,您應該曉得的是,為何新建的使用者的 UID 都會大于 500 了吧? 而且某些版本的 distributions (例如 SuSE server 9) 則是將 UID_MIN 設定為 1000 , 所以,他的一般身份使用者的 UID 就會從 1000 起跳啰~ 那如果我現在新增一個使用者,這個使用者的 UID 會是多少?答案是:『 如果 /etc/passwd 里面的賬號所屬的 UID 沒有大于 /etc/login.defs 里頭的 UID_MIN (在本例中是 500)時,則以 UID 500 來作為一個新賬號的 UID。 如果 /etc/passwd 已有大于 500 以上的 UID 時,則取 /etc/passwd 內最大的那個 UID + 1 作為新設帳號的 UID。』而如果我是想要建立系統用的賬號,所以使用 useradd -r sysaccount 這個 -r 的參數時,就會找『比 500 小的最大的那個 UID + 1 』就是了。 ^_^
6、PAM模塊
PAM 模塊:/etc/nologin, /etc/securetty
當一個使用者想要登入 Linux 主機時,他受到什么限制呢?我們說, 他除了必須要通過 /etc/passwd 及 /etc/shadow 的驗證并取得相關的權限數據, 最后獲得一個 shell 之外,事實上,他在登入系統之前,就得要通過 PAM (Pluggable Authentication Modules, 嵌入式模塊) 的驗證才行。
PAM 模塊的用途非常的多,除了可以在使用者登入時進行身份的驗證之外, 也可以輔助一些應用程序的驗證之用喔!舉例來說,我們前面提到的密碼修改程序『 passwd 』 ,當我們執行密碼修訂的時候,這個程序不是會告訴我們您輸入的密碼是否合于規范嗎? 如果是記錄在字典當中的密碼,或者是與賬號相同的密碼,那么就會被 PAM 模塊打回票, 也就無法通過驗證了!
?那么 PAM 怎么運作呢?我們同樣以 /usr/bin/passwd 這支程序來作為簡單的說明好了:
1. 使用者開始執行 /usr/bin/passwd 這支程序,并輸入密碼;
2. passwd 開始呼叫 PAM 模塊,PAM 模塊會搜尋 passwd 程序的 PAM 相關設定檔案, 這個設定檔一般是在 /etc/pam.d/ 里面的與程序同名的檔案,所以,在本例中, PAM 會去搜尋 /etc/pam.d/passwd 這個設定檔;
3. 經由 /etc/pam.d/passwd 設定文件的數據,取用 PAM 所提供的相關模塊來進行驗證;
4. 將驗證結果回傳給 passwd 這支程序,而 passwd 這支程序會根據 PAM 回傳的結果決定下一個動作 (重新輸入新密碼或者通過驗證!)
這個過程提供我們幾個重要的信息:
?? PAM 的設定檔放置在 /etc/pam.d/ 這個目錄中;
? 至于更多的環境相關設定則放置在 /etc/security/* 內;
? PAM 是透過自己提供的相關模塊來進行驗證,模塊放置在 /lib/security/* 內。
至于 PAM 相關模塊的運作,有興趣的話,您可以前往您 Linux 主機的: /usr/share/doc/pam* 目錄去瞧一瞧,里面有相當多豐富的信息可以提供給你參考。 我們這里僅就使用者登入相關的模塊來進行一些簡單的說明而已喔。
? PAM 的設定文件設定范例:
反正 PAM 模塊就是讓程序呼叫用的,而當程序呼叫時, PAM 就會利用相對應的設定檔來進行一些驗證就是了。我們還是舉 passwd 為例好了, 如果你去觀察一下 /etc/pam.d/passwd 的內容時,他是這樣的:
[root@linux ~]# cat /etc/pam.d/passwd
#%PAM-1.0
auth required pam_stack.so service=system-auth
account required pam_stack.so service=system-auth
password required pam_stack.so service=system-auth
基本上,在這個檔案內,每一行都是一個動作,而每個動作都分為四個字段,分別是:
驗證的類別 驗證的控制標準 使用的PAM模塊 該模塊的能使用的參數
驗證的類別 (Module type) 共分為四種類,分別說明:
? auth 這種類別主要用來檢驗使用者的身份驗證,所以這種類別通常是需要密碼來檢驗的。
? account 這種類別則主要在檢驗使用者是否具有正確的使用權限,舉例來說,當你使用一個過期的密碼來登入時, 當然就無法正確的登入了。
? session 這種類別主要在管理當使用者正確的使用該程序時的環境設定。舉例來說,我們登入 Linux 其實使用的是 /bin/login 這個程序的相關功能的,所以,當實際登入后,在操作 shell 的過程中,都是受 session 這種類別的設定所控制的喔!另外,如果使用 session 這種類別時, 則該程序在正式使用之前與使用結束之后,都會有相關紀錄被記到登錄文件當中喔!
? password 至于這種類別,則主要在提供驗證的修訂工作,舉例來說,就是修改/變更密碼啦!
那么『驗證的控制標準(control flag)』又是什么?簡單的說,他就是『驗證通過的標準』啦! 總共也有四種方式,分別是:
? required 當模塊設定為這種控制標準時,該模塊的驗證必須要成功,否則就會回傳一個 failure 的訊息。 不過,不論此一動作的模塊是否成功,接下去的模塊都還會繼續動作! 而若有 failure 的訊息時,也會在后續的動作都進行完畢之后,才會回傳給原程序。 比底下的 requisite 還要優秀的地方,在于該模塊底下的動作可能具有登錄文件紀錄 (log) 的舉動,則錯誤的訊息才會被紀錄起來喔!
? requisite 當模塊設定為 requisite 時,該模塊的認證要求同樣的需要成功才行。 不過,如果該模塊沒有通過驗證,那么 PAM 會『立刻』回報程序一個 failure 的值, 也就是說,若該次動作的模塊后續還有其它模塊時,其它模塊的動作將不會被啟用。
? optional 這個模塊控件目大多是在顯示訊息而已,并不是用在驗證方面的。
? sufficient 這個模塊控制標準也挺有趣的,相對于 requisite 是『發生錯誤時,立刻回報原執行程序 failure , 并且中斷 PAM 的運作』, sufficient 則是『順利通過驗證時,立刻回報原程序通過的訊息, 并且中斷 PAM 的運作』。呵呵!完全相反喔!
至于PAM 的模塊方面,目前我們的 FC4 提供的 PAM 模塊真的夠多了, 這些模塊實際上都放置在 /lib/security/ 目錄中,FC4 相關的 PAM 說明文件則放置在 /usr/share/doc/pam-*/* 里面,您可以根
據每個不同的模塊去討論他的用途, 鳥哥在這里僅針對我們登入時所使用的 login 這個程序的 PAM 設定文件,也就是 /etc/pam.d/login 這個檔案的內容來稍做說明:
[root@linux ~]# cat /etc/pam.d/login
#%PAM-1.0
auth required pam_securetty.so
auth required pam_stack.so service=system-auth
auth required pam_nologin.so
account required pam_stack.so service=system-auth
password required pam_stack.so service=system-auth
# pam_selinux.so close should be the first session rule
session required pam_selinux.so close
session required pam_stack.so service=system-auth
session optional pam_console.so
# pam_selinux.so open should be the last session rule
session required pam_selinux.so multiple open
在我們登入 Linux 的時候,使用到的 login 這個程序時,他使用的 PAM 設定檔大多是 required 的控制標準,所以必須要通過上述的幾個 PAM 模塊的驗證后,才能夠判定是否登入 Linux 。 需要留意的是,我們會看到 session 的模塊類型,這表示我們在實際使用 Linux 的資源之前,以及注銷 Linux 主機后,相關的數據都會被紀錄到登錄文件當中。 嘿嘿!所以啰,如果您仔細的看過 /var/log/messages 與 /var/log/secure , 就能夠發現你的一舉一動其實是有被紀錄下來的喔! ^_^ 另外,在上面表格當中的模塊中,比較有趣的是被鳥哥注明特殊字體的部分, 這兩個模塊: pam_securetty.so 及 pam_nologin 是挺有趣的喔! 我們就額外來談一談這兩個關于登入環境的驗證模塊吧!
? /etc/securetty
這個 pam_securetty 模塊是干嘛用的?其實他最主要的功能就是在預防不安全的登入環境啦! 而且主要是針對 root 這個使用者的身份喔! 這個模塊在被啟用時,會去讀取 /etc/securetty 這個檔案, 我們『可以將被認定是安全的終端機 (terminal) 環境寫入這個檔案中, 則 root 僅可以在那幾個終端機環境下登入』的啦! 一般來說,我們會認定在主機前面的環境是安全的,而使用網絡登入的環境則比較危險。 因此,一般 /etc/securetty 的內容大多是這樣:
tty1
tty2
tty3
tty4
...
而沒有 pts/0 這類的網絡登入的終端接口。這也就是說, root 僅能經由 tty1 這種終端機登入的啦!支持 login 程序的軟件有 telnet 服務與本機前面的 tty1~tty6 的 login, 這也是我們提到的,為何使用傳統的 telnet 聯機主機聯機到 Linux 時,預設無法使用 root 身份登入的主要原因啰。
那么如何克服呢?其實也很簡單啦,就將這個模塊的驗證移除即可! 主要有兩種方式:
? 將 /etc/pam.d/login 內,關于 pam_securetty.so 模塊的那一行批注掉;
? 將 /etc/securetty 這個檔案移除。
如此一來,當我們使用 telnet 聯機到 Linux 主機時,就能夠直接使用 root 的身份登入了。 不過,鳥哥不建議這么做喔!不過或許您又會問啦,那為什么我使用 ssh 聯機時, 就可以直接使用 root 登入呢?呵呵!這是因為 ssh 沒有用到這個模塊ㄇㄟ! 不相信嗎?仔細自己去查閱一下 /etc/pam.d/sshd 就知道啦! ^_^。
? /etc/nologin
那么 pam_nologin 又是在搞什么咚咚啊?其實,這個模塊也是在控制使用者登入用的。 不過,這個模塊只針對一般身份使用者有效,對 root 是沒有效果的。這個模塊必須要與 /etc/nologin 搭配使用,注意喔,是 /etc/nologin ,而不是 /etc/nologin.txt , 這兩個檔案的用途是不相同的喔! ^_^。 當 /etc/nologin 檔案存在時,則任何一個一般身份賬號在嘗試登入時, 都僅會獲得 /etc/nologin 內容的信息,而無法登入主機。舉例來說,當我建立 /etc/nologin ,并且內容設定為『This Linux server is maintaining....』, 那么任何人嘗試登入時,都僅會看到上面提到的這段訊息,而且無法登入喔! 一直要到 /etc/nologin 被移除后,一般身份使用者才能夠再次的登入啊!
? /etc/security/*
事實上,更多的 PAM 模塊設定信息您可以參考 /etc/security/* 里面的檔案設定, 尤其是針對使用者利用 Linux 系統資源的 limits.conf 以及時間的 time.conf 。 我們知道使用者利用系統資源的指令是 ulimit ,那么假如我想要讓 dmtsai 僅能存取 10MBytes (10240KBytes) 的檔案大小,那么我可以這樣做:
[root@linux ~]# vi /etc/pam.d/limits.conf
# 新增這兩行
dmtsai hard fsize 10240
@users hard fsize 10240
# 注意到,賬號前面加上 @ 表示為『群組!』
那么下次 dmtsai 或者是屬于 users 的群組的使用者登入這個 Linux 主機時, 你可以利用 ulimit -a 去察看一下,嘿嘿!他們能用的資源就減小很多了! 更多的用法您可以自行參考一下該檔案內的說明啊! ^_^ (記得測試完畢要將資料改回來~否則....以后就麻煩了!)
Linux 系統上使用者的對談與 mail 的使用:
談了這么多的系統賬號問題,總是該要談一談,那么如何針對系統上面的使用者進行查詢吧?! 想幾個狀態,如果你在 Linux 上面操作時,剛好有其它的使用者也登入主機,你想要跟他對談,該如何是好? 你想要知道某個賬號的相關信息,該如何查閱?呼呼!底下我們就來聊一聊~
轉載于:https://www.cnblogs.com/cymm/archive/2013/04/21/3390391.html
總結
以上是生活随笔為你收集整理的linux系统中各个文件描述——陆续添加的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 输入列画表格 在图形环境中很容易做出漂亮
- 下一篇: LeetCode刷题第二天——3Long