權限管理

權限管理

在linux中的每一個文件或目錄都包含有訪問權限,這些訪問權限決定了誰能訪問和如何訪問這些文件和目錄。

我們先來看看文件的屬性:

zz.png

權限:

r:可獲取文件數據(讀取文件)

w:可修改文件的數據(寫入數據)

x:可以把此文件提請內核啟動為一個進程 (執行)

文件的權限主要針對三類對象進行定義: 

owner: 屬主, u 

group: 屬組, g 

other: 其他, o 

通過設定權限可以從以下三種訪問方式限制訪問權限:

  只允許用戶自己訪問;

  允許一個預先指定的用戶組中的用戶訪問;

  允許系統中的任何用戶訪問。

一個文件或目錄可能有讀、寫及執行權限。當創建一個文件時,系統會自動地賦予文件所有者讀和寫的權限,這樣可以允許所有者能夠顯示文件內容和修改文件。文件所有者可以將這些權限改變為任何他想指定的權限。

三種不同的用戶類型能夠訪問一個目錄或者文件:所有者、用戶組或其他用戶。

所有者就是創建文件的用戶,用戶是所有用戶所創建的文件的所有者,用戶可以允許所在的用戶組能訪問用戶的文件。

例如,某一類或某一項目中的所有用戶都能夠被系統管理員歸為一個用戶組,一個用戶能夠授予所在用戶組的其他成員的文件訪問權限。用戶也將自己的文件向系統內的所有用戶開放,在這種情況下,系統內的所有用戶都能夠訪問用戶的目錄或文件。

每一個用戶都有它自身的讀、寫和執行權限。

-rw-r--r--. 1 root root 103 Jul 25 09:47 /etc/issue

第一位-:表示文件類型

第二到第四位:屬主的權限

第五道第七位:屬組的權限

第八到第十位:系統里其他(other)用戶的權限

我們可以把它分成三組:第一組(第二到第四位),第二組(第五道第七位),第三組(第八到第十位)

權限對于文件:

第一組權限控制訪問自己的文件權限,即所有者權限。

第二組權限控制用戶組訪問其中一個用戶的文件的權限。

第三組權限控制其他所有用戶訪問一個用戶的文件的權限。

權限的表示法:

可以用字符表示,也可以用八進制數字表示

r:4         w:2          x: 1   

rw: 6        rx: 5         wx:3  

rwx:7       0:代表沒有權限

— 000 0 無權限      –x 001 1 執行    -w- 010 2 寫

-wx 011 3 寫和執行     r– 100 4 只讀     r-x 101 5 讀和執行

rw- 110 6 讀寫        rwx 111 7 讀寫執行

例如:640: rw-r—–  

    755:rwxr-xr-x

權限對于文件和目錄的意義:

讀 (r):Read     對文件而言,具有讀取文件內容的權限;對目錄來說,具有瀏覽該目錄信息的權限

寫 (w):Write    對文件而言,具有修改文件內容的權限;對目錄來說具有刪除移動目錄內文件的權限

執行(x):execute  對文件而言,具有執行文件的權限;對目錄來說,具有進入目錄的權限,可以使用ls -l查看此目錄中文件列表   

“—”表示不具有該項權限

目錄 X:只給目錄x權限,不給文件x權限

權限管理相關的命令:

修改文件的屬主和屬組

修改文件的屬主:chown 

chown [OPTION]… [OWNER][:[GROUP]] FILE… 

    用法: 

      OWNER 

      OWNER:GROUP 

      :GROUP 

      [root@localhost zzz]# ll 
      total 0
      -rw-r--r-- 1 root  root  0 Aug  4 16:10 a
      -rw-r--r-- 1 user1 user1 0 Aug  4 16:13 abc
      命令中的冒號可用.替換;  
      -R: 遞歸 
      chown [OPTION]... --reference=RFILE FILE...
     
      [root@localhost zzz]# ll
      total 0
      -rw-r--r-- 1 root root 0 Aug  4 16:10 a
      -rw-r--r-- 1 zzz  zzz  0 Aug  4 16:13 abc
      [root@localhost zzz]# chown --reference=a abc
      [root@localhost zzz]# ll
      total 0
      -rw-r--r-- 1 root root 0 Aug  4 16:10 a
      -rw-r--r-- 1 root root 0 Aug  4 16:13 abc

 

