在 freeIPA 中向 SELinux 受限使用者授予 sudo 訪問權限
我正在使用freeIPA為數百個虛擬機的域定義 RBAC、HBAC 和
sudo
規則,以及 SELinux 使用者映射,我需要向多個團隊(開發人員、數據庫管理員、系統管理員、管理, …)。目前,這些機器上的 SELinux 策略設置為
targeted
,我正在考慮刪除unconfined_u
SELinux 使用者以使這些系統在strict
策略下執行的可能性。為了做到這一點,要求之一是讓最終使用者了解他/她已從 ‘降級’
unconfined_u
到staff_u
. 問題在於sudo
與 SELinux 使用者映射的互操作方式。一些事實:
- 如果你想使用一個受限的 SELinux 使用者並且你希望仍然能夠使用
sudo
,你需要使用staff_u
,因為這是可以訪問 SETUID 執行檔的 SELinux 使用者。- 當使用者登錄系統時,他/她被分配一個 SELinux 使用者映射。
su
即使在 SELinux 使用者可以執行(unconfined_u
) 或sudo
(unconfined_u
, )的情況下,該映射也不會改變staff_u
。SELinux Spec
for目前包含在定義的andsudo
中執行命令的工具,但缺乏指定 the 的可能性。進一步的參考可以在這裡找到。types``roles``user
- 此部署中涉及的機器都是 freeIPA 客戶端,它們的
sudo
策略由 freeIPA 管理,但它們也有一個puppet
託管的自定義/etc/sudoers
文件,作為 freeIPA 失敗的備份提供。我第一次嘗試解決這個問題涉及使用包含所需規則的策略模組,以允許
staff_u
訪問未修改的sudorules
. 這種方法已被證明是錯誤的,因為政策可以無限增長,最後你所做的就是在政策上打一個洞。因此,到目前為止,我處理這些事實的方式一直是重寫
sudorules
以顯式包含呼叫以runcon
切換到適當的 SELinux 使用者,因此現在需要執行一個典型的開發人員,例如:$ sudo -u jboss runcon -u sysadm_u jboss_cli.sh
這樣做的缺點是必須修改所有現有的
sudorules
並迫使使用者改變通常執行的東西的方式。所以問題是:
- 有沒有辦法在定義中明確定義 SELinux 使用者
Runas_Spec
?- 如果無法通過,是否可以在 freeIPA
sudoers
中定義或綁定 a到 SELinux 使用者映射?sudorule
考慮這種情況:
# ipa sudorule-show services_4_operators_3 Rule name: services_4_operators_3 Description: Operator Level 3 access to service management commands Enabled: TRUE User Groups: operators_3 Host Groups: all-hosts Sudo Allow Command Groups: services Sudo Option: type=sysadm_t, role=sysadm_r # ipa sudocmdgroup-show services Sudo Command Group: services Description: commands for services and daemons management Member Sudo commands: /sbin/service, /sbin/chkconfig
如果我嘗試:
$ sudo service sshd status sudo: unable to open /var/log/sudo-io/seq: Permission denied
時間->2013 年 9 月 11 日星期三 09:57:30 type=PATH msg=audit(1378886250.584:46644668): item=0 name="/var/log/sudo-io/seq" inode=154 dev=fd:0c mode=0100600 ouid=0 ogid=1168000009 rdev=00: 00 obj=unconfined_u:object_r:var_log_t:s0 type=CWD msg=audit(1378886250.584:46644668): cwd="/home/some_user" type=SYSCALL msg=audit(1378886250.584:46644668):arch=c000003e syscall=2 成功=沒有退出=-13 a0=7fff2e7ab970 a1=42 a2=180 a3=0 項=1 ppid=2374 pid=2442 auid=1168000009 uid =1168000009 gid=1168000009 euid=0 suid=0 fsuid=0 egid=1168000009 sgid=1168000009 fsgid=1168000009 tty=pts0 ses=6459 comm="sudo" exe="/usr/bin/sudo" subj=staff_u:staff_r: staff_sudo_t:s0-s0:c0.c1023 key="access" type=AVC msg=audit(1378886250.584:46644668):avc: denied { read write } for pid=2442 comm="sudo" name="seq" dev=dm-12 ino=154 scontext=staff_u:staff_r:staff_sudo_t:s0 -s0:c0.c1023 tcontext=unconfined_u:object_r:var_log_t:s0 tclass=文件
因為我正在使用
log_output
和Defaults
:# ll -dZ /var/log/sudo-io drwx------. root root system_u:object_r:var_log_t:s0 /var/log/sudo-io/
嘗試“修復”此 AVC 拒絕將導致上述無限策略模組,因為允許:
allow staff_sudo_t var_log_t:file { open read write lock create }; allow staff_sudo_t var_log_t:dir { write add_name create search };
是一個虛假的問題,如啟用此類權限時所示:
$ sudo service sshd status env: /etc/init.d/sshd: Permission denied
時間->2013 年 9 月 11 日星期三 11:00:53 type=PATH msg=audit(1378890053.185:46646934): item=0 name="/etc/init.d/sshd" inode=5490 dev=fd:01 mode=0100755 ouid=0 ogid=0 rdev=00:00 obj =system_u:object_r:sshd_initrc_exec_t:s0 類型=CWD 消息=審計(1378890053.185:46646934):cwd="/" type=SYSCALL msg=audit(1378890053.185:46646934): arch=c000003e syscall=59 成功=沒有退出=-13 a0=7fffc0829862 a1=7fffc0829578 a2=607030 a3=ffffe000 items=1 ppid=6715 pid=6720 90uid168001 auid= =0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts2 ses=6459 comm="env" exe="/bin/env" subj=staff_u:sysadm_r:sysadm_t: s0-s0:c0.c1023 key=(null) type=AVC msg=audit(1378890053.185:46646934):avc: denied { execute } for pid=6720 comm="env" name="sshd" dev=dm-1 ino=5490 scontext=staff_u:sysadm_r:sysadm_t:s0- s0:c0.c1023 tcontext=system_u:object_r:sshd_initrc_exec_t:s0 tclass=file
最終編輯
我終於採用了一個中期解決方案。我已將 IPA 伺服器配置如下:
$ sudo -u dsastrem ipa config-show Maximum username length: 32 Home directory base: /home Default shell: /bin/rbash Default users group: ipausers Default e-mail domain: company.com Search time limit: 2 Search size limit: 100 User search fields: uid,givenname,sn,telephonenumber,ou,title Group search fields: cn,description Enable migration mode: FALSE Certificate Subject base: O=COMPANY.COM Password Expiration Notification (days): 4 Password plugin features: AllowNThash SELinux user map order: guest_u:s0$xguest_u:s0$user_u:s0$staff_u:s0-s0:c0.c1023$unconfined_u:s0-s0:c0.c1023 Default SELinux user: guest_u:s0 Default PAC types: MS-PAC
我已經定義了一些類似於這個的 SELinux 使用者映射,將一些 RBAC 綁定到一個 SELinux 使用者(
staff_u
)。$ sudo -u dsastrem ipa selinuxusermap-find --------------------------- X SELinux User Maps matched --------------------------- .... Rule name: semap_operators_3_mad SELinux User: staff_u:s0-s0:c0.c1023 HBAC Rule: operators_3_access Description: SELinux user mapping for MAD level 3 operators Enabled: TRUE .... ---------------------------- Number of entries returned X ----------------------------
我的
sudo
規則現在看起來像這樣:Rule name: services_4_operators_3 Description: Operator Level 3 access to service management commands Enabled: TRUE User Groups: operators_3 Host Groups: all-hosts Sudo Allow Command Groups: services Sudo Option: role=unconfined_r
這不是我的最終目標,因為我想完全消除
unconfined_u
,但這是向前邁出的一大步,因為它稍微增強了整體安全性。當然,Matthew 的回答是正確的,staff_u
應該可以通過sudo
選項過渡到更高特權的域;但仍然存在system_u
無法完全替換的問題unconfined_u
。也許是因為它不打算這樣做。
你知道你可以進入這個
sysadm_r
角色staff_u
嗎?例如,以下將起作用。
myuser ALL=(ALL) TYPE=sysadm_t ROLE=sysadm_r PASSWD: ALL
這將允許您(幾乎)以 root 身份執行不受限制的操作。
哦,還有最後一個提示。使用
su
RBAC 有點棘手(它做了很多事情,把它帶到各種地方)。相反,您可以使用runuser
執行相同操作的命令而無需大量su
成本。我實際上
su
像這樣限制在 sudoers 中使用;%wheel ALL=(ALL) TYPE=sysadm_t ROLE=sysadm_r NOPASSWD: ALL, ! /bin/su
因為預設情況下,SELinux 策略不允許
sudo
轉換來管理必要的信號。sudo -i
真的,人們可能無論如何都應該使用。對於喜歡改掉壞習慣的人(比如我!),我通常硬連結
runuser
到ru
作為兩個字母的替代品。sudo su -