linux下profile和bashrc區別 + Linux中的權限

在Linux配置環境時遇到了點問題,轉載一篇

1. /etc/profile

用來設置系統環境參數,比如$PATH. 這裏面的環境變量是對系統內所有用戶生效的。

2. /etc/bashrc

這個文件設置系統bash shell相關的東西,對系統內所有用戶生效。只要用戶運行bash命令,那麼這裏面的東西就在起作用。

3. ~/.bash_profile

用來設置一些環境變量,功能和/etc/profile 類似,但是這個是針對用戶來設定的,也就是說,你在/home/user1/.bash_profile 中設定了環境變量,那麼這個環境變量只針對 user1 這個用戶生效.

4. ~/.bashrc

作用類似於/etc/bashrc, 只是針對用戶自己而言,不對其他用戶生效。
另外/etc/profile中設定的變量(全局)的可以作用於任何用戶,而~/.bashrc等中設定的變量(局部)只能繼承/etc/profile中的變量,他們是”父子”關係.

~/.bash_profile 是交互式、login 方式進入 bash 運行的,意思是隻有用戶登錄時纔會生效。~/.bashrc 是交互式 non-login 方式進入 bash 運行的,用戶不一定登錄,只要以該用戶身份運行命令行就會讀取該文件。

——————————————————————————————————————————————————————————————————

——————————————————————————————————————————————————————————————————

一個用戶、一個組
我們來看一看 Linux 權限和所有權模型。我們已經看到每個文件屬於一個用戶和一個組。這正是 Linux 中權限模型的核心。您可以在 ls -l 清單中查看用戶和組:

$ ls -l /bin/bash

 

-rwxr-xr-x    1 root     wheel      430540 Dec 23 18:27 /bin/bash
在這個特殊的示例中,/bin/bash 可執行文件屬於 root 用戶,並且在 wheel 組中。Linux 權限模型通過允許給每個文件系統對象設置三種獨立的權限級別來工作 — 它們爲文件的所有者、文件的組以及所有其他用戶。

理解“ls -l”

我們來看一看我們的 ls -l 輸出,檢查一下這個清單的第一欄:

$ ls -l /bin/bash
-rwxr-xr-x    1 root     wheel      430540 Dec 23 18:27 /bin/bash
第一個字段 -rwxr-xr-x 包含該特殊文件的權限的符號表示。該字段中的首字符(-)指定該文件的類型,本例中它是一個常規文件。其它可能的首字符還有:
“d”目錄
“l”符號鏈接
“c”字符專門設備文件
“b”塊專門設備文件
“p”先進先出
“s”套接字
三個三元組
$ ls -l /bin/bash
-rwxr-xr-x    1 root     wheel      430540 Dec 23 18:27 /bin/bash
該字段的其餘部分由三個三元組字符組成。

第一個三元字符組代表文件所有者的權限,第二個代表文件的組的權限,第三個代表所有其他用戶的權限
"rwx"
"r-x"
"r-x"
上面,r 表示允許讀(查看文件中的數據),w 表示允許寫(修改文件以及刪除),x 表示允許“執行”(運行程序)。將所有這些信息放在一起,我們可以發現每個人都能夠讀該文件的內容和執行該文件,但是隻允許文件所有者(root 用戶)可以以任何方式修改該文件。因此,雖然一般用戶可以複製該文件,但是隻允許 root 用戶更新或刪除它。
我是誰?
在我們看怎樣改變文件的用戶所有權和組所有權之前,我們首先來看一看怎樣得知您當前的用戶標識和組成員資格。除非最近您使用過 su 命令,否則您當前的用戶標識是您用來登錄系統的用戶標識。但是,如果您經常使用 su,您可能不記得您當前有效的用戶標識。要查看用戶標識,輸入 whoami:
# whoami
root
# su drobbins
$ whoami
drobbins
我在哪一組?
要看看您屬於哪一組,使用 group 命令:
$ groups
drobbins wheel audio
在上面的示例中,我是 drobbins、wheel 和 audio 組的成員。如果您想看看其他用戶在什麼組,指定他們的用戶名作爲參數:
$ groups root daemon
root : root bin daemon sys adm disk wheel floppy dialout tape video
daemon : daemon bin adm

改變用戶和組所有權
爲了改變文件或其它文件系統對象的所有者或組,分別使用 chown 或 chgrp。這兩個命令都要一個用戶名或組名作參數,後面跟上一個或多個文件名。

