Linux 特殊許可權

来源:https://www.cnblogs.com/xiaoshiwang/archive/2019/12/24/12093991.html
-Advertisement-
Play Games

"普通許可權管理詳細說明" 一,特殊許可權:SUID,SGID,STICKY 1,SUID 預設情況下,用戶發起的進程的屬主是其發起者,因此,進程以發起者的身份去訪問別的資源。 SUID的作用:用戶執行某個程式文件時,如果此程式文件擁有SUID許可權,則此進程的屬主不是其發起者,而是這個程式文件的屬主。 ...


普通許可權管理詳細說明

一,特殊許可權:SUID,SGID,STICKY

1,SUID

  • 預設情況下,用戶發起的進程的屬主是其發起者,因此,進程以發起者的身份去訪問別的資源。

    SUID的作用:用戶執行某個程式文件時,如果此程式文件擁有SUID許可權,則此進程的屬主不是其發起者,而是這個程式文件的屬主。

    SUID許可權的風險很大!

  • 管理文件的SUID許可權:chmod u+|-s FILE...

    展示位置:屬主的執行許可權位。

    • 原來屬主有執行許可權:顯示為小寫的s。
    • 原來屬主沒有執行許可權:顯示為大寫的S。

    例子:非root用戶是無法使用/bin/cat命令查看/etc/shadow文件的內容的。

    拷貝/bin/cat到/home/ys/bin下,給/home/ys/bin/cat加上SUID後,就可以使用/home/ys/bin/cat命令,查看/etc/shadow文件的內容了。

    # ll /etc/shadow
    ----------. 1 root root 1674 Dec 24 17:19 /etc/shadow
    # su - ys
    $ cat /etc/shadow
    cat: /etc/shadow: Permission denied
    # ll /bin/cat
    -rwxr-xr-x. 1 root root 54160 Oct 31  2018 /bin/cat
    # cp /bin/cat /home/ys/bin/
    # ll /home/ys/bin/
    -rwxr-xr-x. 1 root root 54160 Dec 24 18:17 cat
    # su - ys
    $ /home/ys/bin/cat /etc/shadow
    /home/ys/bin/cat: /etc/shadow: Permission denied
    $ sudo chmod u+s /home/ys/bin/cat
    $ ll /home/ys/bin/cat
    -rwsr-xr-x. 1 root root 54160 Dec 24 18:17 /home/ys/bin/cat
    $ /home/ys/bin/cat /etc/shadow > /dev/null
    $ echo $?
    0
  • 由於沒有個用戶都可以修改自己的密碼,所以程式/bin/passwd就必須有SUID許可權。因為修改密碼要修改/etc/passwd文件,這個文件只有root用戶才有寫許可權。所以普通用戶運行/bin/passwd,就必須用root的身份運行,才能夠修改/etc/passwd文件。

    $ ll /bin/passwd
    -rwsr-xr-x. 1 root root 27832 Jun 10  2014 /bin/passwd
    $ ll /etc/passwd
    -rw-r--r--. 1 root root 2643 Dec 23 21:38 /etc/passwd

