Solaris可以支持三種正常的shell,Bourne Shell ( /bin/sh或/sbin/sh )、C Shell ( /bin/csh )和Korn Shell ( /bin/ksh )。使用這些作為登錄shell時,用戶的權限僅由文件的讀、寫、執行權限和ACL控制。這種控制方式比較簡單,文件明確規定了主人、同組人和他們的權限,而所有其他人都用第三組權限。這很難劃分比較細致的權限級別,在很多情況下這不能滿足管理員的要求。
管理員可能希望設置某些特殊用戶,某用戶只管關機;某用戶只能通過POP3使用郵件服務,該用戶登錄的唯一目的是改自己的口令;某個用戶只能在家目錄下創建文件(比如通過ftp下載文件),不能修改已有文件,不能浏覽文件系統、不能刪除文件……
所有這些都可以在登錄shell上做文章。
例一, 一個關機用戶
要關機,必須有關機權限。什麼人有關機權限?root。但不能把root口令告訴普通用戶,怎麼辦?創建一個特殊的超級用戶,他的登錄shell是一個定制的文件:一條關機命令。具體做法如下:
# vi /etc/passwd
shutdown:x:0:1:shutdown user:/:/bin/shutdown 添加一個用戶
# vi /etc/shadow
shutdown::::::::
# vi /bin/shutdown
/usr/sbin/shutdown -y -g0 -i5
把別的用戶logout,試著用shutdown用戶登錄。輸入完用戶名和口令後,系統就開始關機。
例二, 一個郵件用戶,該用戶登錄時只能改口令
比如此用戶為user1,添加完該用戶後,修改他的登錄shell,方法如下:
# vi /etc/passwd
user1:x:……..:/bin/passwd
試著從另外一台機器telnet過來,有什麼現象?用戶一登錄上來,系統就讓用戶改口令。改完後,網絡連接自動斷掉。
例三, 一個用戶只能在家目錄下創建文件(比如通過ftp下載文件),不能修改已有文件,不能浏覽文件系統、不能刪除文件……
這種用戶的實現可以借助於一種/usr/lib/rsh稱為restricted shell的文件。這種shell其實是Bourne shell的一種變形。除了以下特點以外,它和Bourne shell完全相同:
使用此種shell的用戶不能:
改變自己的工作路徑,因此只能呆在家目錄下;
不能修改PATH變量,所以一旦PATH被管理員設定後,用戶只能執行指定目錄下的命令;
指明路徑和命令時不能用“/”;
不能重定向輸出。
這樣,為了實現上面規定的功能,可以按下面的做法:
1. 首先按一般方法( admintool )創建此用戶,但登錄shell寫/usr/lib/rsh
2. 修改其家目錄下的.profile文件,最重要的是其中的PATH變量,例如:
PATH= . ; export PATH
3. # cp –p /usr/bin/ftp .
# cp –p /usr/bin/telnet .
# cp –p /usr/bin/ls .
# cp –p /usr/bin/pwd .
# cp –p /usr/bin/more .
# cp –p /usr/bin/file .
拷貝一系列該用戶需要使用的命令到其家目錄下。但是切記不要包括rm 、vi等有可能使用戶自己修改.profile的命令。