傳統的UNIX中,root具有幾乎無窮的權力,而一般用戶卻經常受到這樣那樣的限制。通常解決這個問題的辦法包括su、sudo、wheel組、ACL等,而Solaris采用了基於角色的訪問控制(RBAC)和Privileges的方法。下面將用實例解釋這兩種權限控制方法。
RBAC實例:
在Solaris中,普通用戶是不具有關機的權限的,我們可以通過RBAC來下放權限給某些用戶。
首先,我們需要創建一個普通用戶(如果系統中已經有普通用戶可以忽略這一步):
# useradd -m -d /export/home/baseuser baseuser
# passwd baseuser
New Password:
Re-enter new Password:
passwd: password successfully changed for baseuser
# grep baseuser /etc/passwd
baseuser:x:5007:1::/export/home/baseuser:/bin/sh
其次,我們需要創建一個角色用戶:
# roleadd -m -d /export/home/shutdown shutdown
# passwd shutdown
New Password:
Re-enter new Password:
passwd: password successfully changed for shutdown
# grep shutdown /etc/passwd
shutdown:x:5008:1::/export/home/shutdown:/bin/pfsh
應該注意的是角色用戶的shell是/bin/pfsh,該帳號是不能直接登錄的,需要通過su命令才能切換到該用戶。其他可以使用的shell包括:/bin/pfcsh,/bin/pfksh等。
現在,我們要定義一個profile:
# echo "System Shutdown:::profile to shutdown:" >> /etc/security/prof_attr
給profile設置執行特殊命令的權限:
# echo "System Shutdown:suser:cmd:::/usr/sbin/shutdown:uid=0" >> /etc/security/exec_attr
然後,將profile賦予給角色shutdown,再將角色shutdown賦予給用戶baseuser(當然如果預先設置好prof_attr和exec_attr,可以在創建角色和用戶時分別賦予屬性):
# rolemod -P "System Shutdown" shutdown
# usermod -R shutdown baseuser
# grep shutdown /etc/user_attr
shutdown::::type=role;profiles=System Shutdown
baseuser::::type=normal;roles=shutdown
完成!現在我們可以用baseuser用戶登錄,然後su到shutdown角色去重啟機器。
實際上,與RBAC(即角色管理控制)相關的有五個文件,分別是:
/etc/user_attr 用戶屬性文件
/etc/security/prof_attr 角色屬性文件
/etc/security/auth_attr 授權屬性文件
/etc/security/exec_attr 執行屬性文件
系統默認已經設置了很多可以使用的profile,我們只需找到適用的profile,添加角色和將角色賦予給用戶就可以了。對以上文件更詳細的解釋請閱讀相關手冊。
Privileges實例:
與RBAC不同的是,RBAC在用戶層工作,與UID和權限有關;而Privileges工作在核心層,UID和權限將被忽略。例如,如果一個普通用戶的進程得到讀任何文件的privilege,該進程就可以讀本來只有root用戶才能訪問的文件。
查看權限列表
#ppriv -l -v
查看當前用戶進程的權限
$ ppriv $