文件的權限管理

提問:可執行文件的標準格式是什么?

    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的權限為600rw- — —

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]

非特權用戶的umask022,rootumask002

 rootumask一般普通用戶偏大,則創建的文件權限偏小那么其他用戶訪問root里的文件的權限就會小得多

umask配置文件 /etc/.bashrc ,~/.bashrc最后的一行加上umask  #(權限值)

     文件默認權限=666-umask=有奇數+1   目錄的默認權限=777-umask

   umask u=rwx,g=ro= 直接該邊創建的文件目錄權限

 umask –p >> ~/.bashrc 直接umask至追加到配置文件中。

 

三、Linux文件系統的特殊權限

SUIDSGID,Sticky(粘滯鍵)

SUDSGID二進制程序,不是文本,file查看)當普通用戶去執行一個SUID權限的二進制程序文件,他將 

    臨時切換所有者身份root,(u+ssuid默認權限對應的數字為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訪問控制列表

    ACLAccess Control List;實現靈活的權限管理,給不同的用戶不同的權限

       除了文件的所有者所屬組和其他人,可以對更多的用戶設置權限

CentOS7.0默認創建的xfs ext4文件系統有ACL功能

CentOS7.X之前的版本,默認手工創建的ext4文件系統無ACL功能,需要用下面的來手工添加

            tune2fs –o acl /dev/sdb1       mount –o acl /dev/sdb1 /mnt

ACL的生效順序:所有者,自定義用戶,自定義組,其他人

    rm  urwX  只對目錄有執行權限,對的文件沒有執行權限 ?

   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  復制file1aclfile2  

4.2備份和恢復acl

  主要的文件操作命令cpmv都支持acl,但cp命令需要加上-p參數。但是tar等常見的備份工具是不會保留目錄和文件的ACL信息
#getfacl -R /tmp/dir1 > acl.txt   /tmp/dir1acl權限的文件覆蓋到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

(0)
lyxlyx
上一篇 2016-11-23
下一篇 2016-11-23

相關推薦

  • python 多版本管理(pyenv)

    01 – Python 簡介和安裝 01 – Python 簡介和安裝 1. Python 簡介 2. 安裝 pyenv 3. pyenv 使用 4. pyenv-virtualenv 5. 安裝 IPython 和 Jupyter 01 – Python 簡介和安裝 1. Python 簡介 編程風格 面向過程:以指令為…

    Linux干貨 2016-07-10
  • vim文本編輯器小結

    vi=vim打開文件 alias vi =vim vim -m 只讀方式打開文件 修改文件時則會無法保存   -b 二進制打開文件 -d file1 file2  比較兩個文件 Command(normal)默認模式:  ZZ 保存并退出 ZQ 不保存并退出Insert:編輯模式&nbsp…

    2017-08-05
  • ACL概述

    ACL概述 一、什么是ACL ACL是linux系統中一種被稱為訪問控制列表的權限控制方法,它是一種權限分配之外的普遍范式。在一般情況下,要確認三個權限組:owner、group和other。而使用ACL則可以增加權限給其他用戶或組別,不再僅僅是在“other”中定義權限,可以允許指定的用戶擁有不同于其所屬組的權限。 ACL支持多種Linux文件系統,包括e…

    2017-07-29
  • CentOS7的啟動及Systemd的管理?

    CentOS7的啟動流程     POST–>Boot Sequence–>Bootloader–>kernel+initramfs(initrd)–>rootfs–>/sbin/init    &n…

    Linux干貨 2016-09-21
  • LNMP 增加memcached緩存系統 構建LNMMP

    摘抄百度百科 memcache 的解讀 memcache是一套分布式的高速緩存系統,由LiveJournal的Brad Fitzpatrick開發,但目前被許多網站使用以提升網站的訪問速度,尤其對于一些大型的、需要頻繁訪問數據庫的網站訪問速度提升效果十分顯著[1]  。這是一套開放源代碼軟件,以BSD license授權發布。 MemCa…

    Linux干貨 2016-09-19
  • N26-第二周作業-邢巖(2)

     馬哥門徒-N26-邢巖   我們接著說今天的分享,接著,我們來看看bash的工作特性之命令執行狀態返回值和命令行展開所涉及的內容好了。    1.bash的基礎特性之:命令的執行狀態結果      bash通過狀態返回值來輸出此結果:       成功:0 …

    Linux干貨 2017-02-10
欧美性久久久久