Linux 許可權管理

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

Linux下一切都被抽象成了file,哪些進程可以訪問哪些file,不可以訪問哪些file,就是許可權管理。 每個file都有許可權屬性,可以用 查看file的許可權屬性。 3對rwx分別代表,用戶,組,其他人的rwx。 file通過自己的許可權屬性來保護自己,讓符合自己許可權屬性的進程訪問,讓不符合自己許可權 ...


  • Linux下一切都被抽象成了file,哪些進程可以訪問哪些file,不可以訪問哪些file,就是許可權管理。

  • 每個file都有許可權屬性,可以用ls -l查看file的許可權屬性。

    3對rwx分別代表,用戶,組,其他人的rwx。

    $ ls -l
    drwxrwxr-x. 2 ys ys 28 Nov 29 17:47 a

    file通過自己的許可權屬性來保護自己,讓符合自己許可權屬性的進程訪問,讓不符合自己許可權屬性的進程不能夠訪問。

    許可權屬性是由許可權位構成的,許可權位(drwxrwxr-x等)說明表:

    文件類型位 用戶的讀許可權位 用戶的寫許可權位 用戶的可執行許可權位 主組的讀許可權位 主組的寫許可權位 主組的可執行許可權位 其他用戶的讀許可權位 其他用戶的寫許可權位 其他用戶的可執行許可權位 user group
    d r w x r w x r - x ys ys
    • 3組rwxrwxrwx叫mode,使用chmod修改mode。

    • user,group叫ownership,

    • 文件:

      • r:可以獲取file的元數據和數據內容
      • w:可以修改file的元數據和數據內容
      • x:可以運行此文件
    • 目錄:

      • r:可以用ls命令獲取目錄里的內容列表,但不能使用ls -l獲取目錄里的詳細內容列表。

      • w:可以在目錄里,創建,刪除文件。

      • x:可以cd到此目錄,如果也有讀許可權,則可以使用ls -l獲取目錄里的詳細內容列表。

        $ ll -d a
        drwxrwxr-x. 2 ys ys 28 Nov 29 17:47 a
        $ chmod u-x a
        $ ll -d a
        drw-rwxr-x. 2 ys ys 28 Nov 29 17:47 a
        $ cd a
        -bash: cd: a: Permission denied
        
        $ ls -l a
        ls: cannot access a/docker-ce.repo: Permission denied
        total 0
        -????????? ? ? ? ?            ? docker-ce.repo
        $ chmod u+x a
        $ ls -l a
        total 4
        -rw-rw-r--. 1 ys ys 2880 Nov 29 17:47 docker-ce.repo
  • Linux的許可權判斷邏輯:

    • 首先判斷啟動進程的用戶是否和file的user相同?
      • 相同:使用第一組rwx
      • 不相同:判斷啟動進程的用戶是否在file的group裡面?
        • 在group裡面:使用第二組rwx
        • 不在group裡面:使用第三組rwx

一,修改file的mode:chmod

file的mode信息,只能由file的屬主修改。

  • 用戶分類:

    • u:file是由誰創建的
    • g:file的創建者的主組
    • o:其他
    • a:以上3種的總和
  • 語法:

    • chmod [OPTION]... MODE[,MODE]... FILE...

      • 只能操作某類用戶的所有許可權位,不能操作某類用戶的單個許可權位。沒指定的許可權位就被清除。

        u=rw

        g=w

        o=x

        a=rwx

        # ll /tmp/t1
        ----------. 1 root root 0 Dec 17 21:57 /tmp/t1
        # chmod ugo=rwx /tmp/t1
        # ll /tmp/t1
        -rwxrwxrwx. 1 root root 0 Dec 17 21:57 /tmp/t1
        # chmod ugo=rw /tmp/t1
        # ll /tmp/t1
        -rw-rw-rw-. 1 root root 0 Dec 17 21:57 /tmp/t1
        
      • 即能操作一類用戶的單個許可權位,也能操作多個許可權位 。沒指定的許可權位,保持不變。

        u+,u-

        g+,g-

        o+,o-

        a+,a-

        # ll /tmp/t1
        -rwxr--r-x. 1 root root 0 Dec 17 21:57 /tmp/t1
        # chmod ug+rx /tmp/t1
        # ll /tmp/t1
        -rwxr-xr-x. 1 root root 0 Dec 17 21:57 /tmp/t1
        # chmod ugo-rwx /tmp/t1
        # ll /tmp/t1
        ----------. 1 root root 0 Dec 17 21:57 /tmp/t1
    • chmod [OPTION]... OCTAL-MODE FILE...

      一起操作3類用戶的所有許可權位

    • chmod [OPTION]... --reference=RFILE FILE...

      把某個文件的mode,設置成自己的mode

      # ll /tmp/t1
      -rwxr--r--. 1 root root 0 Dec 17 21:57 /tmp/t1
      # ll /etc/issue
      -rw-r--r--. 1 root root 23 Nov 23  2018 /etc/issue
      # chmod --reference=/etc/issue /tmp/t1
      # ll /tmp/t1
      -rw-r--r--. 1 root root 0 Dec 17 21:57 /tmp/t1
    • 修改目錄的mode隻影響目錄本身,那麼也想影響目錄裡面的所有文件和子目錄呢?

      使用-R選項。

      使用-R時,最好使用+,-的方式,因為此方式不會影響沒有指定的許可權位。

      # pwd
      /tmp/test
      # ll
      -rw-rw-r--. 1 ys   ys   0 Dec 15 21:24 1 A
      -rw-rw-r--. 1 ys   ys   0 Dec 15 21:23 1aA
      -rw-rw-r--. 1 ys   ys   0 Dec 15 21:23 1As
      drwxr-xr-x. 2 root root 6 Dec 17 22:07 ss
      # chmod -R g+wx /tmp/test/
      # ll
      -rw-rwxr--. 1 ys   ys   0 Dec 15 21:24 1 A
      -rw-rwxr--. 1 ys   ys   0 Dec 15 21:23 1aA
      -rw-rwxr--. 1 ys   ys   0 Dec 15 21:23 1As
      drwxrwxr-x. 2 root root 6 Dec 17 22:07 ss