修改文件的屬組:chgrp 

    chgrp [OPTION]… GROUP FILE… 

    chgrp [OPTION]… –reference=RFILE FILE… 

    [root@localhost zzz]# ll
    total 0
    -rw-r--r-- 1 root root 0 Aug  4 16:10 a
    -rw-r--r-- 1 root root 0 Aug  4 16:13 abc
    [root@localhost zzz]# chgrp zzz a
    [root@localhost zzz]# ll
    total 0
    -rw-r--r-- 1 root zzz  0 Aug  4 16:10 a
    -rw-r--r-- 1 root root 0 Aug  4 16:13 abc
    [root@localhost zzz]# chgrp --reference=a abc
    [root@localhost zzz]# ll
    total 0
    -rw-r--r-- 1 root zzz 0 Aug  4 16:10 a
    -rw-r--r-- 1 root zzz 0 Aug  4 16:13 abc

    -R 遞歸

文件權限操作命令:chmod

     chmod [OPTION]… OCTAL-MODE FILE… 

        -R: 遞歸修改權限 

     chmod [OPTION]… MODE[,MODE]… FILE… 

        MODE: 

        修改一類用戶的所有權限: 

        u=  g= o= 

        a=     (所有權限all) 

        ug=   

        u=,g= 

        [root@localhost zzz]# ll a
        -rw-r--r-- 1 root zzz 0 Aug  4 16:10 a
        [root@localhost zzz]# chmod u=rwx,g=rw,o=rw a
        [root@localhost zzz]# ll a
        -rwxrw-rw- 1 root zzz 0 Aug  4 16:10 a

        修改一類用戶某位或某些位權限 

         u+  u- g+ g- o+ o- a+ a- +

        [root@localhost zzz]# ll a
        -rwxrw-rw- 1 root zzz 0 Aug  4 16:10 a
        [root@localhost zzz]# chmod u-x,o-w a
        [root@localhost zzz]# ll a
        -rw-rw-r-- 1 root zzz 0 Aug  4 16:10 a

 

     chmod [OPTION]… –reference=RFILE FILE… 

     參考RFILE文件的權限,將FILE的修改為同RFILE;

        [root@localhost zzz]# ll
        total 0
        -rw-rw-r-- 1 root user1 0 Aug  4 16:10 a
        -rw-r--r-- 1 root zzz   0 Aug  4 16:13 abc
        [root@localhost zzz]# chmod --reference=a abc
        [root@localhost zzz]# ll
        total 0
        -rw-rw-r-- 1 root user1 0 Aug  4 16:10 a
        -rw-rw-r-- 1 root zzz   0 Aug  4 16:13 abc

新建文件和目錄的默認權限

umask值 可以用來保留在創建文件權限  

    新建FILE權限: 666-umask 

        如果所得結果某位存在執行(奇數)權限,則將其權限+1  

        新建DIR權限: 777-umask  

    非特權用戶umask是 002 

    root的umask 是 022 

    umask: 查看 

    [root@localhost zzz]# umask
    0022

    umask #: 設定 (設定支隊當前shell有效)

    [root@localhost zzz]# umask 026
    [root@localhost zzz]# umask
    0026

    umask –S 模式方式顯示 

    [root@localhost zzz]# umask -S
    u=rwx,g=rx,o=x

    umask –p 輸出可被調用  

    全局設置: /etc/bashrc 

    用戶設置:~/.bashrc

Linux文件系統上的特殊權限:

    SUID, SGID, Sticky

    SUID 4 

    SGID 2 

    Sticky 1 

安全上下文  

前提:進程有屬主和屬組;文件有屬主和屬組 

(1) 任何一個可執行程序文件能不能啟動為進程:取決發起者對程序文件是否擁有執行權限 

(2) 啟動為進程之后,其進程的屬主為發起者;進程的屬組為 發起者所屬的組 

(3) 進程訪問文件時的權限,取決于進程的發起者 

    (a) 進程的發起者,同文件的屬主:則應用文件屬主權限 

    (b) 進程的發起者,屬于文件屬組;則應用文件屬組權限 

    (c) 應用文件“其它”權限

來看看他們的作用:

SUID:當用戶執行具有x權限的二進制文件時擁有此文件所有者的權限

