您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關linux如何做好文件權限管理的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
Linux是典型的多用戶多任務操作系統,因此對于linux來說,同一臺計算機資源可以提供給多個人使用是件很普通的事情,但是問題來了,多個人同時使用一臺計算機,會不會相互影響和干擾,如果其中有人不小心,做了破壞性的動作,其他人是不是也要玩完?還有如果每個人都有一些隱私的文檔保存在這臺計算機上,那這些文檔會不會被其他人瀏覽或獲取?作為一個安全的操作系統,Linux是如何解決這些問題的呢?作為root用戶,具有超級權限,那到底有哪些權限呢?
你可以將一臺計算機想象為一家酒店,那么這家酒店的root用戶是誰呢?毫無疑問,當然是酒店的老板,老板手下的員工可以認為是管理員,而入住者可以認為是普通用戶,當你在前臺付費登記,定好了自己的房間后,前臺會給你指定房間的鑰匙或房卡,而這兩樣就相當于你的賬戶密碼,有了鑰匙和房卡,你就可以打開房門,使用該房間提供的所有物品或者服務,當然你使用的東西只能局限于該房間內,你的房卡和鑰匙當然不能打開其他房間的房門,除非你是老板。
這是個形象的比喻,也是個縮影,我們周圍所有存在的資源都是有限的,沒有人能夠無限制的使用,因此我們生活和工作的世界里,都存在著大大小小的規則來限制你行動范圍和自由,你對資源的使用也需要付出一定的代價來獲取。計算機資源也是一樣的,對于多人共享的情況下,賬戶的管理和設計也要符合這種最基本的規則。
權限,從字面意思來理解,權,就是你的權利,規定你能做什么,限,就是限制,規定了你不能做什么,在一定范圍內行使你的權利。Linux賬戶可以根據權限大小的不同,分為超級用戶(root),管理員,普通用戶。不同用戶根據對系統資源的需求,會有不同的權限。那這些權限是誰賦予的呢?這要看超級用戶(root)掌握在誰手里,那他就是這些賬戶的分配者,包括管理員,都需要root用戶來分配,在這里管理員賬戶和普通賬戶其實沒有特別不同,只是一般管理員帳戶的權限可能會更多。
Linux的賬戶權限有很多種,最基本的就是對文件系統的訪問權限,即文件或文件夾權限。sudo權限,可以賦予特定賬戶能夠執行root賬戶的一些命令。ssh權限,控制用戶是否可以通過ssh遠程登錄。
由于Linux的設備和文檔都是以文件的形式存在,因此Linux最基本的安全控制就是對文件的訪問控制。Linux文件或文件夾權限是用來控制用戶訪問文件、文件夾或執行程序的一套機制。
根據用戶對文件或目錄操作種類的不同,linux定義了三種基本的權限:
讀,用r標識,對文件來說,表示可以查看文件內容,對文件夾來說,表示可以查看文件夾下的文件,可以用數值4來表示;
寫,用w標識,對文件來說,表示可以向文件中寫入或者插入內容,對文件夾來說,表示可以在文件夾下刪除、添加或者修改文件名稱,可以用數值2來表示;
執行,用x標識,對文件來說,表示文件可以以程序來執行,對文件夾來說,表示可以訪問子目錄及文件及shell中cd到此目錄,可以用數值1來表示。
同時,用戶和文件存在以下關系:
文件所有者(owner):擁有文件的用戶。創建文件時是創建文件的用戶(可用whoami命令查看)。
所屬組(group):文件所屬的組。創建文件時用戶的組(可用id命令查看)。
其他用戶(other):既不是文件所有者,也不是文件所屬的組的成員的其他用戶。
一個文件或文件夾的權限,其實就是對這三種關系的用戶規定是否具有可讀,可寫,可執行的權限,通常文件或文件夾的權限可以通過ls -l命令來查看:
mode:標識了owner、group及other用戶對該文件的操作權限;
owner:規定文件的擁有者;
group:規定文件歸屬的用戶組。
mode用長度為10的字符串來表示 “-rw-rw-r--”,第一位字符表示類型“-”表示文件,“d”表示目錄,“l”表示鏈接文件。后面9位需要每三位為一組來理解:
每一組的第一位標識是否具有讀權限,‘r’表示具有讀權限,‘-’表示禁止讀權限,第二位標識是否具有寫權限,‘w’表示具有寫權限,‘-’表示禁止寫權限,第三位標識是否具有可執行權限,‘x’表示具有可執行權限,‘-’表示禁止可執行權限。從左往右分為三組,第一組標識owner的權限,第二組表示group的權限,第三組標識其他用戶的權限。
舉個例子,如上圖所示的文件 public_excutable權限為"-rwxr-xr-x", 怎么理解呢?首先拆開來看,owner的權限是"rwx",表示對文件具有可讀可寫可執行的權限,group的權限是"r-x",表示對該文件只有可讀和可執行的權限,other用戶的權限也是"r-x",表示對該文件只有可讀和可執行的權限。
文件權限除了用字符串表示外,也可使用八進制數來表示權限,即用一個四位八進制數來表示,其中最高位表示特殊權限,隨后的三位依次是所有者權限、組權限和其他人權限。每一個八進制位的權限數值是文件具有的相應權限所對應的數值之和,還是以文件public_excutable為例子:
0755 = rwxr-xr-x = 0(4 + 2 + 1)(4 + 1)(4 + 1)
如果要查看文件的數值權限,可以通過stat命令進行查看:
root@d076cf119be7:/ $ stat test_file File: test_file Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: 29h/41d Inode: 13429 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2018-07-26 02:26:26.723187697 +0000 Modify: 2018-07-26 02:26:26.723187697 +0000 Change: 2018-07-26 02:26:26.723187697 +0000 Birth: -
當我們登錄系統,創建一個新的文件或者目錄時,會被分配一個默認權限,這個最初的權限是如何被分配的呢?在Linux系統中,通常管理員通過設置umask值來定義創建目錄和文件時的默認權限。
什么事umask?系統管理員必須要為你設置一個合理的 umask值,以確保你創建的文件具有所希望的缺省權限,防止其他非同組用戶對你的文件具有寫權限。一般來說,umask命令是在/etc /profile文件中設置的,每個用戶在登錄時都會引用這個文件,所以如果希望改變所有用戶的umask,可以在該文件中加入相應的條目。如果希望永久 性地設置自己的umask值,那么就把它放在自己$HOME目錄下的.profile或.bash_profile或.bashrc文件中。
umask值類似于文件的權限值,使用三位八進制數來表示,比如002,設置范圍(000~777),以掩碼的形式,定義需要禁止那些用戶的何種權限,第一位表示禁止owner的權限值,第二位表示禁止group用戶的權限值,第三位表示禁止other用戶的權限值。
以umask值為002為例,翻譯成權限字符串 "--- --- -w-",表示禁止other用戶使用寫權限,對于文件來說,默認的最大權限為666 即"rw- rw- rw-",則根據掩碼,去掉other用戶的寫權限,文件默認的權限為"rw- rw- r--",值為664,對于文件夾來說,默認的最大權限為777,即"rwx rwx rwx",則根據掩碼,去掉other用戶的寫權限,文件的權限為"rwx rwx r-x", 值為775。
使用umask命令:
查詢系統umask值
root $ umask 0022
設置umask
root $ umask 033 root $ umask 0033
上文講述了如何通過umask來定義文件或者文件夾的默認權限,那文件創建后,權限如何變更呢?Linux提供了chmod命令來修改文件權限,chmod可以給文件或者目錄的指定用戶增加或者降低權限,比如給owner和group增加執行權限:
chmod ug+x test_file
以上的例子中u和g分別表示user,group,是用戶類型:
u - user
g - group
o - other
a - all
'+' 表示增加權限,是執行的動作:
+ 增加權限
- 降低權限
'x' 表示要增加的文件權限:
r 讀
w 寫
x 可執行
一些常見的例子:
給所有用戶增加寫權限:
chmod a+w test_file
給other用戶增加執行權限:
chmod o+x test_file
禁止group和other用戶的執行權限:
chmod go-x test_file
禁止所有用戶的執行權限:
chmod a-x test_file
也可以直接修改文件的權限值:
chmod 644 test_file
文件的歸屬決定了文件屬于那個用戶,隸屬于那個用戶組,創建一個文件時,默認的情況下,該文件的owner即為創建該文件的用戶,group為該用戶的初始group,
root:/home/user5 $ su user5 user5:~ $ groups user5 user5:~ $ touch test user5:~ $ ls -la -rw-r--r-- 1 user5 user5 0 Aug 2 01:11 test
通常情況下對于root和owner用戶來說,可以隨意修改文件的權限屬性,但是對owner來說,決定于該用戶是否可以訪問chmod命令。
文件的歸屬可以被root賬戶修改,chown 命令修改文件的owner,chgrp 修改文件歸屬的group,
root:/home/user5 $ chown user4 test root:/home/user5 $ ls -la -rw------- 1 user4 user5 0 Aug 2 01:11 test root:/home/user5 $ chgrp user2 test root:/home/user5 $ ls -la -rw------- 1 user4 user2 0 Aug 2 01:11 test
如果一個用戶要訪問一個文件或文件夾時,Linux首先會檢查該用戶和訪問文件之間的歸屬關系,其次檢查該用戶對文件的操作屬于什么操作(讀,寫,執行),最后根據用戶的角色,檢查該角色對文件是否擁有所操作的權限,比如上例中 test 文件權限如下所示:
root:/home $ ls -la -rw------- 1 user4 user2 0 Aug 2 01:11 test
那如果是user2 用戶想查看該文件,Linux是否會允許嗎?不妨做個實驗:
root:/home $ su user2 user2:/home $ cat test cat: test: Permission denied
為什么會被拒絕呢?從以上權限來分析,雖然user2賬戶是屬于user2 group的,而且該文件也歸屬于user2 group,但是文件的權限只對owner 開放了可讀,可寫權限,group是沒有任何權限的,因此user2 是沒有讀權限的。
文件夾的權限比較特殊,x表示在shell中可以通過cd命令訪問該目錄及子目錄,r表示可以瀏覽該目錄下的文件及子目錄,w表示可以在該文件夾下添加刪除文件。
drwx------ 3 testuser1 test2 4096 Aug 15 01:18 testuser1dir drwx------ 2 testuser2 testuser2 4096 Jun 28 01:44 testuser2dir
比如以上文件夾testuser1dir的權限只對owner用戶testuser1開放了讀寫及訪問權限,當我們切換到testuser2,是否能訪問testuser1dir呢,
testuser2@d1db4cc29365:/home $ cd testuser1dir bash: cd: testuser1dir: Permission denied
實踐驗證是不行的,原因是testuser1dir對于group用戶和other用戶是沒有開放任何權限的,而testuser2屬于other用戶。如果需要other用戶能夠訪問該目錄,我們應該怎么做呢?
root@:/home $ chmod o+rx testuser1dir root@:/home $ ls -la drwx---r-x 3 testuser1 test2 4096 Aug 15 01:18 testuser1dir testuser2@:/home $ cd testuser1dir/ testuser2@:/home/testuser1dir $ ls testdir
首先切換到root賬戶,對testuser1dir給other用戶增加可讀可訪問權限,然后再切換到testuser2賬戶,再次嘗試cd到該目錄,這次就OK了。
感謝各位的閱讀!關于“linux如何做好文件權限管理”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。