當前用戶:vagrant:vagrant
建立 testdir
目錄,進入 testdir
目錄內。建立文件 test
。ubuntu
$ mkdir testdir $ cd testdir $ touch test
修改 testdir
權限爲 000
,嘗試執行 ls testdir
bash
$ chmod 000 testdir $ ls testdir/ ls: cannot open directory testdir/: Permission denied
修改 testdir
權限爲 400
,嘗試執行 ls testdir
spa
$ chmod 400 testdir ls -l testdir/ ls: cannot access testdir/test: Permission denied total 0 -????????? ? ? ? ? ? test
結果:可以讀取目錄下文件列表,可是看不到具體文件信息(權限、大小、用戶組、時間等),儘管當前用戶是 /testdir/test
的擁有者
且具備 rwx
權限。
擁有目錄的 r
權限能夠讀取目錄下的文件列表。vagrant
繼續,嘗試進入 testdir
目錄。code
$ cd testdir/ -bash: cd: testdir/: Permission denied
看來 r
權限並不能讓咱們具備進入目錄。
咱們增長一個 x
權限試試。圖片
~$ chmod 500 testdir/ ~$ cd testdir/ ~/testdir$ ls -l total 0 -rw-rw-r-- 1 vagrant vagrant 0 Nov 19 08:16 test
成功進入。
擁有目錄的 x
權限可以讓咱們進入到目錄下。在此工做目錄下,咱們能夠查看文件列表及文件的屬性信息。開發
嘗試刪除 test
文件或者新建文件 test1
。rem
~/testdir$ rm test rm: cannot remove ‘test’: Permission denied ~/testdir$ touch test1 touch: cannot touch ‘test1’: Permission denied
擁有目錄的 r x
權限並不能容許咱們改變目錄的內容。目錄裏的文件列表能夠看作是目錄的內容。
擁有目錄的 w
權限能夠對目錄的內容進行增刪。it
~/testdir$ chmod 700 . ~/testdir$ rm test ~/testdir$ touch test1 ~/testdir$ ls -l total 0 -rw-rw-r-- 1 vagrant vagrant 0 Nov 19 08:30 test1
在上面的例子裏,咱們建立的新文件的權限是 664
(-rw-rw-r--),爲何默認權限會是 664
,我若是想改變新文件的默認權限怎麼辦?io
控制檯輸入 umask:
$ umask 0002
umask
是權限的補碼。文件的默認權限是 666 - umask
。
若是咱們建立的文件不想讓其餘用戶有 r
權限,則修改補碼爲 0006
便可。
~/testdir$ umask 0006 ~/testdir$ touch test2 ~/testdir$ ls -l | grep test2 -rw-rw---- 1 vagrant vagrant 0 Nov 19 08:38 test2
爲何文件的默認權限不是 777 - umask
呢?由於新建的文件默認不具備可執行權限,因此只考慮 rw
權限的話,這波操做天然是 666
了。
目錄默認具備 x
權限,當 umask
是 0002
時,建立的目錄的默認權限應該是 777 - 0002 = 775
:
~/testdir$ mkdir dir1 ~/testdir$ ls -l | grep dir1 drwxrwxr-x 2 vagrant vagrant 4096 Nov 19 08:39 dir1
通常來講文件權限是 rwx
。咱們查看一下 passwd
(修改密碼命令)的權限:
~/testdir$ ls -l /usr/bin/passwd -rwsr-xr-x 1 root root 47032 May 16 2017 /usr/bin/passwd
細心點你會發現它的用戶權限的 x
位居然是 s
。這個權限叫 SUID
,僅對二進制程序有效。
當用戶具備該文件的執行權限時,執行該文件會短暫的獲取該文件全部者權限的支持。
好比:全部用戶的密碼存在 /etc/shadow
這個文件裏,且該文件的權限默認是 -r-------- root root
,僅root
用戶具備強制寫入權限,那爲何普通用戶還能修改本身的密碼呢?就是由於 passwd
命令具備 SUID
權限,用戶執行該命令時會得到文件全部者 root
的權限支持,從而修改本身的密碼。
當 group
的 x
位置變成 s
時,說明該文件具備 SGID
權限。SGID
權限對二進制程序有效。相似 SUID
,用戶在具備文件的 x
權限時,執行該文件,會獲取該文件所屬用戶組的權限支持。
除了二進制程序外,SGID
也能夠設置在目錄上。
若用戶對該目錄具備 SGID
權限:
用戶在此目錄下的有效用戶組將會變成該目錄的用戶組。
若是用戶具備該目錄的 w
權限,則用戶在此目錄下建立的文件的用戶組與此目錄的用戶組相同。
該權限對於項目開發很重要。
該權限目前只對目錄有效:
當用戶對此目錄具備 w,x
權限,用戶在該目錄下建立文件夾或目錄後,僅本身和 root
纔有權限刪除該文件。
Others
的 x
權限位若爲 t
,則說明文件夾具備 SBIT
權限。
好比 /tmp
目錄:
$ ls -l / | grep tmp drwxrwxrwt 4 root root 4096 Nov 19 09:09 tmp $ sudo -s # touch test root@vagrant-ubuntu-trusty-64:/tmp# exit exit vagrant@vagrant-ubuntu-trusty-64:/tmp$ rm test rm: remove write-protected regular empty file ‘test’? y rm: cannot remove ‘test’: Operation not permitted
如何設置以上三種權限
若是在普通的權限設置的「三個數字」前再加一個數字,那前面這個數字就表明這幾個權限了:
好比:
# chmod 777 /tmp # ls -l / | grep tmp drwxrwxrwx 4 root root 4096 Nov 19 09:17 tmp # chmod 1777 /tmp # ls -l / | grep tmp drwxrwxrwt 4 root root 4096 Nov 19 09:17 tmp