學習筆記–權限管理

文件系統的權限管理

1、Linux系統下每個目錄或文件的權限對象主要分為:屬主(u)、屬組(g)、其他用戶(o),針對每類訪問對象都定義了三種權限:讀(r)、寫(w)、執行(x),這三種權限針對目錄和文件的作用各不相同,以下將做詳細說明:

對于文件來說:

讀(r)權限:可以使用文本查看類工具讀取文件內容

寫(w)權限:可以修改文件內容,但不能刪除文件本身

執行(x)權限:主要針對二進制程序或腳本,可以將其提交給內核并啟動一個進程(即運行程序)

對于目錄來說:

讀(r)權限:只能讀取目錄中的文件列表,不能訪問、不能進入目錄、不能查看元數據

寫(w)權限:可以在目錄中創建、刪除文件,但不能使用cd命令進入目錄中

執行(x)權限:可以使用cd命令進入目錄,但不能查看目錄中的文件列表

權限的表示方法可以使用字符表示,也可以使用八進制數字表示,對應關系如下表:

權限位 –x -w- -wx r– r-x rw- rwx
二進制表示 000 001 010 011 100 101 110 111
八進制表示 0 1 2 3 4 5 6 7

一個文件的權限位通常分為9位,前三位表示屬主的權限,中間三位表示屬組的權限,后三位表示其他用戶的權限。

2、文件權限修改命令chmod

用法:chmod [選項]… 模式[,模式]… 文件…

或:chmod [選項]… 八進制模式 文件…

或:chmod [選項]… –reference=參考文件 文件…

常用選項:

-R:以遞歸方式更改所有的文件及子目錄

模式:

u= 表示修改屬主的所有r、w、x權限

g= 表示修改屬組的所有r、w、x權限

o= 表示修改除了屬主、屬組的其他用戶所有r、w、x權限

ug= 表示同時修改屬組和屬組的所有r、w、x權限

a= 表示修改所有對象的r、w、x權限(即屬主、屬組和其他用戶)

u+ 表示在原來屬主權限的基礎上增加某位或某些位的權限

u- 表示在原來屬主權限的基礎上減去某位或某些位的權限

注意:X(大寫)表示只給目錄x權限,不給文件x權限

應用實例:

[root@liang testdir]# ll
總用量 4
drwxr-xr-x. 3 root root 4096 8月   4 05:46 bbb
[root@liang testdir]# chmod u=r,o-x bbb/
[root@liang testdir]# ll
總用量 4
dr--r-xr--. 3 root root 4096 8月   4 05:46 bbb
[root@liang testdir]# chown 765 bbb/
[root@liang testdir]# ll
總用量 4
drwxr-xr--. 3 765 root 4096 8月   4 05:46 bbb
[root@liang testdir]# ll /etc/shadow
----------. 1 root root 2268 8月   4 05:07 /etc/shadow
[root@liang testdir]# chmod --reference=/etc/shadow bbb/
[root@liang testdir]# ll
總用量 4
d---------. 3 root root 4096 8月   4 05:46 bbb

3、文件屬主修改命令chown

用法:chown [選項]… [所有者][:[組]] 文件…

或:chown [選項]… –reference=參考文件 文件…

常用選項:

-R:遞歸處理所有的文件及子目錄

應用實例:

[root@liang testdir]# ll
總用量 4
drwxrw-r-x. 3 root root 4096 8月   4 05:46 bbb
[root@liang testdir]# chown zsan bbb/
[root@liang testdir]# ll
總用量 4
drwxrw-r-x. 3 zsan root 4096 8月   4 05:46 bbb
[root@liang testdir]# chown lsi:sysadmins bbb/
[root@liang testdir]# ll
總用量 4
drwxrw-r-x. 3 lsi sysadmins 4096 8月   4 05:46 bbb
[root@liang testdir]# chown --reference=/root/ bbb/
[root@liang testdir]# ll
總用量 4
drwxrw-r-x. 3 root root 4096 8月   4 06:28 bbb

4、文件屬組修改命令chgrp

用法:chgrp [選項]… 用戶組 文件…

或:chgrp [選項]… –reference=參考文件 文件…

常用選項:

-R:遞歸處理所有的文件及子目錄

應用實例:

