當你是該文件的擁有者、全部組、權限也有讀寫權限,可是沒法編輯它,那麼就要考慮它是否有隱藏權限;node
檢查文件隱藏權限
-R:連同子目錄的數據一同列出
-a:相似於ls的-a選項,即連同隱藏文件一同列出
lsattr 文件名bash
[root@jinkai01 ~]# lsattr /etc/passwd
---------------- /etc/passwdide
修改異常權限
chattr +i 文件名
不允許操做(沒法保存)ui
[root@jinkai01 ~]# lsattr a.txt
---------------- a.txt
[root@jinkai01 ~]# chattr +i a.txt
[root@jinkai01 ~]# lsattr a.txt
----i----------- a.txt
[root@jinkai01 ~]# rm -f a.txt
rm: 沒法刪除"a.txt": 不容許的操做
[root@jinkai01 ~]# mv a.txt b.txt
mv: 沒法將"a.txt" 移動至"b.txt": 不容許的操做對象
chattr -i 文件名 取消i 屬性字符串
[root@jinkai01 ~]# chattr -i a.txt
[root@jinkai01 ~]# lsattr a.txt
---------------- a.txt
[root@jinkai01 ~]# rm -f a.txt 刪除成功同步
chattr +a 文件名
只能在文件尾追加文字,不能修改,不能刪除,不能更名字it
[root@jinkai01 ~]# chattr +a a.txt
[root@jinkai01 ~]# lsattr a.txt
-----a---------- a.txt
[root@jinkai01 ~]# rm a.txt
rm:是否刪除普通空文件 "a.txt"?y
rm: 沒法刪除"a.txt": 不容許的操做
[root@jinkai01 ~]# echo fdsafdsfsda > a.txt
-bash: a.txt: 不容許的操做
[root@jinkai01 ~]# echo fdsafdsfsda >> a.txt
[root@jinkai01 ~]# cat a.txt
fdsafdsfsdatable
該權限針對二進制可執行文件,使文件在執行階段具備文件全部者的權限。 好比:passwd這個命令就具備該權限。當普通用戶執行passwd命令時,能夠臨時得到root權限,從而能夠更改密碼。
當咱們查詢/usr/bin/passwd的權限的時候會發現,出現了一個s權限,這個s權限就是咱們所講述的;class
[root@jinkai01 ~]# ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 6月 10 2014 /usr/bin/passwd
因爲每一個用戶都須要使用passwd命令來修改密碼,那麼就須要全部用戶都擁有這個文件的權限,也就是(全部者);
而這個文件的全部者倒是ROOT帳號與root組;此時咱們就會使用一個特殊權限來賦予它,也就是s權限;
set_uid命令:可使普通用戶臨時賦予root權限,可是對象必須是可執行的二進制文件;
[root@jinkai01 ~]# su - user1
上一次登陸:一 8月 3 14:38:14 CST 2020pts/0 上
[user1@jinkai01 ~]$ whoami
user1
[user1@jinkai01 ~]$ ls /root/
ls: 沒法打開目錄/root/: 權限不夠
[user1@jinkai01 ~]$ ls -ld /root/
dr-xr-x---. 4 root root 221 8月 3 15:54 /root/
此時咱們會發現/root/目錄的權限全部者爲root,其餘用戶user1根本沒法操做;
那麼咱們就須要使用root帳號給ls命令賦予s權限:
chmod u+s [路徑]
root@jinkai01 ~]# chmod u+s /usr/bin/ls
[root@jinkai01 ~]# ls -l /usr/bin/ls
-rwsr-xr-x. 1 root root 117680 10月 31 2018 /usr/bin/ls
再在user1帳號下ls下/root/目錄,咱們會發現能夠查看/root/目錄了;
[user1@jinkai01 ~]$ ls /root/
1 2 abc anaconda-ks.cfg a.txt
取消s權限:
格式:
chmod u-s [路徑]
[root@jinkai01 ~]# chmod u-s /usr/bin/ls
[root@jinkai01 ~]# ls -l /usr/bin/ls
-rwxr-xr-x. 1 root root 117680 10月 31 2018 /usr/bin/ls
該權限能夠做用在文件上(二進制可執行文件),也能夠做用在目錄上。看成用在 文件上時,其功能和set uid同樣,它會使文件在執行階段具備文件所屬組的權限。目錄被設 置這個權限後,任何用戶在此目錄下建立的文件都具備和該目錄所屬的組相同的組,使其臨時具有全部組的權限
首先查看權限,普通用戶沒法ls /root/目錄下的文件;
[root@jinkai01 ~]# ls -l /usr/bin/ls
-rwxr-xr-x. 1 root root 117680 10月 31 2018 /usr/bin/ls
[root@jinkai01 ~]# su - user1
上一次登陸:一 8月 3 16:00:35 CST 2020pts/0 上
[user1@jinkai01 ~]$ ls /root/
ls: 沒法打開目錄/root/: 權限不夠
咱們經過root帳號賦予ls命令擁有所屬組來查看
chmod g+s [路徑]
[root@jinkai01 ~]# chmod g+s /usr/bin/ls
[root@jinkai01 ~]# ls -ld /usr/bin/ls
-rwxr-sr-x. 1 root root 117680 10月 31 2018 /usr/bin/ls
再切換到普通用戶user01來ls /root/看看
[root@jinkai01 ~]# su - user1
上一次登陸:一 8月 3 16:05:30 CST 2020pts/0 上
[user1@jinkai01 ~]$ ls /root/
1 2 abc anaconda-ks.cfg a.txt
取消權限(在root下取消)
chmod g-s [路徑]
[root@jinkai01 ~]# chmod g-s /usr/bin/ls
[root@jinkai01 ~]# ls -ld /usr/bin/ls
-rwxr-xr-x. 1 root root 117680 10月 31 2018 /usr/bin/ls
切換到普通用戶下查看:
[root@jinkai01 ~]# su - user1
上一次登陸:一 8月 3 16:06:49 CST 2020pts/0 上
[user1@jinkai01 ~]$ ls /root/
ls: 沒法打開目錄/root/: 權限不夠
能夠理解爲防刪除位。文件是否能夠被某用戶刪除,主要取決於該文件所在的目錄是否對該用戶具備寫權限。若是沒有寫權限,則這個目錄下的全部文件都不能刪除,同時也不能添加新的文件。若是但願用戶可以添加文件但不能刪除該目錄下其餘用戶的文件, 則能夠對父目錄增長該權限。設置該權限後,就算用戶對目錄具備寫權限,也不能刪除其餘用戶的文件。
防止其餘用戶刪除文件;/tmp/ 下可被其餘用戶編輯,沒法刪除其餘用戶的文件;
使用普通用戶user1在/tmp/下建立一個文件,給文件777權限;
[user1@jinkai01 tmp]$ touch 1.txt
[user1@jinkai01 tmp]$ chmod 777 1.txt
[user1@jinkai01 tmp]$ ls -l 1.txt
-rwxrwxrwx 1 user1 user1 0 8月 3 16:14 1.txt
切換到普通用戶user2,此時咱們發現能夠user2能夠編輯1.txt文件,可是沒法刪除1.txt;
[user1@jinkai01 tmp]$ su - user2
密碼:
上一次登陸:一 8月 3 14:33:30 CST 2020pts/0 上
[user2@jinkai01 ~]$ echo 1221121 > /tmp/1.txt
[user2@jinkai01 ~]$ echo 1221121 >> /tmp/1.txt
[user2@jinkai01 ~]$ cd /tmp/
[user2@jinkai01 tmp]$ rm 1.txt
rm: 沒法刪除"1.txt": 不容許的操做
設置權限:chmod o+t /tmp
取消權限:chmod o-t /tmp
軟連接:與硬連接不一樣,軟連接是創建一個獨立的文件,當讀取這個連接文件時,它會把讀取的行爲轉發到該文件所連接的文件上。例如,如今有一個文件a,咱們作了一個軟連接文件 b(只是一個連接文件,很是小),b指向了a。當讀取b時,b就會把讀取的動做轉發到a上,這樣就讀取了文件a。當咱們刪除文件a時,連接文件b不會被刪除;但若是再次讀取b時,會提示沒法打開文件。然而,當咱們刪除b時,a是不會有任何影響的。
至關於Windows中的快捷方式;
例如/bin 實際是/usr/bin
/bin -> usr/bin 這一行表明的是軟連接(快捷方式)
[root@jinkai01 ~]# ls -l /bin
lrwxrwxrwx. 1 root root 7 3月 24 17:32 /bin -> usr/bin
建立軟連接
格式:
ln -s [源文件目錄] [軟連接文件目錄(快捷方式)]
例如:ln -s /usr/bin /bin
在當前目錄建立一個軟連接(快捷方式),源文件在/root/abc/1.txt
[root@jinkai01 ~]# ln -s /root/abc/1.txt ./1.txt
[root@jinkai01 ~]# ls -l
總用量 12
lrwxrwxrwx 1 root root 15 8月 3 16:20 1.txt -> /root/abc/1.txt
刪除源 軟連接就會error
[root@jinkai01 abc]# rm -f 1.txt
[root@jinkai01 abc]# cd ..
[root@jinkai01 ~]# ls -l
總用量 12
lrwxrwxrwx 1 root root 15 8月 3 16:20 1.txt -> /root/abc/1.txt
硬連接:當系統要讀取一個文件時,會先讀inode信息,而後再根據inode中的信息到塊區域將數據取出來。而硬連接是直接再創建一個inode連接到文件放置的塊區域,即進行硬連接時該文件內容沒有任何變化,只是增長了一個指向這個文件的inode,並不會額外佔用磁盤空間。硬連接有兩個限制: (1)不能跨文件系統,由於不一樣的文件系統有不一樣的inode table; (2) 不能連接目錄。
複製文件,兩個文件相互爲硬連接,無論源與目的;刪除源不受影響
不容許將硬連接指向目錄
不能跨分區作硬連接;好比/boot下 沒法作到/下
格式:
ln [源文件路徑][硬連接文件]
[root@jinkai01 ~]# ln a.txt aa.txt
[root@jinkai01 ~]# ls -l
-rw-r--r-- 2 root root 12 8月 3 15:55 aa.txt
-rw-r--r-- 2 root root 12 8月 3 15:55 a.txt
實驗:咱們編輯a.txt文件,而後查看aa.txt文件會發現,a.txt的內容會同步到aa.txt文件裏面
實驗前:
[root@jinkai01 ~]# cat a.txt
11111111
22222222222222
333333333333333333
[root@jinkai01 ~]# cat aa.txt
11111111
22222222222222
333333333333333333
追加字符串4444444444到a.txt中
[root@jinkai01 ~]# echo 444444444 >> a.txt
查詢a.txt文件與aa.txt文件內容
[root@jinkai01 ~]# cat a.txt
11111111
22222222222222
333333333333333333
444444444
[root@jinkai01 ~]# cat aa.txt
11111111
22222222222222
333333333333333333
444444444
[root@jinkai01 ~]# ls -i16832369 1.txt 16832368 aa.txt 16797762 anaconda-ks.cfg16831353 2 21175 abc 16832368 a.txt