# chown root /etc/passwd
# chgrp wheel /etc/passwd
您還可以用 chown 命令的另一種形式同時設置所有者和組:
# chown root.wheel /etc/passwd
除非您是超級用戶,否則您不可以使用 chown,然而任何人都可以使用 chgrp 來將文件的組所有權改爲他們所屬的組。
遞歸的所有權改變
chown 和 chgrp 都有一個 -R 選項,該選項可以用來告訴它們遞歸地將所屬權和組改變應用到整個目錄樹中。例如:
# chown -R drobbins /home/drobbins
介紹 chmod
chown 和 chgrp 可以用來改變文件系統對象的所有者和組,而另一個程序 — 叫做 chmod — 用來改變我們可以在 ls -l 清單中看到的 rwx 權限。chmod 帶有兩個或多個參數:“mode”,描述怎樣改變權限,後面跟將會受到影響的文件或文件列表:
$ chmod +x scriptfile.sh
在上面的示例中,我們的“mode”是 +x。您可能會猜到,+x 模式告訴 chmod,使該特殊文件對於用戶、組以及其它任何人都是可執行的。如果我們想要除去一個文件的所有執行權限,我們應該這樣做:
$ chmod -x scriptfile.sh
用戶/組/其他粒度
到此,我們的 chmod 示例已經影響到了所有三個三元組 — 用戶、組和所有其他用戶。通常,一次只修改一個或兩個三元組很方便。要這樣做,只需要在 + 或 - 符號之前,給您想要修改的特定的三元組指定符號字符。對於“用戶”三元組使用 u,對於“組”三元組使用 g,對於“其他/每個人”使用 o:
$ chmod go-w scriptfile.sh
我們剛除去了組和所有其他用戶的寫權限,而保留“所有者”權限不動。
重新設置權限
除了交替打開和關閉權限位以外,我們還可以一起重新設置它們。通過使用 = 操作符,我們可以告訴 chmod 我們要指定權限和取消別的權限:
$ chmod =rx scriptfile.sh
上面,我們只設置了所有的“read”和“execute”位,沒有設置所有的“write”位。如果您僅僅想重新設置特定的三元組,您可以像下面這樣,在 = 之前指定該三元組的符號名:
$ chmod u=rx scriptfile.sh

數字模式
 直到現在爲止,我們使用了叫做“符號”的模式來用 chmod 指定權限的改變。然而,指定權限還有 一種普遍使用的方法 — 使用 4 位八進制數。使用叫做數字權限語法的語法,每一位代表一個權限三元組。

例如,在 1777 中,777 設置本章我們所討論的“owner”、“group”和“other”標誌

1 用來設置專門的權限位,我們將在本章的結束部分講到。這個圖表說明了怎樣解釋第二到四位(777):
模式 數字
rwx 7
rw- 6
r-x 5
 r-- 4
 -wx 3
 -w- 2
 --x 1
 --- 0
                        
 數字權限語法
    當您需要給一個文件指定所有權限時,數字權限語法特別有用,比如在下面的示例中:
$ chmod 0755 scriptfile.sh
   $ ls -l scriptfile.sh
   -rwxr-xr-x    1 drobbins drobbins        0 Jan  9 17:44 scriptfile.sh
   在該示例中,我們使用了 0755 模式,它展開爲一個完整的權限設置“-rwxr-xr-x”。


  Umask                   
當進程創建了新文件時,它指定新文件應該具有的權限。通常,所請求的模式是 0666(每個人可讀和可寫),它比我們希望的具有更多的權限。幸運的是,不管什麼時候創建了新文件,Linux 將參考叫做“umask”的東西。系統用 umask 值來將初始指定的權限降低爲更合理、更安全的權限。您可以通過在命令行中輸入 umask 來查看您當前的 umask 設置:
      $ umask
      0022
       Linux 系統上,umask 的缺省值一般爲 0022,它允許其他人讀您的新文件(如果他們可以得到它們),但是不能進行修改。爲了在缺省的情況下使新文件更安全,您可以改變 umask 設置: $ umask 0077umask 將確保組和其他用戶對於新創建的文件絕對沒有任何權限。那麼,umask 怎樣工作呢?與文件的“常規”權限不同,umask 指定應該關閉哪一個權限。我們來參閱一下我們的“模式到數字”映射表,從而使我們可以理解 0077 的 umask 的意思是什麼: 模式 數字 rwx 7 rw- 6 r-x 5 r-- 4 -wx 3 -w- 2 --x 1 --- 0 使用該表,0077 的最後三位擴展爲 ---rwxrwx。現在,請記住 umask 告訴系統禁用哪個權限。根據推斷,我們可以看到將關閉所有“組”和“其他”權限,而“用戶”權限將保留不動。