[root@liang testdir]# ll
總用量 4
drwxrw-r-x. 3 root root 4096 8月   4 06:28 bbb
[root@liang testdir]# chgrp sysadmins bbb/
[root@liang testdir]# ll
總用量 4
drwxrw-r-x. 3 root sysadmins 4096 8月   4 06:28 bbb
[root@liang testdir]# chgrp --reference=/root/ bbb/
[root@liang testdir]# ll
總用量 4
drwxrw-r-x. 3 root root 4096 8月   4 06:28 bbb

5、設置文件或目錄新建時的默認權限命令umask

umask命令的作用是新建目錄或文件時屏蔽掉最大權限相應的位,從而得出默認權限。

對于普通文件來說,一般情況下,新建文件的默認八進制權限值等于666減去umask的值,但如果某類對象的權限值結果中存在x權限,則將其權限位加1。

對于目錄文件來說,新建目錄的默認八進制權限值等于777減去umask的值。

設定umask值:umask 八進制權限模式  或:umask 模式[,模式]…

顯示umask值:umask  或 umask -S 或 umask -p

[root@fengl etc]# umask u=r,g=r,o=r
[root@fengl etc]# umask
0333
[root@fengl etc]# umask -p
umask 0333
[root@fengl etc]# umask -S  #顯示的是新建文件或目錄的默認權限,如果新建的是文件且有x權限時,則自動減去x權限
u=r,g=r,o=r
[root@fengl etc]# umask 234
[root@fengl etc]# umask
0234

可以在環境變量中直接添加umask的值實現控制新建目錄或文件的默認權限效果。umask的全局配置在文件/etc/bashrc中,umask的用戶環境變量可以在~/.bashrc中設置。

應用實例:

[root@liang6 testdir]# umask 
0022
[root@liang6 testdir]# touch file1
[root@liang6 testdir]# mkdir dir1
[root@liang6 testdir]# ll
total 4
drwxr-xr-x. 2 root root 4096 Aug  4 08:18 dir1
-rw-r--r--. 1 root root    0 Aug  4 08:18 file1
[root@liang6 testdir]# umask 111
[root@liang6 testdir]# touch file2
[root@liang6 testdir]# mkdir dir2
[root@liang6 testdir]# ll
total 8
drwxr-xr-x. 2 root root 4096 Aug  4 08:18 dir1
drw-rw-rw-. 2 root root 4096 Aug  4 08:18 dir2
-rw-r--r--. 1 root root    0 Aug  4 08:18 file1
-rw-rw-rw-. 1 root root    0 Aug  4 08:18 file2

6、Linux文件系統上的特殊權限

在Linux系統上的三個特殊權限為:SUID、SGID、Sticky

Linux系統中任何一個可執行程序文件都有其屬主和屬組,程序運行時的進程也有屬主和屬組。一個可執行程序能否啟動為進程,取決于發起者對程序文件是否擁有可執行權限,當可執行程序啟動為進程時,其進程的屬主為發起者,進程的屬組為發起者所屬的組。而進程訪問文件時的權限取決于進程的發起者,如果進程的發起者為程序文件的屬主,則該進程所擁有的權限和程序文件的屬主權限一樣,如果進程的發起者為程序文件的屬組,則該進程擁有的權限和程序文件的屬組權限一樣,同樣,如果進程的發起者為程序文件的“其他位”用戶,則該進程所擁有的權限和程序文件的“其他位”權限一樣。

(1)、SUID的作用就是保證程序運行時的進程屬主為原有文件的屬主,即進程的有效身份不是發起者,而是程序文件自身的屬主,這樣可以避免不同用戶啟動可執行程序時的權限問題(如paswd命令,執行passwd命令的過程其實就是訪問并修改/etc/shadow文件,而普通用戶對該文件是沒有任何訪問權限的)。因此,SUID權限一般作用在有可執行權限的二進制文件(可執行程序或命令)上。

SUID權限的設置方法為:chmod u+s FILE…  或  chmod u-s FILE…

SUID的權限位(s)和文件的屬主執行權限位(x)相同,此s可能顯示為大寫或小寫,大寫表示該文件的屬主本身沒有可執行權限,小寫表示該文件的屬主本身具有可執行權限。

應用實例:

