第一題、三種權限rwx對文件和目錄的意義
權限對文件的意義
r(read):可以讀取文件的內容,如讀取文本文件的內容
w(write):可以編輯、新增或者是修改文件的內容,但不含有刪除文件(需要執行權限)
x(execute):該文件具有可以被執行的權限
像windows里面的文件的是否能夠執行是按照其擴展名來判斷的,而在Linux中,我們的文件是否能夠被執行是根據是否具有“x”權限,而跟文件名是沒有關系的。
當你對一個文件具有w的權限是,你可以寫入,編輯,新增,修改文件的內容,不具備刪除文件本身的權限,要想刪除該文件必須具有“x”的權限,因此對于文件的r、w、x來說主要是針對文件的內容,而與文件名是否存在是沒有關系的,因為文件記錄的實際數據。
權限對目錄的意義
r(read contents in directory)表示具有讀取目錄列表的權限,所以當你對一個目錄具有r權限時,表示你是否可以查看目錄下面的文件名數據,所以你就可以利用ls命令將該目錄的內容列表顯示出來。不管有沒有x權限,都可以強制的把目錄列表顯示出來,盡管會報錯。如下圖
w(modify content of directory)這個權限表示具有更改該目錄結構列表的權限,可以新建新的目錄和文件,可以刪除已經存在的文件或目錄(不論該文件的權限如何),將已經存在的文件或目錄重命名,轉移該目錄內文件,目錄的位置,總之目錄的w權限就與該目錄下面的文件名變動有關,而不是文件的內容。
通過該實驗目錄僅有w權限是沒有辦法進行如上的操作的,需要配合x權限才可以在該目錄下執行任何命令,所以兩個權限是需要配合使用的,再看下面的實驗就是到了,可以創建文件或者刪除,但是因為沒有r的權限,所以沒有辦法讀取目錄列表有哪些文件。
x(access directory)目錄的x代表用戶能否進入該目錄成為工作目錄,進行執行命令的權限,因此如果你不具有x權限,那么你就沒有辦法切入到該目錄,無法正確執行該目錄下的任何命令,即使有r權限(盡管列出目錄列表的文件,也都會報錯)。
第二題、umask和mask的區別和聯系
首先我們知道umask指的就是目前用戶在新建文件或者目錄時候默認的權限值,它是可以屏蔽文件(666)或者目錄(777)的最大權限,以獲得當前目錄或者文件的權限。而mask的設置指的是用戶或者組對該文件的權限不能超過mask的默認權限值。
兩者都是對權限的的限制,但是作用對象是不一樣的,umask的設定是針對新建文件或者目錄的權限,作用對象是文件或者目錄。而mask的設定是針對用戶或者組對已存在文件的使用權限,作用對象是用戶或者組。兩者的限制都可以避免權限過大,有效的保護系統里面的文件或者目錄安全。
umask和mask是對于目錄來說是可以繼承的,在下面的目錄在創建新文件,umask和mask值是不會變的(前提是同一個用戶,默認root用戶的umask值是022,而一般用戶的umask默認值是002),兩者都可以使用命令或者修改配置文件進行修改。
第三題、三種特殊權限的應用場景和作用
SUID
限制及其功能:
1、首先SUID的權限只能作用于二進制程序上
2、進程的發起者對該二進制程序必須需要有執行權限
3、啟動進程后,其進程的屬主就為原程序文件的屬主
4、本權限僅在執行該程序的過程中會有效,并且SUID文件設置在目錄上是沒有意義的
場景:我們知道/etc/shadow文件的所有者root只用讀的權限,屬主和其他人是沒有任何權限的,但是我們作為普通用戶想要查看這個文件怎么辦呢?
如果我們需要查看這個文件,我們需要使用cat命令,我們知道cat命令是二進制程序,我們使用which cat 命令查看該二進制的程序是放在/bin/cat文件里的,此時我們將二進制程序文件賦予權限SUID時(o+s),并且該文件的other必須要有x權限,僅這兩個權限即可,這時我們切換到普通用戶時,直接使用cat /etc/shadow即可查看該文件的內容,具體為什么呢?
我們分析下,第一點/bin/cat 二進制程序文件具有other的執行權限,我們普通用戶使用cat命令時,這個程序的發起者相對于/bin/cat這個二進制程序是other的身份,由于有x權限,我們就可以執行cat這個命令。
第二點/bin/cat二進制程序文件具有SUID的特殊權限是,這個時候普通用戶啟動進程時,該進程的屬主就是我們的普通用戶,這個普通用戶就相當于該二進制程序文件/bin/cat的所有者,我們知道該文件的所有者是root,這個普通用戶就相當于root用戶,因此這個普通用戶去查看/etc/shadow(文件的所有者就是root,并且有r權限)是可以查看的
有些人認為root的權限太大,普通用戶是繼承了他的權限,就會打開任意文件,并不是這樣的。我們可以把/etc/shadow和/bin/cat的屬組改為普通用戶,當有SUID權限和x權限時,不管哪個用戶發起的查看/etc/shadow這個進程都可以執行成功的,這里再次強調啟動進程之后,其進程的屬主就是原程序文件的屬主(是他們的身份)
SGID
限制及其功能:此權限可以作用于二進制程序文件上,也可以作用于目錄上面
可執行的文件上的SGID權限
1、任何一個可執行的程序文件能不能啟動為進程,取決于發起者對于該程序文件時候有x的權限。
2、啟動為進程之后,其進程的屬主為原程序文件的屬組
場景:原理同SUID,具體參考SUID的場景即可
簡單舉一個例子,我們使用/usr/bin/locate這個二進制程序去查看/var/lib/mlocate/mlocate.db這個文件,我們查看這兩個文件的權限時可以知道他們兩個的屬組都是slocate組,當把/usr/bin/locate文件加上SGID權限時,我們的普通用戶就可以使用locate命令查看上面的mlocate.db文件了,因為當這個普通用戶啟動進程時,他就獲得了slocate這個組的支持,因此就可以查看文件了。
目錄上的SGID權限
1、用戶對于此目錄有r、x權限時,該用戶能夠進入該目錄,這是第一步
2、用戶在這個目錄下面的主組是將會變成該目錄的用戶組
3、用戶對于該目錄有w權限時(可以新建文件),則新建的文件的用戶組和此目錄的用戶組是相同的
場景:SGID針對目錄上的權限,在實際項目開發中很常見,我們這個項目組叫Project,里面共有兩個用戶tom,xiaoming ,這時候要求這兩個用戶對/testdir/test目錄有共同的開發權,兩者都可以在該目錄下面創建新的文件,并且這個文件的屬組是Projict這個組,因此屬于這個組的用戶對她都可以有一定的權限,我們對/testdir/test這個目錄的權限最好設置為2770,這時候都可以在這個Project組下,這兩個用戶可以互相修改對方的文件了。
Sticky
限制及其功能:
1、僅針對目錄有效。
2、具有寫入權限的(w、x)的目錄通常普通用戶可以任意刪除該目錄下面其他用戶創建的文件或者目錄,無論該文件的權限和所有者。
3、如果在目錄上面設置Sticky位時,在該目錄下面的文件或者目錄,只有文件或者目錄的所有者或root可以刪除。
場景:/testdir/test這個目錄的other權限我們設置為w x權限,我們使用普通用戶andy登錄時,在這個目錄下面創建文件aa和目錄bb,然后換一個其他用戶li登錄時,在這個目錄下面創建文件cc和目錄dd,這時候li用戶可以寫東西進到文件所有者的aa文件,也可以刪除文件aa,意味著li用戶可以任意修改刪除/testdir/test目錄下面的任何文件。
此時我們在該目錄上面加上Sticky位時,此時li用戶只能刪除和修改自己的文件。
第四題、設置user1,使之新建文件權限為rw——-
[root@localhost ~]# useradd user1 [root@localhost ~]# getent passwd user1 user1:x:6017:6017::/home/user1:/bin/bash [root@localhost ~]# su - user1 [user1@localhost ~]$ umask 0002 [user1@localhost ~]$ umask 066 [user1@localhost ~]$ umask 0066 [user1@localhost ~]$ touch aa [user1@localhost ~]$ ll aa -rw-------. 1 user1 user1 0 Aug 1 23:27 aa
此設置僅對當前進程有效,當退出該用戶重新登錄,它的默認權限又會變成系統默認的002,因此需要到/etc/bashrc里面進行修改(全部用戶有效)或者到~/.bashrc(僅對當前用戶有效)
第五題、設置/testdir/f1的權限,使user1用戶不可以讀寫執行,g1組可以讀寫/testdir/dir的權限,使新建文件自動具有acl權限:user1:rw,g1:—
第一部分設置user1和g1組對該文件的acl權限:
[root@localhost ~]# setfacl -m u:user1:0 /testdir/f1 [root@localhost ~]# setfacl -m g:g1:rw /testdir/f1 [root@localhost ~]# getfacl /testdir/f1 getfacl: Removing leading '/' from absolute path names # file: testdir/f1 # owner: root # group: root user::rwx user:user1:--- group::r-x group:g1:rw- mask::rwx other::r-x
第二部分設置該目錄的acl權限能夠被繼承
[root@localhost ~]# setfacl -m d:u:user1:rw /testdir/f1 [root@localhost ~]# setfacl -m d:g:g1:0 /testdir/f1 [root@localhost ~]# getfacl /testdir/f1 getfacl: Removing leading '/' from absolute path names # file: testdir/f1 # owner: root # group: root user::rwx user:user1:--- group::r-x group:g1:rw- mask::rwx other::r-x default:user::rwx default:user:user1:rw- default:group::r-x default:group:g1:--- default:mask::rwx default:other::r-x
驗證下是否繼承了目錄的acl權限,實驗操作的確新建文件就會自動繼承父目錄的acl權限
[root@localhost ~]# cd /testdir/f1 [root@localhost f1]# touch aa [root@localhost f1]# mkdir bb [root@localhost f1]# ll -d aa bb -rw-rw-r--+ 1 root root 0 Aug 1 23:57 aa drwxrwxr-x+ 2 root root 4096 Aug 1 23:57 bb [root@localhost f1]# getfacl aa # file: aa # owner: root # group: root user::rw- user:user1:rw- group::r-x#effective:r-- group:g1:--- mask::rw- other::r--
備份/testdir目錄中所有文件的ACL,清除/testdir的所有ACL權限,并利用備份還原
第一步備份
[root@localhost testdir]# getfacl -R . > testdir.acl [root@localhost testdir]# cat testdir.acl # file: . # owner: root # group: root user::rwx group::rwx other::rwx # file: fi # owner: root # group: root user::rwx group::r-x other::r-x
。。。。。。。。略
第二步、刪除(需要加R選項刪除下面包括目錄的acl權限)
[root@localhost testdir]# setfacl -b . [root@localhost testdir]# ll ./f1 total 12 -rw-rw-r--+ 1 root root 0 Aug 1 23:57 aa drwxrwxr-x+ 2 root root 4096 Aug 1 23:57 bb [root@localhost testdir]# setfacl -bR . [root@localhost testdir]# ll ./f1 total 12 -rw-r--r--. 1 root root 0 Aug 1 23:57 aa drwxr-xr-x. 2 root root 4096 Aug 1 23:57 bb
第三步、恢復/testdir目錄的acl權限,并查看下面的文件或目錄的確恢復了
[root@localhost testdir]# setfacl --restore=testdir.acl [root@localhost testdir]# ll ./f1 total 12 -rw-rw-r--+ 1 root root 0 Aug 1 23:57 aa drwxrwxr-x+ 2 root root 4096 Aug 1 23:57 bb
原創文章,作者:AndyIvanXue,如若轉載,請注明出處:http://www.www58058.com/28865