現在讓我們建立一個我們自己的使用者域, 並把它叫做second_t 。 我們也將會建立一個新的角色叫做second_r 。 要建立second_r 角色首先在前面的部分(剛剛分配了 user_r 角色並且並不真正建立這樣的使用者) 中一步一步跟著作,但是不要運行第 5.2 節中的make命令。 在你已經編輯 /etc/selinux/user之後,回到這裡並且繼續下一部分,關於編輯消費者領域檔的部分。
關於為什麼我不想要你運行make指令的原因,是因為早先的部分剛剛分配了缺省的一個 user_r 的角色。 但是我們將會建立一個新的角色,而且同樣地我們需要一個新的域與它搭配。 以下部分進行概略說明。
6.1編輯使用者的域檔
使用者域的設定檔是 /etc/selinux/domains/user.te 。 請先看一遍。 添加以下幾行:
full_user_role(second)
allow system_r second_r
allow sysadm_r second_r
在檔的什麼位置添加是無所謂的,在上面添加注釋:
# if adding new user roles make sure you edit the in_user_role macro in
# macros/user_macros.te to match
再來編輯 /etc/selinux/macros/user_macros.te 檔進行匹配。 打開此檔並找到 in_user_role (差不多在檔的結尾)這行。 添加 "role second_r types $1;" 現在這部分檔應該像這樣:
undefine(`in_user_role')
define(`in_user_role', `
role user_r types $1;
role second_r types $1;
')
回到我們編輯的第一個檔 (full_user_role(second)), 這樣我們就建立了second_t域和second_home_dir_t類型以及 second_home_t 類型(使用者主目錄的類型和主目錄裡檔的類型 )。 一個 second_tmp_t類型 ,當在/tmp目錄下建立檔時。 類型 second_tmpfs_t是在tmpfs中共用記憶體檔案系統中建立檔的上下文。 最後,second_tty_device_t和 second_devpts_t類型分別被用來標記終端設備(tty)和虛擬終端設備。 當然也建立了相應的策略應用於這些標記。
SE Linux內部並不支援任何類型的標定, 以及類型/域的繼承,等。 當然策略語言的編寫也不支援這些特徵。 所以我們用M4宏編譯器來設置簡單的域和類型。
我們現在來建立一個使用者在這個新域中使用 (second_t)並訪問 second_r 角色。
6.2再次建立一個新的測試使用者
使用 useradd, 建立一個新的使用者。 (讓我們假設使用者叫做 " spike") 把spike加入 /etc/selinux/users 只給予他對 second_r 角色的訪問權和沒有其它許可權。 然後運行
make -C /etc/selinux load
應用新的策略。
接下來是設置缺省域和新的角色。 我們可以編輯 /etc/security/default_type 檔並添加以下行:
second_r:second_t
我們現在必須手動設定/home/spike 和它的上下文。 useradd ,命令不會做這些事情,它只支援重新標記使用者的 user_r 角色。 運行下面的命令:
find /home/spike -print0 | xargs -0 chcon -h system_u:object_r:second_home_t ;\
chcon -h system_u:object_r:second_home_dir_t /home/spike
現在試著用spike使用者身份登錄。