2, SGID

  • 用戶fedora和gentoo都在組mageedu里。目錄/tmp/test的屬組是mageedu。

    讓fedora用戶在目錄/tmp/test下創建文件a.fedora,a.fedora文件的屬組是用戶fedora的基本組,也就是fedora。

    讓gentoo用戶在目錄/tmp/test下創建文件a.gentoo,a.gentoo文件的屬組是用戶gentoo的基本組,也就是gentoo。

    有個需求,希望同一組的用戶,在某個目錄下創建的文件,組裡的成員都有許可權修改。上面的2個用戶雖然都在組mageedu里,但是創建文件時,預設的屬組是用戶的基本組,有沒有一個辦法,讓創建文件的屬組自動是此目錄的屬組呢?SGID就登場了!

  • SGID用途:設置在目錄的屬組上。效果是,在此目錄下創建的文件的屬組,是此目錄的屬組,而不是用戶的基本組了

    # ll -d /tmp/test
    drwxrwxr-x. 2 ys mageedu 6 Dec 24 19:16 /tmp/test
    # id fedora
    uid=1005(fedora) gid=1005(fedora) groups=1005(fedora),5000(mageedu)
    # id gentoo
    uid=1004(gentoo) gid=1004(gentoo) groups=1004(gentoo),1001(za1),5000(mageedu)
    # su - fedora
    Last login: Thu Dec 19 21:35:48 CST 2019 on pts/2
    $ cd /tmp/test
    $ touch a.fedora
    $ ll
    -rw-rw-r--. 1 fedora fedora 0 Dec 24 19:24 a.fedora
    # su - gentoo
    Last login: Tue Dec 24 17:19:49 CST 2019 on pts/2
    $ cd /tmp/test
    $ touch a.gentoo
    $ ll
    -rw-rw-r--. 1 fedora fedora 0 Dec 24 19:24 a.fedora
    -rw-rw-r--. 1 gentoo gentoo 0 Dec 24 19:33 a.gentoo
    # chmod g+s /tmp/test
    # ll -d /tmp/test
    drwxrwsr-x. 2 ys mageedu 38 Dec 24 19:33 /tmp/test
    # su - fedora
    Last login: Tue Dec 24 19:23:49 CST 2019 on pts/1
    $ cd /tmp/test
    $ touch b.fedora
    $ ll
    -rw-rw-r--. 1 fedora fedora  0 Dec 24 19:24 a.fedora
    -rw-rw-r--. 1 gentoo gentoo  0 Dec 24 19:33 a.gentoo
    -rw-rw-r--. 1 fedora mageedu 0 Dec 24 19:35 b.fedora
    # su - gentoo
    Last login: Tue Dec 24 19:33:15 CST 2019 on pts/1
    $ cd /tmp/test
    $ touch b.gentoo
    $ ll
    -rw-rw-r--. 1 fedora fedora  0 Dec 24 19:24 a.fedora
    -rw-rw-r--. 1 gentoo gentoo  0 Dec 24 19:33 a.gentoo
    -rw-rw-r--. 1 fedora mageedu 0 Dec 24 19:35 b.fedora
    -rw-rw-r--. 1 gentoo mageedu 0 Dec 24 19:35 b.gentoo
    # su - ys
    Last login: Tue Dec 24 19:14:42 CST 2019 from 10.247.236.90 on pts/1
    $ cd /tmp/test
    $ touch a.ys
    $ ll
    -rw-rw-r--. 1 fedora fedora  0 Dec 24 19:24 a.fedora
    -rw-rw-r--. 1 gentoo gentoo  0 Dec 24 19:33 a.gentoo
    -rw-rw-r--. 1 ys     mageedu 0 Dec 24 19:38 a.ys
    -rw-rw-r--. 1 fedora mageedu 0 Dec 24 19:35 b.fedora
    -rw-rw-r--. 1 gentoo mageedu 0 Dec 24 19:35 b.gentoo
    [ys@localhost test]$ id ys
    uid=1000(ys) gid=1000(ys) groups=1000(ys),10(wheel)
  • 管理文件的GUID許可權:chmod g+|-s FILE...

    展示位置:屬組的執行許可權位。

    • 原來屬主有執行許可權:顯示為小寫的s。
    • 原來屬主沒有執行許可權:顯示為大寫的S。

3,Sticky

  • 如果某個用戶擁有對某個目錄的寫許可權,則他可以刪除這個目錄里的任何文件,也就是可以刪除此目錄里別的用戶創建的文件。

    有個需求,不希望自己創建的文件被別的用戶刪除掉。Sticky登場了!

  • Sticky用途:設置在目錄的other上。效果是,在此目錄下文件,只有是自己創建的才可以刪除。

    $ ls -ld /tmp/test
    drwxrwsr-x. 2 ys mageedu 70 Dec 24 19:59 /tmp/test
    $ pwd
    /tmp/test
    $ ll
    -rw-rw-r--. 1 fedora fedora  0 Dec 24 19:24 a.fedora
    -rw-rw-r--. 1 ys     mageedu 4 Dec 24 19:50 a.ys
    -rw-rw-r--. 1 fedora mageedu 4 Dec 24 19:51 b.fedora
    -rw-rw-r--. 1 gentoo mageedu 4 Dec 24 19:50 b.gentoo
    -rw-rw-r--. 1 fedora mageedu 0 Dec 24 19:51 c.fedora
    -rw-rw-r--. 1 gentoo mageedu 0 Dec 24 19:51 c.gentoo
    [fedora@localhost test]$ whoami
    fedora
    [fedora@localhost test]$ rm a.ys
    [fedora@localhost test]$ rm b.gentoo
    [fedora@localhost test]$ ll
    -rw-rw-r--. 1 fedora fedora  0 Dec 24 19:24 a.fedora
    -rw-rw-r--. 1 fedora mageedu 4 Dec 24 19:51 b.fedora
    -rw-rw-r--. 1 fedora mageedu 0 Dec 24 19:51 c.fedora
    -rw-rw-r--. 1 gentoo mageedu 0 Dec 24 19:51 c.gentoo
    用戶fedora可以刪除別的用戶創建的文件。
    修改此目錄的Sticky
    # chmod o+t /tmp/test
    # ll -d /tmp/test
    drwxrwsr-t. 2 ys mageedu 70 Dec 24 19:59 /tmp/test
    # su - gentoo
    Last login: Tue Dec 24 19:50:46 CST 2019 on pts/1
    $ cd /tmp/test
    $ ll
    -rw-rw-r--. 1 fedora fedora  0 Dec 24 19:24 a.fedora
    -rw-rw-r--. 1 fedora mageedu 4 Dec 24 19:51 b.fedora
    -rw-rw-r--. 1 fedora mageedu 0 Dec 24 19:51 c.fedora
    -rw-rw-r--. 1 gentoo mageedu 0 Dec 24 19:51 c.gentoo
    $ rm a.fedora
    rm: remove write-protected regular empty file ‘a.fedora’? y
    rm: cannot remove ‘a.fedora’: Operation not permitted
    $ rm c.gentoo
    $ ll
    -rw-rw-r--. 1 fedora fedora  0 Dec 24 19:24 a.fedora
    -rw-rw-r--. 1 fedora mageedu 4 Dec 24 19:51 b.fedora
    -rw-rw-r--. 1 fedora mageedu 0 Dec 24 19:51 c.fedora
    修改sticky後,就不能刪除別的用戶創建的文件了,只可以刪除自己創建的文件。
  • 系統上/tmp和/var/tmp目錄,預設都有sticky許可權。

  • 管理文件的GUID許可權:chmod o+|-t FILE...

    展示位置:other的執行許可權位。

    • 原來屬主有執行許可權:顯示為小寫的t。
    • 原來屬主沒有執行許可權:顯示為大寫的T。