SGID:當用戶執行具有x權限的二進制文件時擁有此文件所在組的權限,另外也可以對目錄設置此權限

Sticky:當用戶對某個目錄具有w和x權限時,常用戶可以刪除該目錄中的任何文件,無論該文件的權限或擁有權。在該目錄設置Sticky位,目錄下建立的文件和目錄只有該用戶和root用戶才可以刪除

        

setuid與setgid:

先用ls -l命令看一下下面幾個文件或目錄的信息:

    [root@localhost ~]# ll -d /tmp /usr/bin/passwd
    drwxrwxrwt. 3 root root  4096 Aug  4 16:50 /tmp
    -rwsr-xr-x. 1 root root 30768 Nov 24  2015 /usr/bin/passwd

這里發現在文件或目錄的擁有者,所屬組,其他用戶的權限x的位置上被s或者t取代。

舉個例子說:

比如普通用戶用passwd命令去修改密碼,而密碼是存在/etc/shadow文件中,而普通用戶是無法修改這個文件的,也就無法把新密碼保存進來。

但事實的結果是普通用戶是可以修改密碼,并且保存到/etc/shadow這個文件中的。

[root@localhost ~]# ll /etc/shadow
---------- 1 root root 1205 Aug  4 16:11 /etc/shadow

它的流程是這樣的:

先看下/usr/bin/passwd這個文件,也就是命令passwd。

[root@localhost ~]# which passwd
/usr/bin/passwd
[root@localhost ~]# ll /usr/bin/passwd 
-rwsr-xr-x. 1 root root 30768 Nov 24  2015 /usr/bin/passwd

發現這個文件的擁有者是root,并且other的權限為r-x,也就說普通用戶對其具有r和x的權限

普通用戶對其具有執行權限,因此當普通用戶執行這條命令時,由于s這個權限的存在,那么在執行過程中會暫時獲取root的權限 

只有root才可以修改/etc/shadow文件,而在執行過程中使用了root用戶的權限密碼順利得寫入到這個文件中

可執行文件上SUID權限:

任何一個可執行程序文件能不能啟動為進程:取決發起者對 程序文件是否擁有執行權限  

啟動為進程之后,其進程的屬主為原程序文件的屬主 

SUID只對二進制可執行程序有效 

SUID設置在目錄上無意義  

    權限設定: 

        chmod u+s FILE… 

        chmod u-s FILE…

    [root@localhost ~]# ll
    total 68
    -rwxrwxrwx  1 root root     0 Jul 25 11:26 zzzzzzz
    [root@localhost ~]# chmod u+s zzzzzzz 
    [root@localhost ~]# ll
    total 68
    -rwsrwxrwx  1 root root     0 Jul 25 11:26 zzzzzzz

可執行文件上SGID權限:

任何一個可執行程序文件能不能啟動為進程:取決發起者對程序文件是否擁有執行權限  

啟動為進程之后,其進程的屬主為原程序文件的屬組 

    權限設定: 

        chmod g+s FILE… 

        chmod g-s FILE…

    [root@localhost ~]# ll
    total 68
    -rwsrwxrwx  1 root root     0 Jul 25 11:26 zzzzzzz
    [root@localhost ~]# chmod u-s,g+s zzzzzzz 
    [root@localhost ~]# ll
    total 68
    -rwxrwsrwx  1 root root     0 Jul 25 11:26 zzzzzzz

目錄上的SGID權限:

默認情況下,用戶創建文件時,其屬組為此用戶所屬的主組  

一旦某目錄被設定了SGID,則對此目錄有寫權限的用戶在此目錄中創建的文件所屬的組為此目錄的屬組 

通常用于創建一個協作目錄 

   

另外,還有可能出現大寫的情況rwSrwSrwT,出現這種情況是因為用戶不具備文件的x權限。

權限位映射:

SUID: user,占據屬主的執行權限位 

    s: 屬主擁有x權限 

    S:屬主沒有x權限 

SGID: group,占據屬組的執行權限位 

    s: group擁有x權限 

    S:group沒有x權限 

Sticky: other,占據other的執行權限位 

    t: other擁有x權限 

    T:other沒有x權限

