1. 程式人生 > >Linux-檔案與目錄的預設許可權與隱藏許可權

Linux-檔案與目錄的預設許可權與隱藏許可權

複製程式碼
[[email protected] ~]# chattr [+-=][ASacdistu] 檔案或目錄名稱
選項與引數:
+   :新增某一個特殊引數,其他原本存在引數則不動。
-   :移除某一個特殊引數,其他原本存在引數則不動。
=   :配置一定,且僅有後面接的引數

A  :當配置了 A 這個屬性時,若你有存取此檔案(或目錄)時,他的存取時間 atime
     將不會被修改,可避免I/O較慢的機器過度的存取磁碟。這對速度較慢的計算機有幫助
S  :一般檔案是非同步寫入磁碟的(原理請參考第五章sync的說明),如果加上 S 這個
     屬性時,當你進行任何檔案的修改,該更動會『同步』寫入磁碟中。
a  :當配置 a 之後,這個檔案將只能新增資料,而不能刪除也不能修改資料,只有root 
     才能配置這個屬性。 
c  :這個屬性配置之後,將會自動的將此檔案『壓縮』,在讀取的時候將會自動解壓縮,
     但是在儲存的時候,將會先進行壓縮後再儲存(看來對於大檔案似乎蠻有用的!)
d  :當 dump 程式被執行的時候,配置 d 屬性將可使該檔案(或目錄)不會被 dump 備份
i  :這個 i 可就很厲害了!他可以讓一個檔案『不能被刪除、改名、配置連結也無法
     寫入或新增資料!』對於系統安全性有相當大的助益!只有 root 能配置此屬性
s  :當檔案配置了 s 屬性時,如果這個檔案被刪除,他將會被完全的移除出這個硬碟
     空間,所以如果誤刪了,完全無法救回來了喔!
u  :與 s 相反的,當使用 u 來配置檔案時,如果該檔案被刪除了,則資料內容其實還
     存在磁碟中,可以使用來救援該檔案喔!
注意:屬性配置常見的是 a 與 i 的配置值,而且很多配置值必須要身為 root 才能配置

#請嘗試到/tmp底下建立檔案,並加入 i 的引數,嘗試刪除看看。
[
[email protected]
~]# cd /tmp [[email protected] tmp]# touch attrtest <==建立一個空檔案 [[email protected] tmp]# chattr +i attrtest <==給予 i 的屬性 [[email protected] tmp]# rm attrtest <==嘗試刪除看看 rm: remove write-protected regular empty file `attrtest'? y rm: cannot remove `attrtest'
: Operation not permitted <==操作不許可 # 看到了嗎?呼呼!連 root 也沒有辦法將這個檔案刪除呢!趕緊解除配置! 請將該檔案的 i 屬性取消! [[email protected] tmp]# chattr -i attrtest
複製程式碼

這個命令是很重要的,尤其是在系統的資料安全上面!由於這些屬性是隱藏的性質,所以需要以 lsattr 才能看到該屬性呦!其中,個人認為最重要的當屬 +i 與 +a 這個屬性了。+i 可以讓一個檔案無法被更動,對於需要強烈的系統安全的人來說, 真是相當的重要的!裡頭還有相當多的屬性是需要 root 才能配置的呢!

此外,如果是 log file 這種的登入檔,就更需要 +a 這個可以新增,但是不能修改舊有的資料與刪除的引數了!

lsattr (顯示檔案隱藏屬性)

複製程式碼
[[email protected] ~]# lsattr [-adR] 檔案或目錄
選項與引數:
-a :將隱藏檔的屬性也秀出來;
-d :如果接的是目錄,僅列出目錄本身的屬性而非目錄內的檔名;
-R :連同子目錄的資料也一併列出來! 

[[email protected] tmp]# chattr +aij attrtest
[[email protected] tmp]# lsattr attrtest
----ia---j--- attrtest
複製程式碼

使用 chattr 配置後,可以利用 lsattr 來查閱隱藏的屬性。不過, 這兩個命令在使用上必須要特別小心,否則會造成很大的困擾。例如:某天你心情好,突然將 /etc/shadow 這個重要的密碼記錄檔案給他配置成為具有 i 的屬性,那麼過了若干天之後, 你突然要新增使用者,卻一直無法新增!別懷疑,趕快去將 i 的屬性拿掉吧!

檔案特殊許可權: SUID, SGID, SBIT