四,管理特殊許可權的另一種方法:

suid sgid sticy 八進位許可權
0 0 0 0
0 0 1 1
0 1 0 2
0 1 1 3
1 0 0 4
1 0 1 5
1 1 0 6
1 1 1 7

又組成了一組,類似rwx的許可權位。

所以,可在預設的3位八進位數字的左側再加一位八進位數字,來表示各種組合。

chmod 1777 FILE...

chmod 4777 FILE...

...

二,文件訪問許可權列表(file access control list)

文件除了有user,group,other的許可權控制外,還有一個更靈活的許可權控制機制。

可以針對某個文件,讓特定的某些用戶,或組訪問。

這個功能就叫facl

1,查看文件的額外訪問許可權:getfacl files

下麵的/tmp/test/a.fedora沒有額外的許可權控制,所以別的用戶無法修改此文件。

$ ll a.fedora
-rw-rw-r--. 1 fedora fedora  0 Dec 24 19:24 a.fedora
$ getfacl /tmp/test/a.fedora
getfacl: Removing leading '/' from absolute path names
# file: tmp/test/a.fedora
# owner: fedora
# group: fedora
user::rw-
group::rw-
other::r--

2,給文件添加額外的許可權控制:setfacl -m user/group:user/group:xxx files

給/tmp/test/a.fedora添加額外的許可權控制。賦予用戶ys可以修改此文件的許可權。

賦予許可權後再other的可執行許可權位的後面多了個加號。

$ whoami
fedora
$ setfacl -m user:ys:rw a.fedora
$ getfacl a.fedora
# file: a.fedora
# owner: fedora
# group: fedora
user::rw-
user:ys:rw-
group::rw-
mask::rw-
other::r--

$ ll
-rw-rw-r--+ 1 fedora fedora  0 Dec 24 19:24 a.fedora
$ whoami
ys
$ echo 111 >> a.fedora
$ cat a.fedora
111

給/tmp/test/a.fedora添加額外的許可權控制。賦予組mageedu可以修改此文件的許可權。

$ whoami
fedora
$ setfacl -m group:mageedu:rw a.fedora
$ getfacl a.fedora
# file: a.fedora
# owner: fedora
# group: fedora
user::rw-
user:ys:rw-
group::rw-
group:mageedu:rw-
mask::rw-
other::r--
$ id gentoo
uid=1004(gentoo) gid=1004(gentoo) groups=1004(gentoo),1001(za1),5000(mageedu)
$ whoami
gentoo
$ cd /tmp/test
$ ll
-rw-rw-r--+ 1 fedora fedora  4 Dec 24 22:10 a.fedora
$ echo 44444 >> a.fedora
$ cat a.fedora
111
44444

3,刪除文件的額外許可權控制:setfacl -x user/group files

