1. 程式人生 > >LINUX系統下的普通權限以及幾種特殊權限

LINUX系統下的普通權限以及幾種特殊權限

應用 字符設備 cto 管道 內容 can 但是 less adb

1.基本權限與對用戶的權限管理

1.首先我們要想對用戶進行權限管理,就要知道如何查看一個文件的權限,我們可以用ll命令或者ls -l 命令查看某個文件的權限,如下圖:
技術分享圖片
我們可以看到使用ll命令列出了/app下文件的一些信息一共7列,這7列表示了/app下文件的詳細信息:
?(1)第一列一共有11個字符,第一位顯示的是文件類型,linux下文件一共分為7類:

 1.-  普通文件
 2.d  目錄文件
 3.b  塊設備文件
 4.c  字符設備
 5.l   符號鏈接文件
 6.p 管道文件
 7.s 套件字文件

這是linux下7中不同的文件類型,然後接下來的9位就是我們將要介紹到的權限,這9位權限分為3組,每組3位,每位上有兩種情況,如上圖,第一組是rwx,代表的就是可讀可寫可執行,如果,r代表可讀,如果是-就表示不可讀,w代表可寫,-代表不可寫,x代表可執行,-代表不可執行。這三組權限第一組代表的是文件所有者即owner的權限,第二組代表的是文件所有組即group的權限,第三組代表的是其他人即other的權限。最後一個.表示的是啟用selinux,這裏不再贅述。

?(2)第二列只有一個數字,表示該文件的連接數,如上3就是表示該文件有三個鏈接。
?(3)第三列表示的是文件的所有者,即owner的名字,如上root即是表示該文件屬於root這個用戶。
?(4)第四列表示的是文件的所有組,即group的名字,如上root即是表示該文件屬於root這個群組。
?(5)第五列表示的是文件的大小。
?(6)第六列表示文件的更新時間。
?(7)第七列表示文件名
??
2.現在我們引入一個概念:安全的上下文
??如果我們要復制/etc/passwd到目錄/app下,我們需要哪些權限哪?這條復制命令是?cp /etc/passwd /app?那麽要想復制一個文件,我們首先要擁有使用cp這條命令的權限,如果我們根本沒有權限使用cp命令,那復制根本無從談起;其次,想要復制一個文件,我們要能夠讀這個文件,如果沒不能夠讀這個文件,就沒有了復制源,自然無法復制;最後我們還要能在目的地能夠寫,這樣才能夠復制文件。我們的一切操作都是需要權限進行控制,這個就叫做安全的上下文。
??
3.具體什麽權限能夠實現的操作呢?
??我們對文件能夠實現的操作無非就是讀,寫,執行,以及他們的組合權限:創建,刪除,修改(能寫自然就能修改);3位權限,無非就是r,w,x,rw,rx,wx,rwx這其中組合。雖然文件有7種,但我們將目錄文件區分出來,下文中用目錄代替目錄文件,用文件代表其他文件。
??對文件來說:
????r權限:表示可以讀該文件的內容,使用cat或者less。
????w權限:表示可以修改文件的內容,使用vim,vi等。
????x權限:無任何作用。
????rw權限:表示可以對文件進行讀寫操作。
????wx權限:相當於w權限,只能寫。
????rx權限:表示可以讀該文件並能執行他。
????rwx權限:表示可讀,可寫,可執行,為最高權限。
??
??對目錄來說:
????r權限:表示可以短列出目錄的內容(子文件名,子目錄名)。
????w權限:無作用。
????x權限:可以進入該目錄。
????rw權限:相當於r權限。
????rx權限:可以長列出目錄的內容,可以進入目錄。
????wx權限:可以創建,刪除文件或目錄。
????rwx權限:可以列出,創建,刪除,進入目錄。
??
4.那麽如何修改權限,什麽人有權利修改文件或者目錄的權限呢?
??修改權限是通過chmod命令完成的。

對所有者權限修改 chmod u+/-r/x/w/rx/rw/wx/rwx +文件名
對群組權限修改     chmod g+/-r/x/w/rx/rw/wx/rwx +文件名
對其他用戶權限修改 chmod o+/r/x/w/rx/rw/wx/rwx +文件名

? ?同時我們也可以用二進制的方法來表示文件的權限。對於每一組權限,每一位上只有兩種可能,即是有或無,我們可以用1表示有,0表示無。就會是下面這樣:

r-- 100 =4
\-w- 010 =2
\--x 001 =1
rw- 110 =6
r-x 101 =5
\-wx 011=3
rwx 111=7
\--- 000 =0

因為可以用數字可以來表示權限,那麽我們就有了更簡單的方法來改變文件的權限:

chmod 777 /app/house

或者chmod 數字表示的權限 加文件,這樣可以一次性改變文件的所有權限。


? ?實驗看看誰能夠修改文件的權限,root用戶是超級用戶,是可以修改所有的權限的,此處不再實驗
? ?現在在創建用戶liubei,guanyu,zhangfei,caocao,創建群組shuguo,設置群管理員為guanyu,設置組成員為liubei,guanyu,caocao;在app下創建目錄test,修改權限為777,修改所屬組為shuguo,切換用戶為劉備,在/test下創建一個test.file,命令如下:

useradd liubei
useradd guanyu
useradd zhangfei
useradd caocao
groupadd shuguo
gpasswd -A guanyu shuguo
gpasswd -M liubei,guanyu,zhangfei
cd /app
mkdir test
chmod 777 test
su - liubei
cd /app/test
touch test.file
ll

結果如下圖:
技術分享圖片
技術分享圖片
??現在liubei是test.file的owne,guanyu是群組sanguo的管理員,liubei,zhangfei,guanyu是shuguo的群成員,caocao是other現在測試owner,群組成員,群管理員,其他人能否修改test.file的權限。
liubei是owner:
技術分享圖片
guanyu是shuguo的群管理
技術分享圖片
zhangfei是shuguo的群成員
技術分享圖片
caocao不是shuguo的群成員
技術分享圖片
由此可知只有root和文件的所有者能修改文件的權限,別人誰都不能修改。
????
5.那麽文件的所有者屬於一個群組,但所有者自己沒有權限讀該文件,但是群組有權限讀時,那麽該用戶能讀嗎?同時一個人屬於群組,但群組沒有讀權限,其他人有讀權限,那麽能讀嗎?(實驗當一個用戶訪問文件時,去和應用權限。)
??修改文件test.file的權限為070,命令如下

chmod 070 test.file

??liubei是test.file的owner
技術分享圖片
??修改文件test.file的權限為007,命令如下

chmod 007 test.file

??zhangfei是shuguo的組員
技術分享圖片
由此可以看出,當一個用戶訪問一個文件時,會首先判斷該用戶是不是owner,如果是,應用owner位權限,即是是群組成員,也不會應用group位權限,如果不是owner,則判斷是不是群組成員,如果是,應用group位權限,不會應用other位權限,如果不是,應用other位權限。
6.umask
我們可以在test中創建幾個文件和目錄如下,並查看他們的權限,然後回到/app,同樣創建幾個文件和目錄如下:

touch {1..5}
mkdir -p /a/b
ll
cd ..
mkdir -p /1/2/3
ll
cd 2
ll
cd 3
ll

??
技術分享圖片
??
技術分享圖片
??
技術分享圖片
??
技術分享圖片
??
我們可以發現文件的權限都是660,目錄的權限都是771,這是為什麽呢,在linux,創建文件時,時默認不能執行的,所以最高權限是666,目錄的最高權限是777,我們用777-771=006;用666-660=006;運行umask,可以看到umask值就是006;
由此可知文件的默認權限是666-umask,目錄的默認權限是777-umask。
??
現在設置umask的值為011,命令如下:

umask 011

創建一個目錄can,創建一個文件ca;然後查看權限,命令如下:

mkdir can
touch ca
ll

技術分享圖片
??
??可以看到文件的權限是666,而目錄的權限是766;我們會發現,666-011=655,這是為什麽呢?655的權限是多少呢 是rw-r-xr-x,是可執行文件,而文件被創建時是不被允許可被執行的,所以當umask是1,3,5時,對應的位,應該加1,這樣才能保證文件的不可執行。
??

7.特殊權限位s
??特殊權限位s可以作用在ower位上,即為sgid,也可以作用在group,即為sgid。
??suid:對於一個可執行文件作用了suid權限後,任何人執行該文件後,臨時擁有其所有人的權限。
我們用命令touch來實驗:首先查看touch權限是755,然後切換到liubei,創建文件liubei1.file;然後修改權限為750,切換到liubei下,創建文件liubei2.file;然後修改權限,加上u+s,切換到liubei,創建liubei3.file;修改權限為751,並加suid權限;切換到liubei,創建liubei4.file;最後修改權限為755,去掉suid權限;部分代碼如下:
ll /bin/touch

su - liubei
touch liubei1.file
su
chmod 750 /bin/touch
su - liubei
touch liubei2.file
su
chmod u+s /bin/touch
su - liubei
touch liubei3.file
su
chmod 751 /bin/touch
chmod u+s /bin/touch
su - liubei
touch liubei4.file

結果如下:
????
創建liubei1.file
技術分享圖片
創建liubei2.file
技術分享圖片
創建liubei3.file
技術分享圖片
創建liubei4.file
技術分享圖片
??由此可以看出,liubei1.file,與liubei4.file是創建成功的,liubei3.file,liubei.2file沒有創建成功,liubei1.file是因為liubei是other對touch有5權限,能夠讀touch內容,也能執行,所以能創建;liubei2.file不成功是因為other是0權限,liubei是other身份,自然不能創建;liubei3.file不成功的原因是liubei是other身份,我們先前介紹過安全的上下文,想要創建,首先能讀touch,這裏有suid權限,liubei臨時獲得了root的權限,所以可以讀touch命令,然後要看對目的地有沒有權限,最後看能不能用讀到的touch寫,這裏liubei只有0權限,雖然讀到touch,但是沒有執行權限,所以無法創建;liubei4.file有root的讀權限,自己也能執行touch,所以創建成功。
??sgid:1.當對一個可執行的二進制文件作用了sgid後,任何人在執行該文件時臨時擁有其所有組的權限。
?????2.當對一個目錄作用了sgid權限後,任何人在該目錄下創建的文件的所屬組,均與該目錄的所屬組相同。
??????
??1和suid相同,這裏不再贅述,我們直接實驗2;在/app下創建目錄house,修改該目錄的權限為777,然後加上sgid,權限,分別切換到liubei,guanyu,zhangfei下,在house下創建文件liubeitest1,guanyutest,zhangfeitest1,創建目錄liubeitest1,guanyutest1,zhangfeitest1;查看所屬組。代碼如下:

cd /app
mkdir house
chmod g+s house
su - liubei
cd /app/house
mkdir liubeitest1
touch liubeitest2
su - guanyu
cd /app/house
mkdir guanyutest1
touch guanyutest2
su - zhangfei
cd /app/house
mkdir zhangfeitest1
touch zhangfeitest2
su
ll /app/house

其結果如下:
技術分享圖片
所有創建的文件和目錄都沒有繼承其owner的主組,而是繼承了house的所屬組root。
????
8.特殊權限位t
??stisky:對一個目錄作用了stisky權限,該目錄下的文件僅其所有人和目錄的所屬人及root可以刪除。
??將之前創建的所有文件刪除;在/app下創建test目錄,修改權限為777,然後劉關張分別創建目錄liubei1,guanyu1,zhangfei1,文件liubei2,guanyu2,zhangfei2;然後切換到劉備下,刪除所有,再創建回來,修改test權限為o+t,再切換到張飛,刪除所有。部分代碼如下。

chmod 777 /app/test
切換用戶,創建文件目錄;
su - liubei 
rm -rf /app/test/*
切換用戶,創建文件目錄;
chmod o+t /app/test
su - zhangfei
rm -rf /app/test/*
註:將目錄文件權限全改為754

其結果如下:
創建文件:
技術分享圖片
其他用戶不能進入別人的目錄:
技術分享圖片
zhangfei刪除
技術分享圖片
重新建回來:
技術分享圖片
修改權限other位加t
技術分享圖片
關羽刪除:
技術分享圖片
????
我們可以看到當不加t權限時,即使不能進入別人的目錄,但卻可以刪掉別人的文件,但是加上t後,只能刪除自己的文件,不能刪除別人的文件。但是作為目錄的所屬人,是可以改變目錄的權限的,這樣他可以去掉t權限,所有可以修改別人的文件。
??
9.attr權限
attr權限是root用戶為了限制自己權利而設置的特殊權限,但是自己是可以修改的;
???? chattr +a 表示不能刪除,不能覆蓋,可以追加
??? ?chattr+i 表示不能刪除,不能覆蓋,不能追加
lsattr 查看attr權限
去掉attr權限
????chattr -i
????chattr -a
因為工作很少用root,不再驗證。

LINUX系統下的普通權限以及幾種特殊權限