設定文件特定屬性:

    chattr +i 不能刪除,改名,更改(包括root用戶)

    [root@localhost ~]# chattr +i zzzzzzz 
    [root@localhost ~]# rm -f zzzzzzz 
    rm: cannot remove `zzzzzzz': Operation not permitted

    chattr -i 解鎖

    [root@localhost ~]# chattr -i zzzzzzz 
    [root@localhost ~]# rm -f zzzzzzz 
    [root@localhost ~]# ll 
    total 68
    -rw-------. 1 root root  2429 Jul 25 09:47 anaconda-ks.cfg
    -rw-r--r--. 1 root root 45324 Jul 25 09:46 install.log
    -rw-r--r--. 1 root root  9963 Jul 25 09:44 install.log.syslog

    chattr +A 鎖定文件的讀時間  -A 解鎖

    chattr +a 可以查看、寫入數據,不能刪除

    [root@localhost ~]# chattr +a zz
    [root@localhost ~]# ll zz
    -rw-r----- 1 root root 0 Aug  4 21:48 zz
    [root@localhost ~]# echo very hard
    very hard
    [root@localhost ~]# echo very hard >> zz
    [root@localhost ~]# cat zz
    very hard
    [root@localhost ~]# rm -f zz
    rm: cannot remove `zz': Operation not permitted

    lsattr 顯示特定屬性

    [root@localhost ~]# lsattr zz
    -------------e- zz

原創文章,作者:zanghonglei,如若轉載,請注明出處:http://www.www58058.com/29193

(0)
zanghongleizanghonglei
上一篇 2016-08-05
下一篇 2016-08-05

相關推薦

  • Linux基礎目錄名稱及功用

    FHS目錄規則 Filesystem Hierarchy Standard(文件系統目錄標準)的縮寫,多數Linux版本采用這種文件組織形式,類似于Windows操作系統中c盤的文件目錄,FHS采用樹形結構組織文件。FHS定義了系統中每個區域的用途、所需要的最小構成的文件和目錄,同時還給出了例外處理與矛盾處理。   FHS定義了兩層規范,第一層是,…

    Linux干貨 2016-10-30
  • Linux高級文件系統管理之磁盤配額、軟RAID及LVM

    高級文件系統管理之磁盤配額、軟RAID及LVM   本章內容: 設定文件系統配額 設定和管理軟RAID設備 配置邏輯卷   一、文件系統配額:     執行軟限制(soft limit) 硬限制(hard limit)     注:磁盤配額只能針對分區控制有效,不能對整個磁盤控制…

    Linux干貨 2016-09-01
  • 第九周shell腳本編程練習

    1、寫一個腳本,判斷當前系統上所有用戶的shell是否為可登錄shell(即用戶的shell不是/sbin/nologin);分別這兩類用戶的個數;通過字符串比較來實現; 2、寫一個腳本 (1)?獲取當前主機的主機名,保存于hostname變量中; (2)?判斷此變量的值是否為localhost,如果是,則將當前主機名修改www.magedu.com; (3…

    2017-11-23
  • haproxy實現rabbitmq負載均衡

    RabbitMQ簡介: 1、是實現AMQP(高級消息隊列協議)的消息中間件的一種。2、主要是為了實現系統之間的雙向解耦而實現的。當生產者大量產生數據時,消費者無法快速消費,那么需要一個中間層。保存這個數據。 一般提到 RabbitMQ 和消息,都會用到以下一些專有名詞:(1)生產(Producing)意思就是發送。發送消息的程序就是一個生產者(produce…

    Linux干貨 2017-06-29
  • Linux程序包管理之RPM

    前言 Linux平臺上常見的軟件包格式主要有三種,分別是源碼格式包、通用二進制格式包和rpm格式包本文主要講解rpm格式包安裝及管理。RPM是Redhat Package Manager的縮寫,是由Redhat公司開發的Linux軟件包管理具,因其便捷的管理方式與開源思想,逐漸被其他Linux發行商所采用,現已成Linux平臺下通用的軟件包管理方式。 rpm…

    Linux干貨 2015-03-28
  • 第十二周作業

    1、請描述一次完整的http請求處理過程;     1)建立或處理連接:接收請求或拒絕請求;     2)接收請求:接收來自于網絡的請求報文中對某資源的一次請求的過程;接收請求的方式通常是并發訪問響應模型;     3)處理請求:對請求報文進行解析,并獲取請求的資源及請求方法等相關信息,解析后的報文…

    2017-03-27
欧美性久久久久