1. 程式人生 > >使用 ACL 設定使用者訪問指定檔案/目錄的許可權 | Linux 中國

使用 ACL 設定使用者訪問指定檔案/目錄的許可權 | Linux 中國

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1ACL 表示訪問控制列表(Access Control List,ACL),它為檔案系統提供了附加的、更具有彈性的許可權機制。 它被設計來為補充 UNIX 檔案許可權機制。-- Magesh Maruthamuthu
本文導航◈ 什麼是 ACL?16%◈ 什麼是 setfacl?20%◈ 什麼 getfacl?21%◈ 如何確認是否啟用了 ACL?24%◈ 如何檢視預設的 ACL 值38%◈ 如何為檔案設定 ACL43%◈ 如何為目錄設定 ACL56%◈ 如何為組設定 ACL68%◈ 如何刪除 ACL75%◈ 如何備份並還原 ACL88%編譯自 | https://www.2daygeek.com/how-to-configure-access-control-lists-acls-setfacl-getfacl-linux/
 
 作者 | Magesh Maruthamuthu
 譯者 | lujun9972

當提到檔案和目錄的許可權時,你的第一反應可能是“屬主/群組/其它”許可權。 這些許可權可以通過 chmod、 chown 等命令來修改。

檔案和目錄都有屬主 (檔案所有者 )、群組 (所屬組) 以及其它許可權,這些許可權構成一個集合。 然而這些許可權集合有它的侷限性,無法做到為不同的使用者設定不同的許可權。

Linux 對檔案和目錄有以下預設許可權。

◈ 檔案 -> 644 -> -rw-r-r- (所有者有讀寫許可權,組成員有隻讀許可權, 其他人也只有讀許可權)◈ 目錄 -> 755 -> drwxr-xr-x
 (所有者有讀、寫和執行許可權,組成員有讀和執行的許可權,其他人也有讀和執行的許可權)

比如: 預設情況下,所有者可以訪問和編輯他們自己主目錄中的檔案, 也可以訪問相關同組人的檔案,但他們不能修改這些檔案,因為組成員沒有寫許可權,而且讓組成員有寫許可權也是不明智的。 基於同樣的原因,他/她也不能修改其他人的檔案。 然而在某些情況下,多個使用者想要修改同一個檔案, 那該怎麼辦呢?

假設有個名叫 magi 的使用者,他想要修改 httpd.conf 檔案怎麼辦呢? 這個檔案是歸 root 使用者所有的,這樣如何授權呢? 為了解決這種情況,訪問控制列表Access Control List(ACL)誕生了。

什麼是 ACL?

ACL 表示訪問控制列表Access Control List(ACL),它為檔案系統提供了附加的、更具有彈性的許可權機制。 它被設計來為補充 UNIX 檔案許可權機制。 ACL 允許你賦予任何某使用者/組訪問某項資源的許可權。 setfacl 與 getfacl 命令會幫助你管理 ACL 而不會有任何麻煩。

什麼是 setfacl?

setfacl 用於設定檔案和目錄的 ACL。

什麼 getfacl?

getfacl - 獲取檔案的 ACL 。對於每個檔案, getfacl 都會顯示檔名、檔案所有者、所屬組以及ACL。 如果目錄有預設 ACL, getfacl 也會顯示這個預設的 ACL。

如何確認是否啟用了 ACL?

執行 tune2fs 命令來檢查是否啟用了 ACL。

  1. #tune2fs-l /dev/sdb1 |grep options

  2. Defaultmount options:(none)

上面的輸出很明顯第說明 /dev/sdb1 分割槽沒有啟用 ACL。

如果結果中沒有列出 acl,則你需要在掛載選項中加上 acl。 為了讓它永久生效, 修改 /etc/fstab 中 /app 這一行成這樣:

  1. #more/etc/fstab

  2. UUID=f304277d-1063-40a2-b9dc-8bcf30466a03/ ext4 defaults 11

  3. /dev/sdb1        /app ext4 defaultsacl 11

或者,你也可以使用下面命令將其新增道檔案系統的超級塊中:

  1. #tune2fs-o +acl /dev/sdb1

現在,通過執行以下命令來動態修改選項:

  1. #mount-o remount,acl /app