二,修改file的ownership:chown chgrp

這2個命令只有,有管理員許可權的用戶才可以使用

chown:即可以修改file的user,也可以修改file的group

chgrp:只能修改file的group。

  • 語法:即可以修改file的user,也可以修改file的group

    chown [OPTION]... [OWNER][:[GROUP]] FILE...裡面的冒號換成點也可以。

    # ll -d /tmp/test
    drwxrwxr-x. 3 ys ys 49 Dec 17 22:07 /tmp/test
    # pwd
    /tmp/test
    # ll
    -rw-rwxr--. 1 ys   ys   0 Dec 15 21:24 1 A
    -rw-rwxr--. 1 ys   ys   0 Dec 15 21:23 1aA
    -rw-rwxr--. 1 ys   ys   0 Dec 15 21:23 1As
    drwxrwxr-x. 2 root root 6 Dec 17 22:07 ss
    # chown -R :zg1 /tmp/test
    # ll -d /tmp/test/
    drwxrwxr-x. 3 ys zg1 49 Dec 17 22:07 /tmp/test/
    # ll
    -rw-rwxr--. 1 ys   zg1 0 Dec 15 21:24 1 A
    -rw-rwxr--. 1 ys   zg1 0 Dec 15 21:23 1aA
    -rw-rwxr--. 1 ys   zg1 0 Dec 15 21:23 1As
    drwxrwxr-x. 2 root zg1 6 Dec 17 22:07 ss

    chown [OPTION]... --reference=RFILE FILE...:用法同chmod

  • 修改目錄的ownership隻影響目錄本身,那麼也想影響目錄裡面的所有文件和子目錄呢?

    使用-R選項。

三,大型思考

用戶za1對目錄/tmp/fld/有寫許可權,但對文件/tmp/fld/t1沒有寫許可權。

問題1:用戶za1可以修改/tmp/fld/t1文件的內容嗎

問題1答案:不可以

問題2:用戶za1可以刪除/tmp/fld/t1嗎

問題2答案:可以

驗證:

# ll -d /tmp/fld/
drwxrwxr-x. 2 root zg1 16 Dec 17 22:34 /tmp/fld/
# ll /tmp/fld
-rw-r--r--. 1 root zg1 0 Dec 17 22:34 t1
# su - za1
Last login: Tue Dec 17 21:07:01 CST 2019 on pts/1
$ id za1
uid=1001(za1) gid=1001(za1) groups=1001(za1),1000(ys),1002(zg1)
$ pwd
/tmp/fld
$ ll
-rw-r--r--. 1 root zg1 0 Dec 17 22:34 t1
$ echo 111 >> ./t1
./t1: Permission denied.
$ rm -f t1
$ ll
total 0

四,創建文件或者目錄後,文件和目錄的mode是如何計算出來的。

由umask決定。假如umask是0022(----w--w-),則:

生成文件的mode:rw-rw-rw(666) - umask(----w--w-) = rw-r--r--

生成目錄的mode:rwxrwxrwx(777) - umask(----w--w-) = rwxr-xr-x

  • umask獲取當前的umask值
  • umask mode設置umask,但只在當前shell中有效

參考:Linux umask詳解:令新建文件和目錄擁有預設許可權

五,拷貝文件時,能否同時指定目標文件的mode和ownership?創建目錄的同時,能否同時指定目錄的mode和ownership?

cp命令是做不到的,install命令可以做到,但是install不能拷貝目錄。

mkdir命令是做不到的,install命令可以做到。