[[email protected] ~]# ls -ld /tmp ; ls -l /usr/bin/passwd
drwxrwxrwt 7 root root 4096 Sep 27 18:23 /tmp
-rwsr-xr-x 1 root root 22984 Jan  7  2007 /usr/bin/passwd

不是應該只有 rwx 嗎?還有其他的特殊許可權( s 跟 t )啊?啊.....頭又開始昏了~ @[email protected] 因為 s 與 t 這兩個許可權的意義與帳戶和程序較為相關!底下的說明先看看就好,如果看不懂也沒有關係, 先知道s放在哪裡稱為SUID/SGID以及如何配置即可!

Set UID

當 s 這個標誌出現在檔案擁有者的 x 許可權上時,例如剛剛提到的 /usr/bin/passwd 這個檔案的許可權狀態:『-rwsr-xr-x』,此時就被稱為 Set UID,簡稱為 SUID 的特殊許可權。 那麼SUID的許可權對於一個檔案的特殊功能是什麼呢?基本上SUID有這樣的限制與功能:

  • SUID 許可權僅對二進位程式(binary program)有效;
  • 執行者對於該程式需要具有 x 的可執行許可權;
  • 本許可權僅在執行該程式的過程中有效 (run-time);
  • 執行者將具有該程式擁有者 (owner) 的許可權。

講這麼硬的東西你可能對於 SUID 還是沒有概念,沒關係,我們舉個例子來說明好了。 我們的 Linux 系統中,所有帳號的密碼都記錄在 /etc/shadow 這個檔案裡面,這個檔案的許可權為:『-r-------- 1 root root』,意思是這個檔案僅有root可讀且僅有root可以強制寫入而已。 既然這個檔案僅有 root 可以修改,那麼鳥哥的 vbird 這個一般帳號使用者能否自行修改自己的密碼呢? 你可以使用你自己的帳號輸入『passwd』這個命令來看看,嘿嘿!一般使用者當然可以修改自己的密碼了!

唔!有沒有衝突啊!明明 /etc/shadow 就不能讓 vbird 這個一般帳戶去存取的,為什麼 vbird 還能夠修改這個檔案內的密碼呢? 這就是 SUID 的功能啦!藉由上述的功能說明,我們可以知道

  1. vbird 對於 /usr/bin/passwd 這個程式來說是具有 x 許可權的,表示 vbird 能執行 passwd;
  2. passwd 的擁有者是 root 這個帳號;
  3. vbird 執行 passwd 的過程中,會『暫時』獲得 root 的許可權;
  4. /etc/shadow 就可以被 vbird 所執行的 passwd 所修改。

但如果 vbird 使用 cat 去讀取 /etc/shadow 時,他能夠讀取嗎?因為 cat 不具有 SUID 的許可權,所以 vbird 執行 『cat /etc/shadow』 時,是不能讀取 /etc/shadow 的。我們用一張示意圖來說明如下:

SUID程式執行的過程示意圖
圖4.4.1、SUID程式執行的過程示意圖

另外,SUID 僅可用在binary program 上, 不能夠用在 shell script 上面!這是因為 shell script 只是將很多的 binary 執行檔叫進來執行而已!所以 SUID 的許可權部分,還是得要看 shell script 呼叫進來的程式的配置, 而不是 shell script 本身。當然,SUID 對於目錄也是無效的~這點要特別留意。

Set GID

當 s 標誌在檔案擁有者的 x 專案為 SUID,那 s 在群組的 x 時則稱為 Set GID, SGID 羅!是這樣沒錯!^_^。 舉例來說,你可以用底下的命令來觀察到具有 SGID 許可權的檔案喔:

[[email protected] ~]# ls -l /usr/bin/locate
-rwx--s--x 1 root slocate 23856 Mar 15  2007 /usr/bin/locate

SGID 對二進位程式有用;與 SUID 不同的是,SGID 可以針對檔案或目錄來配置!如果是對檔案來說, SGID 有如下的功能:

  • 程式執行者對於該程式來說,需具備 x 的許可權;
  • 執行者在執行的過程中將會獲得該程式群組的支援!

舉例來說,上面的 /usr/bin/locate 這個程式可以去搜尋 /var/lib/mlocate/mlocate.db 這個檔案的內容 (詳細說明會在下節講述), mlocate.db 的許可權如下:

[[email protected] ~]# ll /usr/bin/locate /var/lib/mlocate/mlocate.db
-rwx--s--x 1 root slocate   23856 Mar 15  2007 /usr/bin/locate
-rw-r----- 1 root slocate 3175776 Sep 28 04:02 /var/lib/mlocate/mlocate.db

除了 binary program 之外,事實上 SGID 也能夠用在目錄上,這也是非常常見的一種用途! 當一個目錄配置了 SGID 的許可權後,他將具有如下的功能:與 SUID 非常的類似,若我使用 vbird 這個帳號去執行 locate 時,那 vbird 將會取得 slocate 群組的支援, 因此就能夠去讀取 mlocate.db 啦!非常有趣吧!

  • 使用者若對於此目錄具有 r 與 x 的許可權時,該使用者能夠進入此目錄;
  • 使用者在此目錄下的有效群組(effective group)將會變成該目錄的群組;
  • 用途:若使用者在此目錄下具有 w 的許可權(可以新建檔案),則使用者所建立的新檔案,該新檔案的群組與此目錄的群組相同。

SGID 對於專案開發來說是非常重要的!因為這涉及群組許可權的問題。

Sticky Bit

這個 Sticky Bit, SBIT 目前只針對目錄有效,對於檔案已經沒有效果了。 SBIT 對於目錄的作用是:

  • 當使用者對於此目錄具有 w, x 許可權,亦即具有寫入的許可權時;
  • 當使用者在該目錄下建立檔案或目錄時,僅有自己與 root 才有權力刪除該檔案

換句話說:當甲這個使用者於 A 目錄是具有群組或其他人的身份,並且擁有該目錄 w 的許可權, 這表示『甲使用者對該目錄內任何人建立的目錄或檔案均可進行 "刪除/更名/搬移" 等動作。』 不過,如果將 A 目錄加上了 SBIT 的許可權專案時, 則甲只能夠針對自己建立的檔案或目錄進行刪除/更名/移動等動作,而無法刪除他人的檔案。

舉例來說,我們的 /tmp 本身的許可權是『drwxrwxrwt』, 在這樣的許可權內容下,任何人都可以在 /tmp 內新增、修改檔案,但僅有該檔案/目錄建立者與 root 能夠刪除自己的目錄或檔案。這個特性也是挺重要的啊!你可以這樣做個簡單的測試:

  1. 以 root 登陸系統,並且進入 /tmp 當中;
  2. touch test,並且更改 test 許可權成為 777 ;
  3. 以一般使用者登陸,並進入 /tmp;
  4. 嘗試刪除 test 這個檔案!

SUID/SGID/SBIT 許可權配置

 現在你應該已經知道數字型態更改許可權的方式為『三個數字』的組合, 那麼如果在這三個數字之前再加上一個數字的話,最前面的那個數字就代表這幾個許可權了!

  • 4 為 SUID
  • 2 為 SGID
  • 1 為 SBIT

假設要將一個檔案許可權改為『-rwsr-xr-x』時,由於 s 在使用者許可權中,所以是 SUID ,因此, 在原先的 755 之前還要加上 4 ,也就是:『 chmod 4755 filename 』來配置!此外,還有大 S 與大 T 的產生喔!參考底下的範例啦!

複製程式碼
[[email protected] ~]# cd /tmp
[[email protected] tmp]# touch test                  <==建立一個測試用空檔
[[email protected] tmp]# chmod 4755 test; ls -l test <==加入具有 SUID 的許可權
-rwsr-xr-x 1 root root 0 Sep 29 03:06 test
[[email protected] tmp]# chmod 6755 test; ls -l test <==加入具有 SUID/SGID 的許可權
-rwsr-sr-x 1 root root 0 Sep 29 03:06 test
[[email protected] tmp]# chmod 1755 test; ls -l test <==加入 SBIT 的功能!
-rwxr-xr-t 1 root root 0 Sep 29 03:06 test
[[email protected] tmp]# chmod 7666 test; ls -l test <==具有空的 SUID/SGID 許可權
-rwSrwSrwT 1 root root 0 Sep 29 03:06 test
複製程式碼

最後一個例子就要特別小心啦!怎麼會出現大寫的 S 與 T 呢?不都是小寫的嗎? 因為 s 與 t 都是取代 x 這個許可權的,但是你有沒有發現阿,我們是下達 7666 喔!也就是說, user, group 以及 others 都沒有 x 這個可執行的標誌( 因為 666 嘛 ),所以,這個 S, T 代表的就是『空的』啦!怎麼說? SUID 是表示『該檔案在執行的時候,具有檔案擁有者的許可權』,但是檔案 擁有者都無法運行了,哪裡來的許可權給其他人使用?當然就是空的啦! ^_^