再次執行 tune2fs 命令來看選項中是否有 acl 了:

  1. #tune2fs-l /dev/sdb1 |grep options

  2. Defaultmount options acl

嗯,現在 /dev/sdb1 分割槽中有 ACL 選項了。

如何檢視預設的 ACL 值

要檢視檔案和目錄預設的 ACL 值,可以使用 getfacl 命令後面加上檔案路徑或者目錄路徑。 注意, 當你對非 ACL 檔案/目錄執行 getfacl 命令時, 則不會顯示附加的 user和 mask 引數值。

  1. # getfacl /etc/apache2/apache2.conf

  2. #file etc/apache2/apache2.conf

  3. # owner root

  4. # group root

  5. user::rw-

  6. group::r--

  7. other::r--

如何為檔案設定 ACL

以下面格式執行 setfacl 命令可以為指定檔案設定 ACL。在下面的例子中,我們會給 magi 使用者對 /etc/apache2/apache2.conf 檔案 rwx 的許可權。

  1. #setfacl-m u:magi:rwx /etc/apache2/apache2.conf

仔細分析起來:

◈ setfacl: 命令◈ -m: 修改檔案的當前 ACL◈ u: 指明使用者◈ magi: 使用者名稱◈ rwx: 要設定的許可權◈ /etc/apache2/apache2.conf: 檔名稱

再檢視一次新的 ACL 值:

  1. # getfacl /etc/apache2/apache2.conf

  2. #file etc/apache2/apache2.conf

  3. # owner root

  4. # group root

  5. user::rw-

  6. user:magi:rwx

  7. group::r--

  8. mask::rwx

  9. other::r--

注意: 若你發現檔案或目錄許可權後面有一個加號(+),就表示設定了 ACL。

  1. #ls-lh /etc/apache2/apache2.conf

  2. -rw-rwxr--+1 root root 7.1KSep1914:58/etc/apache2/apache2.conf

如何為目錄設定 ACL

以下面格式執行 setfacl 命令可以遞迴地為指定目錄設定 ACL。在下面的例子中,我們會將 /etc/apache2/sites-available/ 目錄中的 rwx 許可權賦予 magi 使用者。

  1. #setfacl-Rm u:magi:rwx /etc/apache2/sites-available/

其中:

◈ -R: 遞迴到子目錄中

再次檢視一下新的 ACL 值。

  1. # getfacl /etc/apache2/sites-available/

  2. #file etc/apache2/sites-available/

  3. # owner root

  4. # group root

  5. user::rwx

  6. user:magi:rwx

  7. group::r-x

  8. mask::rwx

  9. other::r-x

現在 /etc/apache2/sites-available/ 中的檔案和目錄都設定了 ACL。

  1. #ls-lh /etc/apache2/sites-available/

  2. total 20K

  3. -rw-rwxr--+1 root root 1.4KSep1914:56000-default.conf

  4. -rw-rwxr--+1 root root 6.2KSep1914:56default-ssl.conf

  5. -rw-rwxr--+1 root root 1.4KDec802:57 mywebpage.com.conf

  6. -rw-rwxr--+1 root root 1.4KDec719:07 testpage.com.conf

如何為組設定 ACL

以下面格式為指定檔案執行 setfacl 命令。在下面的例子中,我們會給 appdev 組賦予 /etc/apache2/apache2.conf 檔案的 rwx 許可權。

  1. #setfacl-m g:appdev:rwx /etc/apache2/apache2.conf

其中:

◈ g: 指明一個組

對多個使用者和組授權,只需要用 逗號 區分開,就像下面這樣。

  1. #setfacl-m u:magi:rwx,g:appdev:rwx /etc/apache2/apache2.conf

如何刪除 ACL

以下面格式執行 setfacl 命令會刪除檔案對指定使用者的 ACL。這隻會刪除使用者許可權而保留 mask 的值為只讀。

  1. #setfacl-x u:magi /etc/apache2/apache2.conf

其中:

◈ -x: 從檔案的 ACL 中刪除

