Linux 入門記錄:十三、Linux 擴展許可權

来源:http://www.cnblogs.com/mingc/archive/2017/09/26/7598070.html
-Advertisement-
Play Games

一、預設許可權 每一個終端都有一個 umask 屬性,是用來確定新建文件或目錄的預設許可權的許可權“掩碼”(mask 有“掩碼”的含義,至於 u,後面說)。 Linux 中一般有預設的許可權掩碼,使用命令 umask 用以查看或設置: 一般地,普通用戶(uid 為 500 以上)的許可權掩碼預設為 0002, ...


一、預設許可權

每一個終端都有一個 umask 屬性,是用來確定新建文件或目錄的預設許可權的許可權“掩碼”(mask 有“掩碼”的含義,至於 u,後面說)。

Linux 中一般有預設的許可權掩碼,使用命令 umask 用以查看或設置:

umask 0022         帶許可權值是設置,否則是查看

一般地,普通用戶(uid 為 500 以上)的許可權掩碼預設為 0002,root 用戶(uid 為 0)的許可權掩碼預設為 0022。

如果新建了一個文件或目錄,那麼這個文件或目錄的預設許可權等於 文件或目錄的預設最高許可權 & (~ umask) 。

那麼,“文件或目錄的預設最高許可權”是多少呢?一般來說,目錄的預設最高許可權是 0777,文件的預設最高許可權為 0666(去掉了 x 許可權,禁止執行,安全考慮)。註意:Linux 的許可權值是八進位的!所以,網上的某些所謂十進位減法運算來計算新建文件或目錄預設許可權的邏輯是錯誤的。還有什麼分情況討論的,在我看來實在麻煩。用電腦思維來理解電腦,這是我認為最合理、最準確且最簡單的思維方式。

 

怎麼記憶和理解這個運算邏輯?

umask ,我把它的中文全稱記為用於“位取反的許可權掩碼”。“位取反” 來自 "u",“掩碼” 來自 "mask" 。拿這個位取反的許可權掩碼(~ umask)跟預設最高許可權相與 "&",就得到了新建文件(或目錄)的預設許可權。

怎麼理解?

這裡主要是“掩碼”:掩碼是用來和目標數進行邏輯與 "&" 運算,取得目標數里跟掩碼的位均為 1 的位組合,並將跟掩碼中位為 0 的對應位全部丟棄。掩碼的原理是邏輯與的原理,任何數和 1 相與都是它本身,任何數和 0 相與都是 0。而一個數跟掩碼的反碼(位取反)進行邏輯與,得到結果恰恰相反,結果是保留這個數里跟掩碼里位為 0 相對應的位,丟棄跟掩碼里位為1 相對應的位。

這裡的 umask 就是這個作用,用預設最高許可權跟取反的 umask 相與,就從預設最高許可權里丟棄了 umask 不允許的許可權。所以並不是簡單的十進位減法運算,例如 umask 值為 0022 和 0033 的時候,普通用戶新建文件的預設許可權都是 0644(因為 0666 & (~ 0022) 和 0666 & (~ 0033) 的運算結果是一樣的),用 rwx 符號表示就是 -rw-r--r-- 。

 

二、特殊許可權

除了普通許可權外,還有三個特殊許可權:

許可權 對文件的影響 對目錄的影響
suid

以文件的所屬用戶身份執行,

而非執行文件的用戶

sgid

以文件所屬組身份執行

在該目錄中創建的任意新文件的

所屬組與該目錄的所屬組相同,

即子文件自動繼承該目錄的所屬組

sticky

對目錄擁有寫入許可權的用戶僅可以

刪除其擁有的文件,無法刪除其他

用戶所擁有的文件

 

擁有suid許可權的passwd命令

Linux 中普通用戶的密碼口令都保存在 /etc/shadow 文件里,這個文件的許可權是只有root用戶和root組才可以訪問的。那麼普通用戶使怎麼修改自己密碼的呢?Linux 提供了 passwd 命令普通用戶使用來實現自己的密碼:

我們看到,這個 passwd 的 U 許可權里有個 "s" 占用了原來的 "x"位,這表示執行該命令的用戶擁有 "suid" 許可權,以 root 用戶身份來運行,所以普通用戶可以通過執行 passwd 命令的來修改自己的密碼,並將它寫到 /etc/shadow 文件里。

 

三、設置特殊許可權

設置 suid:

chmod u+s filename

設置 sgid:

chmod g+s filename

設置 sticky:

chmod o+t filename

其中,設置 sgid 許可權會使 "s" 占用 G 許可權的 "x" 位,例如:"-rwxr-s---";設置 sticky 許可權會使 "t" 占用 O 許可權的 "x" 位,例如:"drwxr-xr-t"。這裡我所說的 G 許可權、O 許可權是基於 UGO 模型的 Linux 許可權。

一般來說,我們使用 sgid 來設置目錄的許可權,它允許了目錄的子文件(或目錄)自動繼承該目錄的所屬組,常見的情況例如市場部目錄的員工目錄自動屬於市場部用戶組。經常使用 sticky 來設置目錄下的用戶可以刪除自己的文件,但不能刪除別人的文件,例如營銷部目錄的員工文件可以被員工刪除,但不能刪除同事的文件。

 

與普通許可權一樣,特殊許可權也可以用八進位數值表示:

suid   = 4 (2 ^ 2)
sgid   = 2 (2 ^ 1)
sticky = 2 (2 ^ 0)

所以,我們也可以通過以下命令設置:

chmod 4755 filename   普通許可權755,所屬用戶可讀可寫可執行,所屬組和其他用戶不可寫,特殊許可權允許以所屬用戶身份執行

 


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

-Advertisement-
Play Games
更多相關文章
  • 本文為mariadb官方手冊:DATABASE的譯文。 原文:https://mariadb.com/kb/en/library/database/我提交到MariaDB官方手冊的譯文:https://mariadb.com/kb/zh-cn/database/ 語法 描述 以utf8 charac ...
  • 本文為mariadb官方手冊:Identifier Names的譯文。 原文:https://mariadb.com/kb/en/library/identifier-names/我提交到MariaDB官方手冊的譯文:https://mariadb.com/kb/zh-cn/library/iden ...
  • sql事務對錶的鎖及With(NoLock),With(ReadPast)對錶的查詢結果對比 ...
  • Sentinel(哨兵)是Redis 的高可用性解決方案:由一個或多個Sentinel 實例 組成的Sentinel 系統可以監視任意多個主伺服器,以及這些主伺服器屬下的所有從伺服器,併在被監視的主伺服器進入下線狀態時,自動將下線主伺服器屬下的某個從伺服器升級為新的主伺服器。 ...
  • 一、Linux概述 Linux是一款全球性的免費的開源的操作系統平臺,其特點是實現了多任務多用戶處理,主要是依賴內核kernel shell,且占用資源少 (最小配置只要4Mb記憶體就能運行)。 百度百科概述 Linux是一套免費使用和自由傳播的類Unix操作系統,是一個基於POSIX和UNIX的多用 ...
  • 原文發表於cu:2017-03-27 參考文檔: 本文涉及keepalived的安裝,簡單配置,為haproxy做高可用。 一.環境準備 1. 操作系統 CentOS-7-x86_64-Everything-1511 2. Keepalived版本 截至2017-03-22,keepalived版本 ...
  • 嵌入式系統在我們的日常生活中已經隨處可見,已經貫穿在我們生活的方方面面,今天筆者就來淺談一下對嵌入式的認識。 一、什麼是嵌入式系統 在清華大學出版社出版的《嵌入式系統原理與設計》當中,對嵌入式系統是這樣進行定義的:嵌入式系統是以應用為中心,以電腦技術為基礎,採用可裁剪軟硬體,適用於對功能、可靠性、 ...
  • 網路配置 網路參數設置: 1)命令行設置,可以立即生效,但是電腦重啟後所有的設置會失效; 2)修改系統配置文件,不會馬上生效,但是可以永久保存設置; 命令行設置網路參數1》網路介面參數 ifconfig命令 ifconfig eth0 192.168.10.10 netmask 255.255.2 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...