install後,目標文件或者目錄的mode的預設值都是755

  • 指定目標的mode:-m mode
  • 指定目標的user:-o username
  • 指定目標的group:-g groupname

  • 拷貝單個文件,到文件

    # ll /etc/inittab
    -rw-r--r--. 1 root root 511 Oct 31  2018 /etc/inittab
    # install /etc/inittab f1
    # ll f1
    -rwxr-xr-x. 1 root root 511 Dec 18 14:37 f1
    # install -m 640 -o za1 -g zg1 /etc/inittab f1
    # ll f1
    -rw-r-----. 1 za1 zg1 511 Dec 18 14:38 f1
  • 拷貝多個文件,到目錄

    # mkdir d1
    # ll d1
    total 0
    # install -m 754 -o gentoo -g zg1 /etc/inittab /etc/issue d1/
    # ll d1
    -rwxr-xr--. 1 gentoo zg1 511 Dec 18 14:43 inittab
    -rwxr-xr--. 1 gentoo zg1  23 Dec 18 14:43 issue
  • 創建目錄

    # install -m 711 -o za1 -g zg1 -d d3
    # ll -d d3
    drwx--x--x. 2 za1 zg1 6 Dec 18 14:27 d3

六,創建文件名或者目錄名是,隨機的臨時文件,而且名稱不重覆:mktemp

  • 語法:mktemp [OPTION]... tmp.XXXXXXXXXX

  • 創建名稱是隨機的文件:不使用任何選項

    # mktemp file.XXX
    file.fPA
    # mktemp file.XXX
    file.8Ir
  • 創建名稱是隨機的目錄:使用選項-d

    # mktemp -d dir.XXXX
    dir.Cq5N
    # mktemp -d dir.XXXX
    dir.O9Bm
    # ll -d dir.Cq5N/
    drwx------. 2 root root 6 Dec 18 15:06 dir.Cq5N/
    # ll -d dir.O9Bm/
    drwx------. 2 root root 6 Dec 18 15:06 dir.O9Bm/
  • 只產生隨機的名稱,而不創建文件或者目錄:使用選項-u

    # mktemp -u 111.XXX
    111.hrM
    # ll 111.hrM
    ls: cannot access 111.hrM: No such file or directory
    # mktemp -ud 111.XXX
    111.evP
    # ll 111.evP
    ls: cannot access 111.evP: No such file or directory
  • 把創建的文件或目錄放在/tmp目錄:使用選項-t

    # pwd
    /root
    # mktemp -t 222.XXX.XXX
    /tmp/222.XXX.rcm
    # mktemp -t 222.XXX.XXX
    /tmp/222.XXX.mA1
  • 用變數保存生成的名稱。

    # echo $myfile
    
    # myfile=$(mktemp -t abc.XXX)
    # echo $myfile
    /tmp/abc.YEx
    ll /tmp/abc.YEx
    -rw-------. 1 root root 0 Dec 18 15:14 /tmp/abc.YEx
  • 使用mktemp生成的,文件的mode是600;目錄的mode是700

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

本人微信:xiaoshitou5854


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

-Advertisement-
Play Games
更多相關文章
  • 三極體共有3種工作狀態:截止狀態、放大狀態和飽和狀態。用於不同目的三極體其工作狀態是不同的。 三極體3種工作狀態電流特征 表1-7所示是三極體3種工作狀態定義和電流特征。 表1-7 三極體3種工作狀態定義和電流特征 三極體截止工作狀態 用來放大信號的三極體不應工作在截止狀態。倘若輸入信號部分地進入了 ...
  • 第一章 監控知識基本概述 1.為什麼要使用監控 1.對系統不間斷實時監控 2.實時反饋系統當前狀態 3.保證服務可靠性安全性 4.保證業務持續穩定運行 2.如何進行監控,比如我們需要監控磁碟的使用率 1.如何查看磁碟使用率 df h 2.監控磁碟的那些指標 block、 inode 3.如何獲取具體 ...
  • 串口持續地接收不定長、不定時的數據,把每一幀數據緩存下來且靈活地利用記憶體空間,下麵提供一種方式供參考。原理是利用串口空閑中斷和DMA,每當對方發來一幀完整的數據後,串口接收開始空閑,觸發中斷,在中斷處理中新建一個接收隊列節點,把DMA緩存的數據copy到接收隊列里。當需要的時候就從接收隊列里提出數據 ...
  • VirtualBox設置埠轉發 Xshell 新建會話 連接成功 ...
  • 1.官網中文安裝參考手冊 https://docs.docker-cn.com/engine/installation/linux/docker-ce/centos/#prerequisites 2、yum安裝gcc相關 1)CentOS7能上外網 2)安裝gcc [root@localhost ~ ...
  • 一般地,如果該參數是100%表示設備已經接近滿負荷運行了(當然如果是多磁碟,即使%util是100%,因為磁碟的併發能力,所以磁碟使用未必就到了瓶頸)。 ...
  • -n 參數,他有6個不同的開關:DEV | EDEV | NFS | NFSD | SOCK | ALL 。DEV顯示網路介面信息,EDEV顯示關於網路錯誤的統計數據,NFS統計活動的NFS客戶端的信息,NFSD統計NFS伺服器的信息,SOCK顯示套 接字信息,ALL顯示所有5個開關。它們可以單獨或... ...
  • VMware Workstation 14打開虛擬機黑屏解決方法 聽語音 瀏覽:0 | 更新:2017-11-21 16:56 | 標簽:操作系統 虛擬機 VMWARE 1 2 3 4 分步閱讀 最近VMware Workstation 14版本,很多人使用之後發現虛擬機裡面的系統打開之後黑屏,通過 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...