再次檢視 ACL 值。在下面的輸出中我們可以看到 mask 的值是讀。

  1. # getfacl /etc/apache2/apache2.conf

  2. #file etc/apache2/apache2.conf

  3. # owner root

  4. # group root

  5. user::rw-

  6. group::r--

  7. mask::r--

  8. other::r--

使用 -b 來刪除檔案中所有的 ACL。

  1. #setfacl-b /etc/apache2/apache2.conf

其中:

◈ -b: 刪除所有的 ACL 條目

再次檢視刪掉後的 ACl 值就會發現所有的東西都不見了,包括 mask 的值也不見了。

  1. # getfacl /etc/apache2/apache2.conf

  2. #file etc/apache2/apache2.conf

  3. # owner root

  4. # group root

  5. user::rw-

  6. group::r--

  7. other::r--

如何備份並還原 ACL

下面命令可以備份和還原 ACL 的值。要製作備份, 需要進入對應的目錄然後這樣做(假設我們要備份 sites-available 目錄中的 ACL 值)。

  1. #cd/etc/apache2/sites-available/

  2. # getfacl -R *> acl_backup_for_folder

還原的話,則執行下面命令:

  1. #setfacl--restore=/etc/apache2/sites-available/acl_backup_for_folder

via: https://www.2daygeek.com/how-to-configure-access-control-lists-acls-setfacl-getfacl-linux/

作者:Magesh Maruthamuthu[2] 譯者:lujun9972 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出

LCTT 譯者0?wx_fmt=pnglujun9972 ? ? ? ?共計翻譯:51 篇貢獻時間:39 天

推薦文章

< 左右滑動檢視相關文章 >

0?wx_fmt=png0?wx_fmt=png

相關推薦

使用 ACL 設定使用者訪問指定檔案/目錄許可權 | Linux 中國

ACL 表示訪問控制列表(Access Control List,ACL),它為檔案系統提供了附

apache 設定禁止訪問某些檔案目錄

【apache配置禁止訪問】 1. 禁止訪問某些檔案/目錄 增加Files選項來控制,比如要不允許訪問 .inc 副檔名的檔案,保護php類庫:<Files ~ "\.inc$">    Order allow,deny    Deny from all <

ftp設置用戶只能夠訪問指定目錄

ftp設置用戶只能夠訪問指定的目錄如新建一個admin用戶,若指定admin只能訪問/home /uftp目錄下的administer目錄。則:(1) 首先要存在administer目錄,並且保證administer目錄不具備可寫的權限,否則將造成登錄失敗。可使用“chmod a-w + 目錄”進

mac 進入指定檔案目錄

用了兩年多的mac了,好多東西都還不會,平時也拿來做開發用,但是有種沒有windows順手的感覺。就拿使用maven這件事來說吧。用homebrew安裝了maven,但是想使用安裝的maven來管理專案的時候,卻找不到maven安裝在哪兒,好幾次都問度娘,每次都覺得麻煩,就沒弄成功過。前幾天又試

Linux私房菜:檔案目錄許可權那點事

本文內容精簡、整理、摘抄、有感於《鳥哥的Linux私房菜》第五章 • Linux的檔案許可權與目錄配置。 檔案目錄身份 owner -> u -> 擁有者 group ->

java 刪除指定檔案目錄

今天沒事 回頭看看IO流的問題呢,順便整理下刪除檔案的步驟。畢竟曾經也是讓我頭疼的問題。 本來想將刪除目錄以及子目錄都放在一個方法處理的(在一個方法中只能刪除子目錄,執行完這個方法才會執行刪除最外層目錄的程式碼),但是沒能處理的了,因為時間緊張也就沒往下想(其實這樣也挺好,簡單、易懂)。希望各位

Linux檔案目錄許可權、隱藏屬性、特殊許可權

一、 Linux檔案及目錄許可權概念 1.1 檢視目錄或者檔案的許可權   “ls -al”命令可以檢視 1.2 目錄及檔案許可權分析 從上面的圖中可以看到,目錄或者檔案的屬性欄位為:   - - - - - - - - - - 從左至

檔案目錄許可權管理

檔案目錄許可權管理 一、檔案資訊簡介 ls -l/-lR(遞迴) file(檢視檔案資訊) -rw-rw-r–. 1 kiosk kiosk 0 Jan 3 20:16 unit4 1|2 |3 |4 | 5| 6 | 7 |8| 9 | 10 [2] 檔案擁有者對檔案能做什麼操作

