Linux中,ls -l指令可謂最常用不過了。指令顯示結果中的第一列也是我們比較關注的地方,一般說法是表示權限的字元佔10個位置。可是,我們也常看到在這一列中第十一個位置也有內容顯示,最常見的非那個點(.)莫屬了,還有加號(+)也會出現在這個位置,這到底是怎麼回事呢?讓我們親手實踐一下吧?
2.1 讓我們來看看根目錄。
[root@DCGH ~]# ls -lZ / lrwxrwxrwx. root root system_u:object_r:bin_t:s0 bin -> usr/bin dr-xr-xr-x. root root system_u:object_r:boot_t:s0 boot drwxr-xr-x. root root system_u:object_r:device_t:s0 dev drwxr-xr-x. root root system_u:object_r:etc_t:s0 etc drwxr-xr-x. root root system_u:object_r:home_root_t:s0 home lrwxrwxrwx. root root system_u:object_r:lib_t:s0 lib -> usr/lib lrwxrwxrwx. root root system_u:object_r:lib_t:s0 lib64 -> usr/lib64 drwxr-xr-x. root root system_u:object_r:mnt_t:s0 media drwxr-xr-x. root root system_u:object_r:mnt_t:s0 mnt drwxr-xr-x. root root system_u:object_r:usr_t:s0 opt dr-xr-xr-x. root root system_u:object_r:proc_t:s0 proc dr-xr-x---. root root system_u:object_r:admin_home_t:s0 root drwxr-xr-x. root root system_u:object_r:var_run_t:s0 run lrwxrwxrwx. root root system_u:object_r:bin_t:s0 sbin -> usr/sbin drwxr-xr-x. root root system_u:object_r:var_t:s0 srv dr-xr-xr-x. root root system_u:object_r:sysfs_t:s0 sys drwxrwxrwt. root root system_u:object_r:tmp_t:s0 tmp drwxr-xr-x. root root system_u:object_r:usr_t:s0 usr drwxr-xr-x. root root system_u:object_r:var_t:s0 var
2.2 在HOME目錄分別建立一個檔案和目錄,觀察權限了第十一個位置的詳細情況。
[root@DCGH ~]# touch DCGH [root@DCGH ~]# mkdir DCGH-DIR [root@DCGH ~]# ls -l 总用量 0 -rw-r--r--. 1 root root 0 3月 28 10:23 DCGH drwxr-xr-x. 2 root root 6 3月 28 10:24 DCGH-DIR
2.3 查看本機SELinux狀態,並列舉本目錄下檔案與目錄關於SELinux的基本情況。
[root@DCGH ~]# getenforce Enforcing [root@DCGH ~]# ls -lZ -rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 DCGH drwxr-xr-x. root root unconfined_u:object_r:admin_home_t:s0 DCGH-DIR
2.4 關閉SELinux,再建立實驗檔案和目錄,再次列舉本目錄及根下檔案和目錄關於SELinux的基本情況。
[root@DCGH ~]# sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config [root@DCGH ~]# reboot [root@DCGH ~]# getenforce Disabled [root@DCGH ~]# ls -lZ -rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 DCGH drwxr-xr-x. root root unconfined_u:object_r:admin_home_t:s0 DCGH-DIR [root@DCGH ~]# touch DCGH-later [root@DCGH ~]# mkdir DCGH-later-dir [root@DCGH ~]# ls -lZ -rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 DCGH drwxr-xr-x. root root unconfined_u:object_r:admin_home_t:s0 DCGH-DIR -rw-r--r-- root root ? DCGH-later drwxr-xr-x root root ? DCGH-later-dir [root@DCGH ~]# ls -lZ / lrwxrwxrwx. root root system_u:object_r:bin_t:s0 bin -> usr/bin dr-xr-xr-x. root root system_u:object_r:boot_t:s0 boot drwxr-xr-x root root ? dev drwxr-xr-x. root root system_u:object_r:etc_t:s0 etc drwxr-xr-x. root root system_u:object_r:home_root_t:s0 home lrwxrwxrwx. root root system_u:object_r:lib_t:s0 lib -> usr/lib lrwxrwxrwx. root root system_u:object_r:lib_t:s0 lib64 -> usr/lib64 drwxr-xr-x. root root system_u:object_r:mnt_t:s0 media drwxr-xr-x. root root system_u:object_r:mnt_t:s0 mnt drwxr-xr-x. root root system_u:object_r:usr_t:s0 opt dr-xr-xr-x root root ? proc dr-xr-x---. root root system_u:object_r:admin_home_t:s0 root drwxr-xr-x root root ? run lrwxrwxrwx. root root system_u:object_r:bin_t:s0 sbin -> usr/sbin drwxr-xr-x. root root system_u:object_r:var_t:s0 srv dr-xr-xr-x root root ? sys drwxrwxrwt. root root system_u:object_r:tmp_t:s0 tmp drwxr-xr-x. root root system_u:object_r:usr_t:s0 usr drwxr-xr-x. root root system_u:object_r:var_t:s0 var
透過上面的例子,我們可以看出來,這個點(.)不是沒有用的,而是作用巨大,我們平常沒怎麼注意而已。開啟SELinux後建立的檔案和目錄都會在權限列顯示這個點的,關閉SELinux後建立的檔案和目錄在權限列是不會顯示這個點的,之前建立的檔案或目錄都保持不變。
3.1 了解過Linux中ACL權限設定的朋友對於這個加號肯定不陌生。不過還是讓我們來驗證一下。
[root@DCGH ~]# setfacl -m u:dcgh:rwx * [root@DCGH ~]# ls -lZ -rw-rwxr--+ root root unconfined_u:object_r:admin_home_t:s0 DCGH drwxrwxr-x+ root root unconfined_u:object_r:admin_home_t:s0 DCGH-DIR drwxrwxr-x+ root root ? DCGH-DIR-later -rw-rwxr--+ root root ? DCGH-later [root@DCGH ~]# setfacl -b * [root@DCGH ~]# ls -lZ -rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 DCGH drwxr-xr-x. root root unconfined_u:object_r:admin_home_t:s0 DCGH-DIR drwxr-xr-x root root ? DCGH-DIR-later -rw-r--r-- root root ? DCGH-later
我們可以看到,加上了ACL權限控制之後,之前具有SELinux屬性的檔案和目錄的權限列最後一個位置全部變成了加號(+)。移除原來的ACL權限之後,恢復原樣。
4.1 Linux權限列的點不是無意義字元。在開啟SELinux的情況下建立的目錄和檔案有具有這個點,權限列有這個點說明該目錄或檔案以及設定了SELinux相關的權限。在停用SELinux權限之後,在先前開啟SELinux權限時建立的檔案或目錄保持原來的權限不便,權限列的點依然顯示。新建立的目錄或檔案在權限列無這個點顯示。
4.2 權限列中最後一個位置如果是加號,表示這個目錄或檔案已經設定了ACL權限相關的內容。如果加號存在,則已經有點的目錄或文件,點的顯示會被覆蓋,但原來的SELinux屬性保持不變。
以上是Linux中權限列中的加號及點的深度解讀的詳細內容。更多資訊請關注PHP中文網其他相關文章!