提問:可執行文件的標準格式是什么?
Linux下面,目標文件、共享對象文件、可執行文件都是使用ELF文件格式來存儲的。程序經過編譯之后會輸出目標文件,然后經過鏈接可以產生可執行文件或者共享對象文件。Linux下面使用的ELF文件和Windows操作系統使用的PE文件都是從Unix系統的COFF文件格式演化來的。
我們先來了解一些基本的想法。
首先,最重要的思路是一個程序從人能讀懂的格式轉換為供操作系統執行的二進制格式之后,代碼和數據是分開存放的,之所以這樣設計有這么幾個原因:
1、程序執行之后,代碼和數據可以被映射到不同屬性的虛擬內存中。因為代碼一般是只讀的,而數據是可讀可寫的;
2、現代CPU有強大的緩存體系。程序和代碼分離可以提高程序的局部性,增加緩存命中的概率;
3、還有最重要的一個原因是當有多個程序副本在運行的時候,只讀部分可以只在內存中保留一份,這樣大大節省了內存。
在ELF的定義中,把他們分開存放的地方稱為一個 Section ,就是一個段。一個ELF文件中重要的段包括:
.text 段:存儲 只讀程序 ; .data 段:存儲 已經初始化的全局變量和靜態變量
.bss 段:存儲 未初始化的全局變量和靜態變量,因為這些變量的值為0,所以這個段在文件當中不占據空間
.rodata 段:存儲 只讀數據,比如字符串常量。
下面我們談一談文件的權限管理。
一、文件權限
文件的權限主要針對三類對象進行定義:
owner: 屬主, u ; group: 屬組, g ; other: 其他, o
v 每個文件針對每類訪問者都定義了三種權限:
r: Readable ; w: Writable ; x: eXcutable
文件權限的操作
chmod who所有者 opt選擇 per權限 file文件
who :u,g,o,a ; opt:+,-,= o+rwx ;per:r,w,x
a=:所有人不給權限,但是對root除了x權限,其他的讀寫都沒影響。
chgrp sales testfile 改變testfile的屬組為sales
v chown root:admins testfile 改變testfile 的屬主為root,屬組為admins
v chmod u+wx,g-r,o=rx file 增加file的屬主權限wx,屬組減少x;其他人改為rx
v chmod -R g+rwX /testdir
改變/testdir權限,屬主和其他人都沒有讀的權限,屬組都有權限但是對目錄下文件沒修改權限
v chmod 600 file 改變file的權限為600(rw- — —)
v chown mage testfile 改變testfile的屬主為mage
1.1 文件
r:可讀取此文件的實際內容,如讀取文本文件的文字內容等
w:可以編輯、新增或是修改該文件的內容(但不含刪除該文件)
x:該文件具有可以被系統執行的權限
1.2 目錄
r:表示具有讀取目錄結構列表的權限,所以當你具有r讀取一個目錄的權限時,表示你可以查詢該目錄下的文件名 數據,可以用ls將目錄下的內容列表顯示出來。
w:具有更改該目錄結構列表的權限:
新建新的文件與目錄;刪除已經存在的文件和目錄(不論該文件的權限如何)
將已經存在的文件或目錄進行重命名;轉移該目錄內的文件、目錄位置。
x:表示用戶能夠進入該目錄成為工作目錄。
X:給目錄加執行權限,而不給目錄下的文件加執行權限(考慮文件容易感染病毒,故一般不加執行文件,以保證安全),但文件本身有x權限的話,目錄下文件也加上了執行權限
如果沒有給目錄執行權限,用戶就不能讀取目錄下文件的內容。
沒有讀權限,看不了,就不能用tab補全
執行權限是一個基本的權限 :能不能刪除目錄下的文件,與目錄下的文件的權限無關,只與目錄的執行權限有關,這也是只讀文件不能夠被修改,但可以被刪除(目錄的權限)
在這兒理解cp –f 刪除之后重新建立文件這時候的文件的所有者,所以組可能會改變
可以用逗號隔開兩個設置
僅可以寫文件在以后的企業操作中也有,不一定要能看
二、新建文件和目錄的默認權限
umask:掩碼 可以用來保留在創建文件權限
默認新建文件的最大權限666,目錄的最大權限是777 :umask+default =dir777 [file666]
非特權用戶的umask是022,root的umask是002
root的umask一般比普通用戶偏大,則創建的文件權限偏小,那么其他用戶訪問root里的文件的權限就會小得多
改umask的配置文件 /etc/.bashrc ,~/.bashrc在最后的一行加上umask #(權限值)
文件默認權限=666-umask=有奇數+1 目錄的默認權限=777-umask
umask u=rwx,g=r,o= 直接該邊創建的文件或目錄權限
umask –p >> ~/.bashrc 直接把umask至追加到配置文件中。
三、Linux文件系統上的特殊權限
SUID,SGID,Sticky(粘滯鍵)
SUD,SGID:二進制程序,不是文本,(用file查看)當普通用戶去執行一個SUID權限的二進制程序文件時,他將
臨時切換所有者身份為root,(u+s)suid默認權限對應的數字為4;
當普通用戶去執行一個SGID權限的二進制程序文件時,他將臨時加入所有組中,有對應的組權限 sgid默認權限對應的數字是2;
sgid權限對目錄的作用:新建文件的所屬組自動繼承目錄的所屬組。
如果把cat的路徑/sbin/cat chmod u+s 那么cat就相當于管理員運行的,就可以看原本沒有權限的文件。
3.1 安全上下文
前提:進程有屬主和屬組,文件有屬主和屬
(1)任何一個可執行程序文件能不能啟動為進程:取決于發起者對程序文件是否擁有執行權限。
(2)啟動為進程之后,其進程的屬主為發起者;進程的屬組為發起者所屬的組
(3)進程訪問文件時的權限,取決于進程的發起者
(a)進程的發起者,同文件的屬主,
(b)進程的發起者,屬于文件屬組;
(c)應用文件”其他權限“
3.2 可執行文件上的SUID的權限
任何一個可執行程序文件能不能自動為進程:取決于發起者對程序文件是否擁有執行權限 。
啟動為進程之后,其進程的屬主為原程序文件(root)的屬主
SUID只對二進制可執行程序(binary program)有效 ;SUID設置在目錄上無意義
權限設定:chmod u+s FILE… chmod u+s FTLE…
3.3 可執行文件SGID權限
任何一個可執行程序文件能不能啟動為進程:取決于發起者對程序文件是否擁有執行權限
啟動為進程之后,其進程的屬主為原程序文件(root)的屬組
權限設定:chmod g+s FILE… chmod g-s FILE…
3.4目錄上的SGID權限
默認情況下,用戶創建文件時,其屬組為此用戶所屬的主組
v 一旦某目錄被設定了SGID ,則對此目錄有寫權限的用戶在此目錄中創建的文件所屬的組為此目錄的屬組。
v 通常用于創建一個協作目錄
v 權限設定:chmod g+s DIR… ; chmod g-s DIR…
3.5 Sticky位
具有寫權限的目錄通常用戶可以刪除該目錄中的任何文件,無論該文件的權限或擁有權
在目錄設置Sticky位,只有文件的所有者或root可以刪除該文件
sticky設置在文件上無意義
作用于目錄(文件夾)chmod o+t dir:只能刪除目錄下自己創建的文件
就算別人創建的文件others有執行權限,也刪除不了
3.6設定文件的特定屬性
chattr +i file 固定文件,不能刪除修改改名,只能讀取,cp之后屬性消失
chattr +a file 只能追加內容至文件,不能修改刪除
lsattr a 顯示特定屬性
四、ACL訪問控制列表
ACL:Access Control List;實現靈活的權限管理,給不同的用戶不同的權限
除了文件的所有者,所屬組和其他人,可以對更多的用戶設置權限
CentOS7.0默認創建的xfs 和ext4文件系統有ACL功能
CentOS7.X之前的版本,默認手工創建的ext4文件系統無ACL功能,需要用下面的來手工添加:
tune2fs –o acl /dev/sdb1 mount –o acl /dev/sdb1 /mnt
ACL的生效順序:所有者,自定義用戶,自定義組,其他人
–rm u:rwX 只對目錄有執行權限,對其的文件沒有執行權限 ?
mask 只影響除了所有者和other的之外的人和組的最大權限,mask需要與用戶的權限進行邏輯與運算之后,才能變成有效的權限(Effective Permission)。
用戶或組的設置必須存在于mask權限設定的范圍內才會生效
setfacl –m mask::r f1 這樣定義的文件,mask就相當于一個限制器;任何人所擁有的權限不能超過mask,即只讀權限。(任何人:除所有者和other之外的人和組)
——set 選項會把原有的ACL 項都刪除,用新的替代,需要注意的是一定要包含UGO 的設置,不能象-m 一樣只是添加ACL 就可以 ;如:setfacl – -set u: : rw,u : wang:rw, g: :r,o ::- file1
getfacl file | dir 查看文件或目錄的特殊權限:flags
4.1 setfacl設置ACL
setfacl –m u:wang:rwx file | dir 指定用戶王對文件或目錄的權限
? setfacl -Rm g:sales:rwX directory 針對文件目錄加X,目錄下的文件不加x
? setfacl -M file.acl file|directory
? setfacl -m g:salesgroup:rw file| directory 指定用戶組對文件或目錄的權限
? setfacl -m d:u:wang:rx directory
? setfacl -x u:wang file |directory 刪除使用者使用文件或目錄的記錄
setfcal –X file.acl dir
ACL文件上的group權限是mask值(自定義用戶,自定義組,擁有組的最大權限),而非傳統的組權限
getfacl 可以看到特殊權限:flags
base ACL 不能刪除
v setfacl -k dir 刪除默認ACL 權限
v setfacl -b file1 清除所有ACL 權限
getfacl file 1 | setfacl –set-file=- file2 復制file1的acl給file2
4.2備份和恢復acl
主要的文件操作命令cp和mv都支持acl,但cp命令需要加上-p參數。但是tar等常見的備份工具是不會保留目錄和文件的ACL信息
#getfacl -R /tmp/dir1 > acl.txt 把/tmp/dir1下acl權限的文件覆蓋到acl.txt文件中
#setfacl -R -b /tmp/dir1 清除/tmp/dir1下所有有acl權限的 文件
#setfacl -R –set-file=acl.txt /tmp/dir1 重新設置/tmp/dir1下的文件有acl權限
#setfacl –restore acl.txt 重新保存acl.txt權限文件
#getfacl -R /tmp/dir1 查看/tmp/dir1下的acl權限的文件。
4.3 整理:權限和命令之間的關系
1.讓用戶能進入某目錄成為”可工作目錄“的基本權限是什么?
可以使用的命令:例如cd等切換工作目錄的命令
目錄所需的權限:用戶對這個目錄至少需要x權限
額外要求:用戶想在這個目錄內使用ls查閱文件名,則用戶對此目錄還需要r權限
2.用戶在某一個目錄內讀取一個文件的基本權限是什么?
可使用的命令:例如cat,less,head等
目錄所需權限:用戶對這個目錄至少需要有x權限
文件所需權限:用戶對此目錄下的文件至少需要r權限
3.讓用戶可以修改一個文件的基本權限是什么?
可使用的命令:例如nano,vi等
目錄所需權限:用戶對文件所在的目錄至少要有x權限
文件所需權限:用戶多文件至少需要r,w權限
4.讓一個用戶可以創建一個文件的基本權限是什么?
目錄所需權限:用戶在該目錄要具有w,x權限,重點在w
5.讓用戶進入某目錄并執行該目錄下的命令的基本權限是什么?
目錄所需權限:用戶在該目錄下至少需要x權限
文件所需權限:用戶在該文件下至少需要x權限
原創文章,作者:lyx,如若轉載,請注明出處:http://www.www58058.com/60542