玩玩linux下的access函式---探測檔案/目錄許可權

       access函式用來探測檔案/目錄許可權, 我們先來看程式: #include <stdio.h> #include <unistd.h> int main(

Sftp只允許使用者訪問指定目錄

  在一些生產環境中,有時,使用者需要傳資料到伺服器,但是配置ftp服務比較麻煩,此時,我們可以為使用者建立sftp賬戶,讓使用者使用sftp來上傳下載所需的資料。Sftp賬號即為系統賬號,將賬戶密碼給使用者,使用者除了能登入sftp上傳下載資料外,還可以訪問系統中的其他目

檔案目錄許可權總結

代表字元 許可權 對檔案的含義 對目錄的含義 4 - r 讀許可權 可以產看檔案內容

安裝資料庫提示"請確保當前使用者具有訪問臨時檔案許可權"解決方法

SYMPTOMS While installing 11.2 on Unix/Linux platform below errors appear: "INS-30131 initial setup required for the execution of insta

iOS 實現錄音並儲存在指定檔案目錄下面

原理: 進入介面,先遍歷檔案目錄,將所有的檔名,顯示在uitableview中。在錄音時需要設定session以及錄音取樣率。 1.ios錄音主要使用ios自帶的類,是工程中需要手動新增這倆個framework #import <AVFoundati

Linux--檔案/目錄 許可權及修改

首先所有許可權對於三類使用者分別設定: User(所有者) / Group(組群) / Others(其他)。 許可權也是有三種:Read / Write / eXecute,這三種許可權對於文件和目錄有不同的意義。 1. 對於文件: Read:可以檢視文件的內容 Wri

ASP .Net Core 中介軟體的使用(一):搭建靜態檔案伺服器/訪問指定檔案

前言 隨著Asp .Net Core的升級迭代,很多開發者都逐漸傾向於.net core開發。 .net core是一個跨平臺的應用程式,可以在windows、Linux、macOS系統上進行開發和部署,是一個體繫結構更精簡模組化框架。 生成WebUi和WebApi的統一使用場景; 整合新的客戶端框架和開發

linux目錄許可權檢視與修改以及檔案目錄訪問許可權設定

檢視檔案許可權的語句:   在終端輸入: ls -l xxx.xxx (xxx.xxx是檔名)   那麼就會出現相類似的資訊,主要都是這些: -rw-rw-r--   一共有10位數   其中: 最前面那個 - 代表的是型別   中間那三個 rw- 代表的是所有者(user

Koa2學習系列07-處理靜態資源——指定靜態檔案目錄設定快取

處理靜態資源 無非花開花落,靜靜。   指定靜態資源目錄 這裡我們使用第三方中介軟體: koa-static   安裝並使用 安裝 koa-static: npm i koa-static -S  

ossutil釋出1.4.2版本,支援上傳或複製檔案目錄指定儲存型別,支援訪問請求者付費模式的Bucket

ossutil 1.4.2 Release Note lscp命令:支援訪問開啟“請求者付費模式”的Bucket cp命令:上傳、複製檔案或目錄時,支援設定儲存型別 cp命令:上傳下載時,顯示傳輸速度 cp命令:Window版本支援斷點續傳(Linux、Mac版本已經支援) os

Windows 無法訪問指定裝置,路徑或檔案。你可能沒有合適的許可權訪問這個專案。

Windows 無法訪問指定裝置,路徑或檔案。你可能沒有合適的許可權訪問這個專案。 0. 背景 出現這個問題的背景如下: 電腦安裝有金山毒霸 win10 系統 開啟部分.exe檔案情況報上述錯 1. 報錯原因 說實話,這個windows系統,

騰訊雲伺服器centos7.3 配置FTP,每個使用者登入FTP對應不同的檔案目錄,並只能訪問設定目錄

VSFTPD 安裝: -- 檢視是否已經安裝 VSftpd: rpm -qa | grep vsftp yum install -y vsftpd groupadd ftpuser #建立ftpuser組 useradd -g ftpuser -s /sbin/