而除了數字法之外,你也可以透過符號法來處理喔!其中 SUID 為 u+s ,而 SGID 為 g+s ,SBIT 則是 o+t 羅!來看看如下的範例:

複製程式碼
# 配置許可權成為 -rws--x--x 的模樣:
[[email protected] tmp]# chmod u=rwxs,go=x test; ls -l test
-rws--x--x 1 root root 0 Aug 18 23:47 test

# 承上,加上 SGID 與 SBIT 在上述的檔案許可權中!
[[email protected] tmp]# chmod g+s,o+t test; ls -l test
-rws--s--t 1 root root 0 Aug 18 23:47 test
複製程式碼

觀察檔案型別:file

如果你想要知道某個檔案的基本資料,例如是屬於 ASCII 或者是 data 檔案,或者是 binary , 且其中有沒有使用到動態函式庫 (share library) 等等的資訊,就可以利用 file 這個命令來檢閱喔! 舉例來說:

複製程式碼
[[email protected] ~]# file ~/.bashrc
/root/.bashrc: ASCII text  <==告訴我們是 ASCII 的純文字檔啊!
[[email protected] ~]# file /usr/bin/passwd
/usr/bin/passwd: setuid ELF 32-bit LSB executable, Intel 80386, version 1 
(SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), for 
GNU/Linux 2.6.9, stripped
# 執行檔的資料可就多的不得了!包括這個檔案的 suid 許可權、相容於 Intel 386
# 等級的硬體平臺、使用的是 Linux 核心 2.6.9 的動態函式庫連結等等。
[[email protected] ~]# file /var/lib/mlocate/mlocate.db
/var/lib/mlocate/mlocate.db: data  <== 這是 data 檔案!
複製程式碼

透過這個命令,我們可以簡單的先判斷這個檔案的格式為何喔!

轉自:鳥哥linux基礎篇

相關推薦

Linux 檔案目錄的讀寫執行許可權詳解

首先了解一個ls -l 檔案的每列含義 [[email protected] ~]# ls -l a -rw-r–rw- 1 test002 tester 279103 9月 2 13:21 a 下面介紹每列含義: (1)第一列:檔案型別和許可權,這部分稍後重

linux檔案目錄預設許可權隱藏許可權

touch新建檔案或修改檔案時間 每個檔案在liux下都會記錄許多時間引數,其實有三個主要的變動時間,三個時間的意義有多少: * modification time(mtmie): 當檔案內容資料改變時,就會更新這個時間,內容資料是指檔案內容,而不是檔

伺服器鬥智鬥勇之預設許可權隱藏許可權

當我們輸入umask這個命令的時候,如圖,會顯示這個東西,而加上引數-S,則會變得很直觀,很熟悉 [[email protected] ~]# umask 0022 [[email protected] ~]# umask -S u=rwx,g=rx,o

linux檔案目錄管理——路徑目錄

                                  路徑與目錄 1.相對路徑與絕對路徑   絕對路徑: 在bash中進行目錄相關的路徑操作時,從 ‘/’開始寫的目錄。eg:/home/student/Desktop. 特點:比較準如果是在寫程式管理系統的情

Linux檔案目錄磁碟格式

檔案系統特性: Linux的正規檔案系統為Ext2。其包含三個資料: super block : 記錄此檔案系統的整體資訊,包括inode/block的總量,使用量,剩餘量,以及檔案系統的格式與相關資訊等 inode: 記錄檔案的屬性,一個檔案佔用一個in

linux修改檔案目錄所屬使用者

-rw-r--r-- 1 jianxun jianxun 115M Jul 24 15:58 pos_text.txt -rw-r--r-- 1 jianxun jianxun  11K Jul 24 16:02 stopwords.dat 第一個jianxun是檔案或

鳥哥的Linux私房菜學習筆記(二)Linux 檔案目錄磁碟格式 —— Linux檔案目錄管理

4.檔案與目錄的預設許可權與隱藏許可權1) 檔案預設許可權:umaskumask 就是檢視或指定 『目前使用者在建立檔案或目錄時候的許可權預設值』[[email protected] ~]# umask[[email protected] ~]# umask -S查閱的方式有兩種,一種可以

Linux檔案目錄許可權的計算方法

