APUE第三版 程序 4-8(文件訪問權限)

如有錯誤,歡迎批評指正,本人也是才學APUE的菜鳥

先貼上程序代碼:

#include "apue.h"
#include <fcntl.h>

int main(int argc, char *argv[]) {
	if(argc != 2)
		err_quit("usage: a.out <pathname>");

	if(access(argv[1], R_OK) < 0)
		err_ret("access error for %s", argv[1]);
	else
		printf("read access OK\n");

	if(open(argv[1], O_RDONLY) < 0)
		err_ret("open error for %s,", argv[1]);
	else
		printf("open for reading OK\n");
}

/
/

該程序是 access 實例,即對 access 函數的使用。access 函數是按實際用戶 ID 和實際組 ID 來進行訪問權限測試的。

對於 access 的輸出,取決於進程的實際用戶 ID;對於 open 函數的輸出,取決於進程的有效用戶 ID

這裏是終端的測試過程:

hjm@hjm-Inspiron:~/InterviewPreparation/apue/Examples/4-8$ ls -l 4-8
-rwxr-xr-x 1 hjm hjm 13280 4月  17 19:15 4-8
hjm@hjm-Inspiron:~/InterviewPreparation/apue/Examples/4-8$ ./4-8 4-8
read access OK
open for reading OK
hjm@hjm-Inspiron:~/InterviewPreparation/apue/Examples/4-8$ ls -l /etc/shadow
-rw-r----- 1 root shadow 1393 4月  17 19:21 /etc/shadow
hjm@hjm-Inspiron:~/InterviewPreparation/apue/Examples/4-8$ ./4-8 /etc/shadow
access error for /etc/shadow: Permission denied
open error for /etc/shadow,: Permission denied
hjm@hjm-Inspiron:~/InterviewPreparation/apue/Examples/4-8$ su
密碼: 
root@hjm-Inspiron:/home/hjm/InterviewPreparation/apue/Examples/4-8# chown root 4-8
root@hjm-Inspiron:/home/hjm/InterviewPreparation/apue/Examples/4-8# chmod u+s 4-8
root@hjm-Inspiron:/home/hjm/InterviewPreparation/apue/Examples/4-8# ls -l 4-8
-rwsr-xr-x 1 root hjm 13280 4月  17 19:15 4-8
root@hjm-Inspiron:/home/hjm/InterviewPreparation/apue/Examples/4-8# exit
exit
hjm@hjm-Inspiron:~/InterviewPreparation/apue/Examples/4-8$ ./4-8 /etc/shadow
access error for /etc/shadow: Permission denied
open for reading OK
  1. 編譯好 4-8.c 文件,形成 4-8,首先查看了該文件的屬性。
    -rwxr-xr-x:這是一個普通文件,對其所有者的權限是 r (可讀)、w (可寫)、x (可執行);對其組所有者的權限是:r、x;對其他用戶的權限是 r、x;
    其所有者爲 hjm,組所有者爲 hjm

  2. 執行命令 ./4-8 4-8
    由輸出可知,進程實際用戶 ID 對文件 4-8 有可讀權限;同時該進程可以成功 open;(此時的有效用戶=實際用戶)

  3. 然後查看了 /etc/shadow 文件的屬性。可以與 1 進行同樣的解讀。

  4. 執行命令 ./4-8 /etc/shadow
    可知,進程實際用戶 ID 對文件 /etc/shadow 沒有可讀權限,該進程也無法成功 open;(此時的有效用戶=實際用戶)

  5. 切換到了 root 用戶,首先使用了命令 chown 改變了 4-8 的所有者;然後利用 chmod 命令打開了文件模式字(st_mode)中的設置用戶 ID 位,其具體含義是,當執行 4-8 時,將用文件所有者作爲有效用戶。
    再次查看了 4-8 的相關文件屬性。
    然後 exit 恢復爲正常用戶。

  6. 再次利用程序對 /etc/shadow 查看相關權限
    發現,進程實際用戶 ID 仍然對此文件沒有讀權限,但是該進程可以成功打開文件 (因爲此時的有效用戶爲 root)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章