[root@liang6 testdir]# ll
total 0
-rw-r--r--. 1 root root 0 Aug  4 08:18 file1
[root@liang6 testdir]# chmod u+s file1 
[root@liang6 testdir]# ll
total 0
-rwSr--r--. 1 root root 0 Aug  4 08:18 file1
[root@liang6 testdir]# chmod u-s file1 
[root@liang6 testdir]# ll
total 0
-rw-r--r--. 1 root root 0 Aug  4 08:18 file1
[root@liang6 testdir]# chmod u+sx file1 
[root@liang6 testdir]# ll
total 0
-rwsr--r--. 1 root root 0 Aug  4 08:18 file1

(2)、默認情況下用戶創建文件時,其屬組為此用戶所屬的主組,而一旦某目錄被設定了SGID權限,則對該目錄有寫權限的用戶,在此目錄下所創建的文件或目錄所屬組為此目錄的屬組。

SGID的設置方法為:chmod g+s DIR…   或  chmod g-s DIR…

SUGD的權限位(s)和目錄的屬組執行權限位(x)相同,此s可能顯示為大寫或小寫,大寫表示該目錄的屬組本身沒有可執行權限,小寫表示該目錄的屬組本身具有可執行權限。

應用實例:

[root@liang6 testdir]# ll
total 4
drwxr-xr-x. 2 root root 4096 Aug  4 10:41 dir1
[root@liang6 testdir]# chmod g+s dir1/
[root@liang6 testdir]# ll
total 4
drwxr-sr-x. 2 root root 4096 Aug  4 10:41 dir1
[root@liang6 testdir]# chmod o+w dir1/
[root@liang6 testdir]# ll
total 4
drwxr-srwx. 2 root root 4096 Aug  4 10:41 dir1
[root@liang6 testdir]# su user5
[user5@liang6 testdir]$ touch dir1/file1
[user5@liang6 testdir]$ exit
[root@liang6 testdir]# su user3
[user3@liang6 testdir]$ touch dir1/file2
[user3@liang6 testdir]$ exit
[root@liang6 testdir]# ll dir1/
total 0
-rw-rw-r--. 1 user5 root 0 Aug  4 10:44 file1
-rw-rw-r--. 1 user3 root 0 Aug  4 10:44 file2

(3)、Sticky 稱作為粘滯位,一般作用在目錄上,實現的效果是對于一個多人可寫的目錄,每個用戶僅能刪除自己的文件(GID為0的管理員用戶除外),如系統上的/tmp和/var/tmp目錄默認都具有Sticky權限。

Sticky的設置方法為:chmod o+t DIR…   或  chmod o-t DIR…

Sticky的權限位(t)和目錄的“其他位”執行權限位(x)相同,此t可能顯示為大寫或小寫,大寫表示該目錄的“其他位”本身沒有可執行權限,小寫表示該目錄的“其他位”本身具有可執行權限。

應用實例:

[root@liang6 testdir]# chmod o+t dir1/
[root@liang6 testdir]# ll
total 4
drwxr-xrwt. 2 root root 4096 Aug  4 10:44 dir1
[root@liang6 testdir]# cd dir1/
[root@liang6 dir1]# su user5
[user5@liang6 dir1]$ ll
total 0
-rw-rw-r--. 1 user5 root 0 Aug  4 10:44 file1
-rw-rw-r--. 1 user3 root 0 Aug  4 10:44 file2
[user5@liang6 dir1]$ rm -f file2
rm: cannot remove `file2': Operation not permitted
[user5@liang6 dir1]$ rm -f file1
[user5@liang6 dir1]$ ll
total 0
-rw-rw-r--. 1 user3 root 0 Aug  4 10:44 file2

(4)、這三個特殊權限也可以組成一組權限,并用八進制表示法表示,這三個權限位分別為:sgid-suid-sticky,

              000    001    010    011    100    101    110    111

八進制    0        1        2            3        4        5        6        7

特殊權限的八進制表達法,可于默認的三位八進制數字左側再加一位八進制數字,如:

[root@liang testdir]# chmod 2555 dir1/
[root@liang testdir]# ll
總用量 4
dr-xr-sr-x. 2 root root 4096 8月   5 03:32 dir1

7、改變文件屬性的命令chattr和查看屬性命令lsattr

chattr命令只有超級權限的用戶才能使用,該命令可改變存放在ext2、ext3、ext4、xfs、ubifs、reiserfs、jfs等文件系統上的文件或目錄屬性。chattr命令的作用很大,其中一些功能是由Linux內核版本來支持的,不過現在絕大部分的Linux系統都是2.6以上內核了。通過chattr命令修改屬性能夠提高系統的安全性,但是它并不適合所有的目錄。chattr命令不能保護/、/dev、/tmp、/var目錄。

用法:chattr [-RVf] [-+=AacDdeijsSu] [-v version] files…

常用選項:

-R 遞歸處理,將指定目錄下的所有文件及子目錄一并處理

-V 顯示指令執行過程

-f  抑制大多數的錯誤信息

-v<版本編號> 設置文件或目錄版本

模式說明:

+<屬性> 開啟文件或目錄的該項屬性

-<屬性> 關閉文件或目錄的該項屬性

=<屬性> 指定文件或目錄的該項屬性

A:即Atime,文件或目錄的atime不可被修改,可以有效預防例如手提電腦磁盤I/O錯誤的發生

a:即Append Only,設定該參數后,只能向文件中添加數據,而不能刪除。如果目錄具有這個屬性,系統將只允許在這個目錄下創建和修改文件,而不允許刪除任何文件,多用于服務器日志文件安全

c:即compresse,設定文件是否經壓縮后再存儲,讀取時需要經過自動解壓操作

i:即Immutable,設定文件不能被刪除、改名、設定鏈接關系,同時不能寫入或新增內容,如果目錄具有這個屬性,那么任何的進程只能修改目錄之下的文件,不允許建立和刪除文件。i參數對于文件系統的安全設置有很大幫助

s:保密性地刪除文件或目錄,不可恢復,因為是從磁盤上刪除,然后用0填充文件所在區域

u:與s相反,當一個應用程序請求刪除這個文件,系統會保留其數據塊以便以后能夠恢復刪除這個文件,用來防止意外刪除文件或目錄

lsattr命令可查看使用chattr命令改變文件的屬性信息。

用法:lsattr [-RVadlv] [files…]

常用選項:

-a:顯示所有文件和目錄,包括“.”和“..”

-d:顯示目錄,而非目錄內容

-R:遞歸處理

應用實例:

[root@liang testdir]# chattr -R +i dir1/
[root@liang testdir]# lsattr -a dir1/
----i--------e- dir1/.
-------------e- dir1/..
----i--------e- dir1/file1
[root@liang testdir]# ll
總用量 4
drwxr-xr-x. 2 root root 4096 8月   5 04:20 dir1
[root@liang testdir]# cd dir1/
[root@liang dir1]# touch file2
touch: 無法創建"file2": 權限不夠
[root@liang dir1]# ll
總用量 4
-rw-r--r--. 1 root root 5 8月   5 04:20 file1
[root@liang dir1]# cat file1 
aaaa
[root@liang dir1]# echo bbbbbbbbbb > file1 
-bash: file1: 權限不夠

8、設置文件的訪問控制列表命令setfacl

chmod命令可以修改文件或目錄的所有者、所屬組和其他人的權限,而setfacl命令可以實現更靈活的權限管理,除了對文件或目錄的所有者、所屬組和其他人的權限管理外,還可以對更多的用戶設置權限。

文件設置了訪問控制列表后的權限執行順序為:所有者、自定義用戶、自定義組、其他人

CentOS7之前版本,默認手工創建的ext4文件系統無ACL功能,需要手動增加,命令如下:

]# tune2fs -o acl /dev/sdb1

]# mount -o acl /dev/sdb1 /mnt

用法: setfacl [-bkndRLPvh] [{-m|-x} acl_spec] [{-M|-X} acl_file] file …

常用參數:

-m, –modify=acl:修改ACL

-x, –remove=acl:移除ACL

-M, –modify-file=file:修改從文件讀取的ACL條目

-X, –remove-file=file:移除從文件讀取的ACL條目

-b, –remove-all:清空ACL

-d, –default:通常用在目錄上,效果是在該目錄下新建的文件或目錄會默認添加ACL

-k, –remove-default:與-d相反,作用是移除目錄上添加的默認ACL

-R, –recursive:遞歸設置

getfacl命令可以查看設置的文件訪問控制列表

用法:getfacl [-aceEsRLPtpndvh] file …

應用實例:

[root@liang testdir]# setfacl -m u:zsan:rwx dir1/  #修改ACL
[root@liang testdir]# 
[root@liang testdir]# getfacl dir1/     #查看ACL
# file: dir1/
# owner: root
# group: root
user::rwx
user:zsan:rwx
group::r-x
mask::rwx
other::r-x
[root@liang testdir]# chmod g=w dir1/    
[root@liang testdir]# getfacl                #更改屬組的權限后再查看ACL
Usage: getfacl [-aceEsRLPtpndvh] file ...
Try `getfacl --help' for more information.
[root@liang testdir]# getfacl dir1/
# file: dir1/
# owner: root
# group: root
user::rwx
user:zsan:rwx            #effective:-w-
group::r-x            #effective:---
mask::-w-
other::r-x
[root@liang testdir]# setfacl -x u:zsan dir1/   #移除ACL后使用ll查看
[root@liang testdir]# ll
總用量 8
drwxr-xr-x+ 2 root root 4096 8月   5 04:20 dir1
[root@liang testdir]# setfacl -b dir1/    #清楚ACL后查看
[root@liang testdir]# ll
總用量 4
drwxr-xr-x. 2 root root 4096 8月   5 04:20 dir1
[root@liang testdir]# setfacl -m d:u:zsan:rw dir1/   #設置目錄的默認ACL,只影響改目錄下的新文件
[root@liang testdir]# getfacl dir1/
# file: dir1/
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
default:user::rwx
default:user:zsan:rw-
default:group::r-x
default:mask::rwx
default:other::r-x