Linux檔案和目錄許可權的計算方法 第一步:將預設許可權(目錄777,檔案666)和umask值都轉換為二進位制; 第二步:對umask值取反; 第三步:將預設許可權和umask取反的值做與運算; 第四步:將得到的二進位制轉換為八進位制,即為許可權。 例如:當umask

ls命令(檢視檔案目錄)--總結整理

ps:ls命在Linux系統使用的頻率相當高,但基本上日常使用的引數並不多,今天回顧時發現了幾個不常用但很重要的使用引數,故記錄下。 ls(list)命令用來顯示目標列表,在Linux中是使用率較高的命令。ls命令的輸出資訊可以進行彩色加亮顯示,以分割

Linux檔案連結命令 軟連線硬連結

ln命令   該命令在檔案之間建立連結。這種操作實際上是給系統中已有的某個檔案指定另外一個可用於訪問它的名稱。對於這個新的檔名,我們可以為之指定不同的訪問許可權,以控制對資訊的共享和安全性的問題。 如果連結指向目錄,使用者就可以利用該連結直接進入被連結的目錄而不用打一大堆的路

linux檔案or目錄許可權管理

使用者組 在linux中的每個使用者必須屬於一個組,不能獨立於組外。在linux中每個檔案有所有者、所在組、其它組的概念 所有者 所在組 其它組 改變使用者所在的組 所有者 一般為檔案的建立者,誰建立了該檔案,就天然的成為該檔案的所有者 用ls

java程式設計師菜鳥進階(十四)linux基礎入門(二)linux檔案目錄命令管理

大家都知道,熟悉命令操作的開發人員,Linux作業系統命令操作效率要高於圖形介面的操作,所以瞭解和學習linux基本命令操作是學習linux作業系統的首要任務,本文主要介紹以下四個知識點:   1.      She

linux檔案目錄操作

1.建立檔案 touch 檔名 vim 檔名 2.複製檔案 cp 檔名 新路徑名稱 3.移動檔案也可以修改名稱 mv 檔名 新路徑名稱 4.建立資料夾 mkdir 資料夾名稱 5.複製檔案目錄 cp -r 資料夾名稱 新路徑名稱 -r

Linux檔案目錄管理常用命令

  命令 具體用法 功能 cd cd /tmp 進入目錄tmp pwd pwd 顯示當前所在目錄 mkdir mkdir -p /t

3.Linux檔案目錄的管理

1.目錄的相關操作 命令 含義 cd 變換目錄(change directory) pwd 顯示當前目錄 mkdir 建立一個新的目錄 rmdir 刪除一個空的目錄 rm   -rf 刪除,-r代表遞迴,比如刪除資

linux檔案目錄管理

絕對路徑:/為根目錄,從根目錄開始的路徑,如:/usr/bin/test 相對路徑:從當前目錄開始表示另一路徑,如cd ../test,即為當前目錄上一目錄下的test檔案 處理目錄的常用命令:

Linux檔案系統目錄結構

本文以CentOS系統為例,但同樣適用於Linux的其他發行版。不需要糾結於具體的版本,瞭解設計意圖即可。 本文隨時更新。除勘誤外,不另做批註。 概覽 圓型節點代指目錄,方型節點代指檔案。 圖中省去了很多不常用的目錄與檔案。 稍後單獨講/pr

Linux原始碼目錄結構和Linux檔案系統目錄結構

學習Linux也有一段時間了,具體來整理一下Linux原始碼的目錄結構和檔案系統的目錄結構,以便加深記憶。一、Linux原始碼的目錄結構首先上一張截圖,如下所示:再看各個檔案的介紹,借用一下其他資源。arch:這個為目錄是架構相關,裡面存放了許多CPU架構,比如arm,x86

Linux檔案目錄操作

Linux下儲存一切皆檔案 檔案型別: -:普通檔案 d:目錄檔案 p:管道檔案 l:軟連線檔案(windows叫快捷方式) c:字元裝置檔案 b:塊儲存裝置 s:socket檔案 檔案訪問者的分類 檔案擁有者u:user

Linux檔案目錄的粘滯位(sticky bit)

今天維護系統時發現一個非常詭異的問題:AAA使用者和BBB使用者同屬AAA組,但用AAA使用者建立的檔案,許可權設定為777後,還是不能用BBB使用者刪除。詭異!        幾經週轉,發現AAA使用者建立檔案位置的上層目錄的許可權是drwxrwxrwt