第十二章:Linux中許可權控制例項

穆晨發表於2017-01-28

前言

       前文對 Linux 中的許可權進行了較為透徹的分析。而本文,則在前文的基礎上,具體說明如何在程式碼中進行許可權控制

       下面的程式碼涉及到以下幾個方面:

       1. 建立檔案時設定檔案許可權

       2. 修改檔案的預設許可權

       3. 修改已建立檔案的許可權

       在閱讀具體實現程式碼前,請先大致瞭解如下許可權巨集。

Linux 中的許可權巨集

       

程式碼實現

 1 #include "apue.h"
 2 #include <fcntl.h>
 3 
 4 #define RWRWRW (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH)
 5 
 6 int
 7 main(void)
 8 {
 9     struct stat statbuf;
10     umask(0);
11 
12     // 按照巨集 RWRWRW 指定的許可權建立檔案 
13     if (creat("foo", RWRWRW) < 0)
14         err_sys("creat error for foo");
15     // 修改預設許可權 - 遮蔽掉建立檔案的組讀寫和其他使用者讀寫許可權
16     umask(S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH);
17     if (creat("bar", RWRWRW) < 0)
18         err_sys("creat error for bar");
19     
20     // 獲取檔案許可權資訊
21     if (stat("foo", &statbuf) < 0)
22         err_sys("stat err for foo");
23     // 在檔案原來的許可權資訊的基礎上,進行增加/刪除許可權。
24     // 下面的示例刪除了組執行許可權並增加了設定組ID位。
25     if (chmod("foo", (statbuf.st_mode & ~S_IWGRP) | S_ISGID) < 0)
26         err_sys("chmod err for foo");
27     exit(0);
28 }

執行測試

       執行程式後,檢視 foo 檔案的許可權,與預計相符:

       

小結

       Linux中設定狀態位的方法大概都是用巨集指定;刪除狀態位語法為原來的狀態位 &~ 巨集;增加狀態位語法為原來的狀態位 | 巨集。

相關文章