$ getfacl a.fedora
# file: a.fedora
# owner: fedora
# group: fedora
user::rw-
user:ys:rw-
group::rw-
group:mageedu:rw-
mask::rw-
other::r--
$ setfacl -x user:ys a.fedora
$ getfacl a.fedora
# file: a.fedora
# owner: fedora
# group: fedora
user::rw-
group::rw-
group:mageedu:rw-
mask::rw-
other::r--
$ setfacl -x group:mageedu a.fedora
$ getfacl a.fedora
# file: a.fedora
# owner: fedora
# group: fedora
user::rw-
group::rw-
mask::rw-
other::r--

4,Linux的許可權判斷邏輯:

  • 首先判斷啟動進程的用戶是否和file的user相同?

    • 相同:使用第一組rwx
    • 不相同:判斷啟動進程的用戶是否在file的額外可訪問用戶的列表裡面?
      • 在額外可訪問用戶的列表裡面:使用額外可訪問用戶的rwx
      • 不在額外可訪問用戶的列表裡面:判斷啟動進程的用戶是否在file的group裡面?
        • 在group裡面:使用第二組rwx
        • 不在group裡面:判斷啟動進程的用戶是否在file的額外可訪問組的列表裡面?
          • 在額外可訪問組裡面:使用額外可訪問組的rwx
          • 不在額外可訪問組裡面:使用第三組rwx
  • 如果某個文件的other許可權是可寫的,但是額外許可權是不可寫的,則也是不可寫的。

  • 驗證:

    $ ll
    -rw-rw-rw-. 1 fedora mageedu  4 Dec 24 19:51 b.fedora
    $ su - ys
    Last login: Tue Dec 24 22:10:28 CST 2019 on pts/2
    $ cd /tmp/test
    $ echo "im ys" > b.fedora
    $ cat b.fedora
    im ys
    $ setfacl -m user:ys:--- b.fedora
    $ getfacl b.fedora
    # file: b.fedora
    # owner: fedora
    # group: mageedu
    user::rw-
    user:ys:---
    group::rw-
    mask::rw-
    other::rw-
    $ ll
    -rw-rw-rw-+ 1 fedora mageedu  6 Dec 24 22:37 b.fedora
    $ su - ys
    Last login: Tue Dec 24 22:36:43 CST 2019 on pts/2
    $ cd /tmp/test
    $ echo 3232 >> b.fedora
    -bash: b.fedora: Permission denied

c/c++ 學習互助QQ群:877684253

本人微信:xiaoshitou5854


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 上一篇文章https://www.cnblogs.com/mbpframework/p/12073102.html,介紹了一下Mbp的框架.其實這個框架寫出來主要是為了學習,當然也可以經過優化運用到實際的項目中.今天我們來說說怎麼使用這個框架. 首先我們用分層的方式來規划下我們的項目代碼結構. Me ...
  • 本筆記摘抄自:https://www.cnblogs.com/leslies2/archive/2012/03/22/2389318.html,記錄一下學習過程以備後續查用。 一、Lambda 的意義 在Framework 2.0 以前,聲明委托的唯一方法是通過方法命名,從Framework 2.0 ...
  • using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO.Compression; using... ...
  • 有些時候電腦上會有一些文件刪除不了,例如:刪除的時候,提示文件不存在,或者請求的安全信息不可用或無法顯示。 無法刪除文件夾的原因: 1.當文件夾中存在正在被占用的文件時,刪除當然會失敗。其中包括有一些病毒程式在運行時,刪除文件夾的操作也會失敗。2.如果採用NTFS文件系統,當前用戶不具備目標文件的完 ...
  • 該問題出現在WPF中的VM類中,ObservableCollection類型,該類型的 CollectionView 不支持從調度程式線程以外的線程對其 SourceCollection 進行的更改,解決辦法: ThreadPool.QueueUserWorkItem(delegate { Sync ...
  • 當DataGrid屬於單元格選中時出現紅框,是因為WPF中DataGrid擁有預設的驗證屬性,如需關閉,請在DataGrid中加入以下屬性: Validation.ErrorTemplate="{x:Null}" ...
  • 目錄 目錄 Linux伺服器部署.Net Core筆記:一、開啟ssh服務 Linux伺服器部署.Net Core筆記:二、安裝FTP Linux伺服器部署.Net Core筆記:三、安裝.NetCore運行環境 Linux伺服器部署.Net Core筆記:四、安裝Supervisor進程守護 Li ...
  • 一個採圖工具,所以界面做的很簡單。 private SapAcquisition m_Acquisition; private SapBuffer m_Buffers; private SapAcqToBuf m_Xfer; private SapView m_View; private SapCo ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...