介紹
Linux系統是一個典型的多用戶操做系統,不一樣的用戶處於不一樣的地位,爲了保護系統的安全性,linux系統對於不一樣用戶訪問同一個文件或目錄作了不一樣的訪問控制。而這種控制就是經過權限實現的,本節課咱們介紹linux權限的使用 node
1、基本權限
基本權限的介紹
Linux中每一個文件或目錄都有3個基本權限位,控制三種訪問級別用戶的讀、寫、執行,因此linux的基本權限位一共有9個。基本權限位和另外3個能夠影響可執行程序運行的3個特殊權限位一塊兒構成了文件訪問模式。三個屬性規定了對應三種級別的用戶可以如何使用這個文件,這三個基本權限位對於文件和目錄的含義有所差異的,咱們一塊兒來看一下linux
字符安全
權限服務器
對文件的含義oracle
對目錄的含義運維
ride
讀學習
意味着咱們能夠查看閱讀flex
能夠列出目錄中的文件列表spa
w
寫
意味着,對文件能夠修改或刪除
能夠在該目錄中建立、刪除文件
x
執行
若是是文件就能夠運行,好比二進制文件或腳本。
可使用cd命令進入該目錄
那三種訪問級別都有哪些呢?每一個文件都有三組不一樣的讀、寫和執行權限,分別適用於三種訪問級別,其中每組中的三個欄位分別使用讀取權限(r)、寫入權限(w)、執行權限(x)或沒有相應的權限(-)來表示,共9位來表示。
第一組:適用於文件的屬主,圖中屬主的權限是rwx。
第二組:適用於文件的屬組,圖中屬組的權限是r-x。
第三組:使用於其它用戶權限位,圖中其它用戶權限位是r-x。
當有人試圖訪問一個文件的時候,linux系統會按順序執行以下步驟:
(1)使用者擁有這個文件嗎?若是是,啓用用戶權限。
(2)用戶是組全部者成員嗎?若是是,啓用組權限
(3)若是以上兩個都不是,啓用其它人權限
上面咱們提到的是第一種表示方法,在linux中還有另一種表示方法,八進制表示法,咱們來看下字母和八進制表示方法的對應關係
字符表示法
八進制表示法
含義
r
4
讀
w
2
寫
x
1
執行
因此上面給出的權限rwxr-xr-x換成數字的表示方式就是755,那權限如何設置呢?
基本權限的設置和查看
經過前面的學習咱們知道,用戶分爲全部者,全部者組,其餘人這三類,而每一類有包含三種基本權限,他們的對應關係是
權限位
含義
屬主權限位
用於限制文件或目錄的建立者
屬組權限位
用於限制文件或目錄所屬組的成員
其它用戶的權限
用於限制既不是屬主又不是所屬組的能訪問該文件或目錄的其餘人員
當咱們使用命令來查看文件或目錄時,會看以下內容
[root@localhost ~]# ls -l
總用量 13804
drwxr-xr-x. 2 root root 6 10月 11 06:36 公共
drwxr-xr-x. 2 root root 6 10月 11 06:36 模板
drwxr-xr-x. 2 root root 6 10月 11 06:36 視頻
drwxr-xr-x. 2 root root 6 10月 11 06:36 圖片
drwxr-xr-x. 2 root root 6 10月 11 06:36 文檔
drwxr-xr-x. 2 root root 6 10月 11 06:36 下載
drwxr-xr-x. 2 root root 6 10月 11 06:36 音樂
drwxr-xr-x. 2 root root 6 10月 11 06:36 桌面
-rw-------. 1 root root 1214 10月 11 06:12 anaconda-ks.cfg
-rw-r--r--. 1 root root 1369 10月 11 06:17 initial-setup-ks.cfg
每一行顯示一個文件或目錄的信息,這些信息包括文件的類型(1位)、文件的權限(9位)、文件的鏈接數、文件的屬主(第3列)、文件的所屬組(第4列),大小以及相關時間和文件名。其中Linux 文件的權限標誌位九個,分爲3 組,分別表明文件擁有者的權限,文件所屬用戶組的權限和其它用戶的權限,如今咱們知道文件有三種權限((r)讀取、(w)寫入和(x)執行)和三種訪問級別((u)用戶、(g)主要組和(o)其它人)決定文件能夠被如何使用。那如何修改?
修改文件權限 chmod
縮寫
含義
u
User(用戶)
g
Group (組)
o
Other(其它)
a
All(全部)
+
Add(加)
-
Remove(減去)
=
Set (設置)
r
Read (可讀)
w
Write (可寫)
x
Execute (執行)
命令
做用
結果權限
chmod o-r a.file
取消其餘人的可讀權限
rw-rw---
chmod g-w a.file
取消組的寫入權限
rw-r--r--
chmod ug+w a.file
賦予用戶和組寫入權限
rwxrwxr--
chmod o+w a.file
賦予其餘人寫入權限
rw-rw-rw-
chmod go-rwx a.file
取消組和其餘人的閱讀、寫入和執行權限
rw-------
chmod a-w a.file
取消全部人的寫入權限
r-- r-- r--
chmod uo-r a.file
取消用戶和其它人的閱讀權限
-w-rw--w-
chmod go=rw a.file
將組和其餘人的權限設置爲閱讀和寫入
rw-rw-rw-
使用數字的表示方式相似chmod 755 a,執行完成後a這個文件的權限對應就是 -rwxr-xr-x,這是文件權限的兩種修改方式,若是你想修改文件的全部者和全部者組須要使用的命令就是chown,chgrp
[root@localhost test]# ll
總用量 0
-rw-r--r-- 1 root root 0 10月 18 01:26 file1
[root@localhost test]# chown oracle file1
[root@localhost test]# ll
總用量 0
-rw-r--r-- 1 oracle root 0 10月 18 01:26 file1
[root@localhost test]# chgrp oracle file1
[root@localhost test]# ll
總用量 0
-rw-r--r-- 1 oracle oracle 0 10月 18 01:26 file1
這裏,咱們涉及到了三條與權限修改相關的命令
操做
能夠執行的用戶
chmod
Root用戶和文件的全部者
chgrp
Root用戶和文件的全部者(必須是組成員)
chown
只有root用戶
以上是三種基本權限 -R
文件或目錄的默認權限
每個新產生的文件都會有一個默認的權限,這個權限是經過系統中的umask來控制的
文件的最大權限是666
目錄的權限是777
使用umask查看
2、特殊權限
特殊權限的介紹
以前咱們提到了特殊權限有三個,這三個特殊權限是在可執行程序運行時影響操做權限的,它們分別是SUID,SGID,sticky-bit位
特殊權限
說明
SUID
當一個設置了SUID 位的可執行文件被執行時,該文件將以全部者的身份運行,也就是說不管誰來執行這個文件,他都有文件全部者的特權。任意存取該文件擁有者能使用的所有系統資源。若是全部者是 root 的話,那麼執行人就有超級用戶的特權了。
SGID
當一個設置了SGID 位的可執行文件運行時,該文件將具備所屬組的特權,任意存取整個組所能使用的系統資源;若一個目錄設置了SGID,則全部被複制到這個目錄下的文件,其所屬的組都會被重設爲和這個目錄同樣,除非在複製文件時保留文件屬性,才能保留原來所屬的羣組設置。
stickybit
對一個文件設置了sticky-bit以後,儘管其餘用戶有寫權限,也必須由屬主執行刪除、移動等操做;對一個目錄設置了sticky-bit以後,存放在該目錄的文件僅准許其屬主執行刪除、移動等操做。
一個典型的例子就是passwd命令,這個命令容許用戶修改本身的密碼。咱們能夠看到原本是rwx的權限表示形式變成了rws,一樣若是/usr/bin/passwd這個文件同時被設置了三個特殊權限,那麼權限的格式就會變成rwsrwsrwt,須要注意的是特殊權限設置的前置要求是可執行,也就是若是沒有x權限位,是不要設置的,即使你使用root用戶設置上了特殊權限,也不會生效。
[root@localhost test]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 34928 5月 11 11:14 /usr/bin/passwd
特殊權限的設置和查看
特殊權限的設置也是使用chmod
[root@localhost test]# ll
總用量 0
-rwxr-xr-x 1 oracle oracle 0 10月 18 01:26 file1
[root@localhost test]# chmod u+s file1
[root@localhost test]# ll
總用量 0
-rwsr-xr-x 1 oracle oracle 0 10月 18 01:26 file1
[root@localhost test]# chmod g+s file1
[root@localhost test]# ll
總用量 0
-rwsr-sr-x 1 oracle oracle 0 10月 18 01:26 file1
[root@localhost test]# chmod o+t file1
[root@localhost test]# ll
總用量 0
-rwsr-sr-t 1 oracle oracle 0 10月 18 01:26 file1
或者使用數字
[root@localhost test]# chmod u-s,g-s,o-t file1
[root@localhost test]# ll
總用量 0
-rwxr-xr-x 1 oracle oracle 0 10月 18 01:26 file1
[root@localhost test]# chmod 7755 file1
[root@localhost test]# ll
總用量 0
-rwsr-sr-t 1 oracle oracle 0 10月 18 01:26 file1
3、隱藏權限
隱藏權限的介紹
有時候你發現即時使用的是root用戶也不能修改某個文件,大部分緣由是由於使用過chattr命令鎖定了該文件,這個命令的做用很大,經過chattr能夠提升系統的安全性,可是這個命令並不適合全部的目錄,如/dev,/tmp,/var。與咱們前面看到的chmod這些命令修改權限不一樣的是chattr修改的是更底層的屬性,這裏面咱們所提到的隱藏權限指的就是使用chattr來設置屬性
隱藏權限的設置和查看
chattr的用戶與咱們以前講的chmod,chow這些命令類似,都是直接對須要修改的文件進行操做就能夠了
[root@localhost test]# chattr +AaiSd file1
[root@localhost test]# lsattr file1
--S-iadA---------- file1
[root@localhost test]# chattr = file1
[root@localhost test]# lsattr file1
------------------ file1
A 文件或目錄的atime不可被修改
S 硬盤I/O同步選項,功能相似sync。
a 只能向文件中添加數據,而不能刪除,多用於服務器日誌文件安全,只有root才能設定這個屬性。
d 文件不能成爲dump程序的備份目標。
i 設定文件不能被刪除、更名、設定連接關係,同時不能寫入或新增內容。
經過上面的例子能夠看到查看的時候使用的是lsattr,chattr還有不少參數,各位能夠在man手冊中獲取到幫助,另外有些參數的使用是有侷限性的。
4、acl權限
acl權限的介紹
linux的權限很是重要,咱們以前所說的幾種權限中,可是並不能只針對一個用戶或者一個組進行單獨設置,而ACL權限能夠幫助咱們實現這個功能,好比說有一個文件的全部者和全部者組都是a,這個文件的權限是660,我可讓b這個用戶能夠對文件進行讀寫的操做,而b這個用戶並不屬於a組的成員。那咱們來看下如何使用
acl權限的設置和查看
若是要使用acl權限,首先要肯定你的文件系統支持acl權限,若是再Default mount options字段出現acl字樣就意味着你的文件系統支持acl,不過在CentOS8中默認是都支持的。
[root@localhost test]# tune2fs -l /dev/sda1
tune2fs 1.44.3 (10-July-2018)
Filesystem volume name: <none>
Last mounted on: /boot
Filesystem UUID: be03eaec-6474-42ea-8f79-06e7198f5155
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery extent 64bit flex_bg sparse_super large_file huge_file dir_nlink extra_isize metadata_csum
Filesystem flags: signed_directory_hash
Default mount options: user_xattr acl
Filesystem state: clean
.
.
.
配置acl權限咱們須要使用兩個命令一個是setfacl用來設置acl權限,另外一個是getfacl用來查看acl權限
setfacl
-m :設置acl
-x :刪除指定的acl
-b :刪除全部的acl
getfacl用來查看文件的acl權限,如今咱們來看下如何設置
[root@localhost test]# ls
file file1
[root@localhost test]# ll file1
-rw-r--r-- 1 root root 0 10月 18 02:48 file1
[root@localhost test]# setfacl -m u:oracle:rw file1 爲指定的用戶配置一個rw的權限
[root@localhost test]# setfacl -m u::rwx file1 若是沒有指定用戶則默認是爲該文件的全部者設置
[root@localhost test]# ll file1
-rwxrw-r--+ 1 root root 0 10月 18 02:48 file1 全部者權限變成的rwx並且後面多了一個+號
你會發現使用ll(等同於ls -l)命令查看時會發現多了一個+號,這只是提醒咱們此文件被設置了acl權限,可是具體是什麼樣的,咱們還須要使用getfacl來查看
[root@localhost test]# getfacl file1
user::rwx user:後面是空的,表明的是全部者的權限
user:oracle:rw- 咱們以前給額外用戶設置的權限
group::r-- 全部者組的權限
mask::rw- 默認的有效權限
other::r-- 其餘人的權限
以上是咱們針對一個額外的用戶設置的權限,同理能夠設置針對組和其餘人的acl權限
[root@localhost test]# setfacl -m g:oracle:rw file1
[root@localhost test]# setfacl -m o:rw file1
[root@localhost test]# getfacl file1
user::rwx
user:oracle:rw-
group::r--
group:oracle:rw-
mask::rw-
other::rw-
刪除指定的acl
[root@localhost test]# setfacl -x u:oracle file1 刪除用戶acl
[root@localhost test]# getfacl file1
user::rwx
group::r--
group:oracle:rw-
mask::rw-
other::rw-
[root@localhost test]# setfacl -x g:oracle file1 刪除組acl
[root@localhost test]# getfacl file1
user::rwx
group::r--
mask::r--
other::rw-
[root@localhost test]# chmod o=r file1 刪除其餘人直接使用chmod就能夠
[root@localhost test]# ll file1
-rw-r--r-- 1 root root 0 10月 18 04:21 file1
[root@localhost test]# getfacl file1
user::rw-
group::r--
other::r--
刪除全部acl
[root@localhost test]# setfacl -m u:oracle:rw,g:oracle:rw,o:rwx file1
[root@localhost test]# getfacl file1
user::rw-
user:oracle:rw-
group::r--
group:oracle:rw-
mask::rw-
other::rwx
[root@localhost test]# setfacl -b file1
[root@localhost test]# getfacl file1
user::rw-group::r--other::rwx你沒看錯,權限在指定的時候是能夠指定多個的,咱們以前提到的chmod也能夠這樣使用。