介紹 suid 和 sgid
       當您最初登錄時,將啓動一個新的 shell 進程。您已經知道,但是您可能還不知道這個新的 shell進程(通常是 bash)使用您的用戶標識運行。照這樣,bash 程序可以訪問所有屬於您的文件和目錄。事實上,作爲用戶,我們完全依靠其它程序來代表我們執行操作。因爲您啓動的程序繼承了您的用戶標識,因此它們不能訪問任何不允許您訪問的文件系統對象。
        例如,一般用戶不能直接修改 passwd 文件,因爲“write”標誌已經對除“root 用戶”以外的每個用戶關閉:
$ ls -l /etc/passwd
         -rw-r--r--    1 root     wheel        1355 Nov  1 21:16 /etc/passwd
        但是,一般用戶確實需要在他們需要改變其密碼的任何時候,能夠修改 /etc/passwd(至少間接地)。但是,如果用戶不能修改該文件,究竟怎樣完成這個工作呢?    

    Suid
       幸好,Linux 權限模型有兩個專門的位,叫做“suid”和“sgid”。當設置了一個可執行程序的“suid”這一位時,它將代表可執行文件的所有者運行,而不是代表啓動程序的人運行。現在,回到 /etc/passwd 問題。如果看一看 passwd 可執行文件,我們可以看到它屬於 root 用戶:
        $ ls -l /usr/bin/passwd
       -rwsr-xr-x    1 root     wheel       17588 Sep 24 00:53 /usr/bin/passwd
       您還將注意到,這裏有一個 s 取替了用戶權限三元組中的一個 x。這表明,對於這個特殊程序,設置了 suid 和可執行位。由於這個原因,當 passwd 運行時,它將代表 root 用戶執行(具有完全超級用戶訪問權),而不是代表運行它的用戶運行。又因爲 passwd 以 root 用戶訪問權運行,所以能夠修改 /etc/passwd 文件,而沒有什麼問題。
       suid/sgid 告誡說明
        我們看到了 suid 怎樣工作,sgid 以同樣的方式工作。它允許程序繼承程序的組所有權,而不是當前用戶的程序所有權。這裏有一些關於 suid 和 sgid 的其它的但是很重要的信息。首先,suid 和 sgid 佔據與 ls -l 清單中 x 位相同的空間。如果還設置了 x 位,則相應的位表示爲 s(小寫)。但是,如果沒有設置 x 位,它將表示爲 S(大寫)。另一個很重要的提示:在許多環境中,suid 和 suid 很管用,但是不恰當地使用這些位可能使系統的安全遭到破壞。最好儘可能地少用“suid”程序。passwd 命令是爲數不多的必須使用“suid”的命令之一。
         改變 suid 和 sgid
         設置和除去 suid 與 sgid 位相當簡單。這裏,我們設置 suid 位:
           # chmod u+s /usr/bin/myapp
          此處,我們從一個目錄除去 sgid 位。我們將看到 sgid 位怎樣影響下面幾屏中的目錄:
# chmod g-s /home/drobbins
         

權限和目錄到此爲止,我們從常規文件的角度來看權限。當從目錄的角度看權限時,情況有一點不同。目錄使用同樣的權限標誌,但是它們被解釋爲表示略微不同的含義。 對於一個目錄,如果設置了“read”標誌,您可以列出目錄的內容;“write”表示您可以在目錄中創建文件,“execute”表示您可以進入該目錄並訪問內部的任何子目錄。沒有“execute”標誌,目錄內的文件系統對象是不可訪問的。沒有“read”標誌,目錄內的文件系統對象是不可查看的,但是只要有人知道磁盤上對象的完整路徑,就仍然可以訪問目錄內的對象。目錄和 sgid如果啓用了目錄的“sgid”標誌,在目錄內創建的任何文件系統對象將繼承目錄的組。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章