之前有個需求, 就是希望要限制登入linux的使用者只能使用我們期望的指令, 其餘的指令都不准使用.
上網查了一些資料, 發現有Restricted shell這樣的東西.
進入Restricted shell的方法有很多
bash -r
bash --restricted
rbash
sh -r
rsh
ksh -r
rksh
這些都可以進入Restricted 模式.
在這個模式下, 使用者不被允許做下列動作
- changing directory
- specifying absolute pathnames or names containing a slash
- setting the PATH or SHELL variable
- redirection of output
乍看之下, 似乎有點捆住使用者的手腳了, 但是單獨使用Restricted shell,根本是雞肋. 只要使用者再執行一次bash
, 就完全解脫束縛了.
看下面例子就知道:
user@host:~$ rbash
user@host:~$ cd /
rbash: cd: restricted
user@host:~$ bash
user@host:~$ cd /
user@host:/$
因此, 要好好的發揮Restricted shell 的功能, 需要再加上一些動作才行.
- 首先, 我們先修改
/etc/passwd
, 把使用者的shell改為/etc/rbash
, 如此, 使用者登入時就已經在Restricted mode下了. -
在使用者的家目錄中,建立一個 叫做
program
的目錄 -
接下來修改使用者的
~/.bashrc
, 在最後的地方 加上export PATH=${HOME}/program
如此一來, 就強制PATH
的路徑只能夠找到~/program
這個目錄而已. - 最後, 將開放給使用者執行的程式copy到
program
這個目錄下.
這樣即可.
當使用者登入時, 就已經在Restricted mode 的狀態下, 而且PATH又不能被修改, 所以幾乎沒有指令可以執行了, 連ls
指令都不能跑, 呵呵, 超級可憐的. 只剩下program
目錄裡的程式可以用. 而且還看不到這個目錄有哪些程式, 實在夠悲哀了..
參考資料: