電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>嵌入式開發(fā)>Linux系統(tǒng)文件權(quán)限細(xì)節(jié)分析

Linux系統(tǒng)文件權(quán)限細(xì)節(jié)分析

2017-11-07 | rar | 0.3 MB | 次下載 | 免費(fèi)

資料介紹

linux是一個安全的操作系統(tǒng),她是以文件為基礎(chǔ)而設(shè)計的,其文件權(quán)限是比較復(fù)雜的,可以用stat命令以及l(fā)sattr命令來顯示某個文件的詳細(xì)信息
  可以看到,文件權(quán)限的含義是比較廣的,先來看-rwxr-xr-x,第一位是文件的類型,它定義了用戶只能某種方式來操作文件,后面九位是文件的存取控制信息,linux的文件許可機(jī)制將用戶分為三類:文件屬主u(user)、文件屬組g(group)和其它用戶o(other)。三類不同的用戶可以對文件擁有三種不同級別的權(quán)限:讀r(read)、寫w(write)和運(yùn)行x(execute)。于是形成了九位的權(quán)限信息,分為三組,分別對應(yīng)u,g, o。除此之外,用戶還可以設(shè)置setuid與setgid位來改變程序的執(zhí)行身份。用lsattr命令則可以看到文件的屬性,控制位包括 asacddiijsttu,這些也是能控制文件的存取的。
  $ stat file1  file: `file1‘
  size: 11904 blocks: 24 io block: 4096 regular file
  device: 301h/769d inode: 355982 links: 1
  access: (0755/-rwxr-xr-x) uid: ( 503/ jack) gid: ( 503/ general)
  access: 2003-10-19 09:14:12.000000000 +0800
  modify: 2003-10-14 20:41:21.000000000 +0800
  change: 2003-10-19 18:56:25.000000000 +0800
  $ lsattr file  ----i--a----- file
  由于篇幅有限,不可能就這些一一進(jìn)行分析,本文著力分析文件權(quán)限中w(write)的真正含義,挖出其背后隱藏的細(xì)節(jié),力圖使讀者能正確用好這個關(guān)鍵的權(quán)限位,不至于在系統(tǒng)管理中出現(xiàn)差漏。
  為了能更直觀的說明問題,本文采用實驗操作的方式,一步一步的進(jìn)行分析。為了簡化操作,我們用o(other)這組權(quán)限來做實驗。實驗中用到的權(quán)限位均屬于o(other), 進(jìn)行操作的用戶均非root用戶,屬于o(other)。
  在實驗之前,必須澄清一個概念,目錄也是一種文件,它主要包括了兩方面的信息,該目錄下文件的文件名稱與文件inode編號,它們之間有一一對應(yīng)的關(guān)系。不過目錄文件比較特殊,不能用常規(guī)的方法進(jìn)行讀寫,必須用系統(tǒng)的專用命令來操作。命令ls其實是對目錄文件進(jìn)行讀操作,命令mv,rm則是對目錄文件進(jìn)行寫操作。
  好了,該說說w(write)的真正含義了,一句話,linux文件權(quán)限中的w是對該文件的*內(nèi)容*進(jìn)行限定。下面的實驗可以驗證。
  實驗1, 目錄文件: /test(rwx), 普通文件: /test/file(r--)。 當(dāng)前目錄:/test
  linux是一個安全的操作系統(tǒng),她是以文件為基礎(chǔ)而設(shè)計的,其文件權(quán)限是比較復(fù)雜的,可以用stat命令以及l(fā)sattr命令來顯示某個文件的詳細(xì)信息:
  $ echo “abc” 》file  bash: file: permission denied
  試圖對file的內(nèi)容進(jìn)行改寫, 但file的權(quán)限是只讀,很顯然,操作失敗。
  linux是一個安全的操作系統(tǒng),她是以文件為基礎(chǔ)而設(shè)計的,其文件權(quán)限是比較復(fù)雜的,可以用stat命令以及l(fā)sattr命令來顯示某個文件的詳細(xì)信息:
  $ cat file  hello world!
  沒有問題, 可以讀出file的內(nèi)容。
  linux是一個安全的操作系統(tǒng),她是以文件為基礎(chǔ)而設(shè)計的,其文件權(quán)限是比較復(fù)雜的,可以用stat命令以及l(fā)sattr命令來顯示某個文件的詳細(xì)信息:
  $ mv file file2  $ ls  file2
  這是怎么回事呢, file的權(quán)限明明是只讀啊, 請注意, 前面提到了, 文件中的rw權(quán)限只是針對當(dāng)前文件的內(nèi)容進(jìn)行限定, 文件名不屬于當(dāng)前文件的內(nèi)容, 它是保存在上一級的目錄文件的內(nèi)容中。而mv命令表面上是針對file的,其實是對/test的內(nèi)容進(jìn)行改寫,再看看/test的權(quán)限, 是可寫的(rwx)。許多用戶為了保護(hù)文件,將其權(quán)限設(shè)成只讀就不管了,這是非常危險的,誠然,可以達(dá)到保護(hù)文件內(nèi)容的目的(其實也未必,補(bǔ)充內(nèi)容中有論述),但你卻不能保證文件是否會被更名或被刪除,保險的方法是將文件父目錄的權(quán)限也設(shè)為只讀。當(dāng)然,也有其他的方法,比如用chattr +i命令或?qū)⑽募到y(tǒng)用ro方式掛載等等,但這些不在本文論述范圍。
  linux是一個安全的操作系統(tǒng),她是以文件為基礎(chǔ)而設(shè)計的,其文件權(quán)限是比較復(fù)雜的,可以用stat命令以及l(fā)sattr命令來顯示某個文件的詳細(xì)信息:
  $ rm -f file2  $ ls  $
  同樣的原因, 我們可以刪除file2, 與上一次操作不同的是,我們不是改寫/test的一條紀(jì)錄,而是在刪除/test的一條紀(jì)錄。
  實驗2, 目錄文件: /test(r-x), 普通文件: /test/file(rw-), 當(dāng)前目錄:/test
  linux是一個安全的操作系統(tǒng),她是以文件為基礎(chǔ)而設(shè)計的,其文件權(quán)限是比較復(fù)雜的,可以用stat命令以及l(fā)sattr命令來顯示某個文件的詳細(xì)信息:
  $ echo “abc” 》file  $ cat file  abc
  /test的權(quán)限雖然是只讀,但我們改寫的是file的內(nèi)容, 它的權(quán)限是可寫,當(dāng)然沒有問題。
  linux是一個安全的操作系統(tǒng),她是以文件為基礎(chǔ)而設(shè)計的,其文件權(quán)限是比較復(fù)雜的,可以用stat命令以及l(fā)sattr命令來顯示某個文件的詳細(xì)信息:
  $ mv file file2
  mv: cannot move ’file‘ to ’file2‘: permission denied
  $ rm -f file  rm: cannot remove ’file‘: permission denied
  我們已經(jīng)知道, 這兩條指令其實與file的權(quán)限無關(guān), 而是在改寫/test的內(nèi)容, 當(dāng)然操作失敗。通過前面幾個操作,我們應(yīng)該要分清楚指令真正的操作對象是誰,這樣才能對文件權(quán)限作出正確的設(shè)定。
  實驗3, 目錄文件: /test(rwx), 普通文件: /test/file(r--), 目錄文件: /test/dir(r-x), 普通文件: /test/dir/file(rw-), 當(dāng)前目錄:/test
  linux是一個安全的操作系統(tǒng),她是以文件為基礎(chǔ)而設(shè)計的,其文件權(quán)限是比較復(fù)雜的,可以用stat命令以及l(fā)sattr命令來顯示某個文件的詳細(xì)信息:
  $ mv file file2  $ mv dir dir2  $ ls  dir2 file2
  很順利, 因為/test/file與/test/dir的父目錄/test的權(quán)限給的太寬松了,是rwx。
  linux是一個安全的操作系統(tǒng),她是以文件為基礎(chǔ)而設(shè)計的,其文件權(quán)限是比較復(fù)雜的,可以用stat命令以及l(fā)sattr命令來顯示某個文件的詳細(xì)信息:
  $ rm -f file2
  $ rm -rf dir2
  rm: cannot remove ’dir2/file‘: permission denied
  $ ls -r  。:  dir2    。/dir2:  file
  到這里, 我們已經(jīng)絲毫不奇怪普通文件/test/file2被刪除, 但具有同等地位的目錄文件/test/dir2卻安然無恙。當(dāng)執(zhí)行rm -rf dir2時, 由于存在普通文件/test/dir2/file, 系統(tǒng)便嘗試先刪除它, 也就相當(dāng)于修改目錄文件/test/dir2的內(nèi)容, 但它的權(quán)限是只讀, 不能進(jìn)行修改,也就相當(dāng)于不能刪除/test/dir2/file, 又由于/test/dir2與/test/dir2/file有依存關(guān)系, /test/dir2也就自然會被保留下來。
  回顧上一個操作(mv dir dir2),為什么目錄文件/test/dir卻可以被更名呢?由于更名操作并不涉及到自身的內(nèi)容被修改,修改的只是父目錄的內(nèi)容,而進(jìn)行刪除操作時,父目錄的內(nèi)容固然要被修改,但也同時也要修改自身的內(nèi)容(因為要刪除該目錄下的文件),這就不被允許了。如果/test/dir2的權(quán)限是可寫, 或者目錄下沒有子文件, 那么它的下場就和/test/file2一樣, 被刪除。
  通過前面的幾個操作,可以看到,文件有這么幾個關(guān)鍵狀態(tài):被讀、被改寫、被改名、被刪除、被執(zhí)行。然而系統(tǒng)只區(qū)分三種權(quán)限,即讀、寫、執(zhí)行(rwx)。那么改名與刪除這兩個操作是否系統(tǒng)就置之不理了呢?不是的,系統(tǒng)將這兩個操作歸入被操作文件的上一級目錄來管理。那么又是以何種方式來管理的呢?答案是目錄將其下的所有文件看作是它的內(nèi)容。這樣,當(dāng)用戶更名或刪除某個文件時,執(zhí)行的是對上一級目錄的寫操作,屬于rwx三種權(quán)限之一的w操作,并沒有逃出系統(tǒng)的管理范圍。
  我們的大腦總是活躍的, 能想象出各種各樣的事情, 能把許多簡單的東西組合成很復(fù)雜東西, 上面幾個實驗不正是這樣嗎, 象這樣的實驗我們還可以設(shè)計出許多, 但做的越多, 腦子似乎越亂(我已經(jīng)有一點了), 你能記的住這么多嗎? ok, 我們也許能將它想的簡單一些, 只需注意兩個方面, 一是要清楚目錄的內(nèi)容是什么;二是要明白文件權(quán)限中的w(write)的真正含義。仔細(xì)想想, 不是嗎?
  補(bǔ)充:
  在實驗1中, 如果用vim對file進(jìn)行編輯, 并且強(qiáng)制保存(w?。?是可以成功的。這并不是說vim就可以繞開系統(tǒng)的安全機(jī)制,而是vim耍了一個小小的把戲,它是先刪除這個文件,而后又生成一個同名的新文件。但有一個情況例外,就是當(dāng)這個文件有另外一個硬鏈接文件存在時,vim會拒絕強(qiáng)制保存,仔細(xì)想想,當(dāng)進(jìn)行刪除操作后,文件還存在,并沒有被真正刪除,而這時再新建一個文件,雖然同名,但已經(jīng)不是原來的那個文件了!筆者曾對此事也頗為疑惑,為了求證,仔細(xì)閱讀了vim6.2的源代碼,才找到答案。有興趣的讀者也可看一看,具體內(nèi)容在src/fileio.c中。
?
下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

查看更多

下載排行

本周

  1. 1TC358743XBG評估板參考手冊
  2. 1.36 MB  |  330次下載  |  免費(fèi)
  3. 2開關(guān)電源基礎(chǔ)知識
  4. 5.73 MB  |  6次下載  |  免費(fèi)
  5. 3100W短波放大電路圖
  6. 0.05 MB  |  4次下載  |  3 積分
  7. 4嵌入式linux-聊天程序設(shè)計
  8. 0.60 MB  |  3次下載  |  免費(fèi)
  9. 5基于FPGA的光纖通信系統(tǒng)的設(shè)計與實現(xiàn)
  10. 0.61 MB  |  2次下載  |  免費(fèi)
  11. 6基于FPGA的C8051F單片機(jī)開發(fā)板設(shè)計
  12. 0.70 MB  |  2次下載  |  免費(fèi)
  13. 751單片機(jī)窗簾控制器仿真程序
  14. 1.93 MB  |  2次下載  |  免費(fèi)
  15. 8基于51單片機(jī)的RGB調(diào)色燈程序仿真
  16. 0.86 MB  |  2次下載  |  免費(fèi)

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費(fèi)
  3. 2555集成電路應(yīng)用800例(新編版)
  4. 0.00 MB  |  33564次下載  |  免費(fèi)
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費(fèi)
  7. 4開關(guān)電源設(shè)計實例指南
  8. 未知  |  21548次下載  |  免費(fèi)
  9. 5電氣工程師手冊免費(fèi)下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費(fèi)
  11. 6數(shù)字電路基礎(chǔ)pdf(下載)
  12. 未知  |  13750次下載  |  免費(fèi)
  13. 7電子制作實例集錦 下載
  14. 未知  |  8113次下載  |  免費(fèi)
  15. 8《LED驅(qū)動電路設(shè)計》 溫德爾著
  16. 0.00 MB  |  6653次下載  |  免費(fèi)

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費(fèi)
  3. 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
  4. 78.1 MB  |  537796次下載  |  免費(fèi)
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420026次下載  |  免費(fèi)
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費(fèi)
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費(fèi)
  11. 6電路仿真軟件multisim 10.0免費(fèi)下載
  12. 340992  |  191185次下載  |  免費(fèi)
  13. 7十天學(xué)會AVR單片機(jī)與C語言視頻教程 下載
  14. 158M  |  183278次下載  |  免費(fèi)
  15. 8proe5.0野火版下載(中文版免費(fèi)下載)
  16. 未知  |  138040次下載  |  免費(fèi)