原創文章,作者:苦澀咖啡,如若轉載,請注明出處:http://www.www58058.com/28313

(0)
苦澀咖啡苦澀咖啡
上一篇 2016-08-05
下一篇 2016-08-05

相關推薦

  • 軟件編譯安裝小結

    原創作品,允許轉載,轉載時請務必以超鏈接形式標明文章 原始出處 、作者信息和本聲明。否則將追究法律責任。http://nolinux.blog.51cto.com/4824967/1439073     本文主要針對 configure 和 cmake 做一個介紹以及我們重新配置編譯參數文件時,都需要做哪些清…

    Linux干貨 2016-08-15
  • 日志分析工具Awstats實戰之Apache篇-多站點日志分析

    原創作品,允許轉載,轉載時請務必以超鏈接形式標明文章 原始出處 、作者信息和本聲明。否則將追究法律責任。http://nolinux.blog.51cto.com/4824967/1318052 前面兩篇都在講述如何去部署nginx下的awstats日志分析工具,現在終于輪到apache。作為老牌的網頁服務器,awstats對apache…

    Linux干貨 2016-08-15
  • Linux基礎知識(四)

    1、復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其它用戶均沒有任何訪問權限 [root@bogon ~]# cp -r /etc/skel/ /home/tuser1 [root@bogon ~]# chmod -R 700 /home/tuser1 2、編輯/etc/group文件,添加組hadoo…

    Linux干貨 2016-10-17
  • Linux Cluster之Keepalived + Nginx的實現

      一、實驗環境 http server1與http server2組成web集群,由nginx服務器實現負載均衡代理,使用keepalived保證nginx服務的高可用。通過虛擬IP192.168.154.177對外提供web服務。 實驗目的: 1)當Nginx server1上的nginx服務異常時,由nginx server2提供反帶服務。 …

    2016-11-02
  • 淺談正則表達式

    1.       什么是正則表達式 基本說來,正則表達式是一種用來描述一定數量文本的模式。Regex代表Regular Express。本文將用<<regex>>來表示一段具體的正則表達式。 一段文本就是最基本的模式,簡單的匹配相同的文本。   2. &n…

    Linux干貨 2016-08-12
  • CentOS 6開機啟動流程理論篇

    CentOS 6開機啟動流程理論篇 centos 系統的啟動流程 grub 破壞Linux的核心文件再修復體驗系統啟動流程 概述 任 何系統啟動的第一步必然是加電,然后計算機硬件會主動地讀取BIOS來加載硬件設備信息并檢測,之后系統會主動地讀取第一個有引導程序的設備,該引導程序 (grub)可以指定使用哪個內核來啟動,并將其加載至內存當中運行,同時內核還要加…

    Linux干貨 2016-09-19

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-08-05 11:36

    寫的很好,思路清晰,命令常見用法都有詳細示例。

欧美性久久久久