## 受限Shell
\#!/bin/bash -r\(restricted bash\)即受限制的bash,其可以用作中轉服務器或者僅使用 ssh 來訪問網頁等等。我們可以用\#!/bin/bash -r或set -r方式運行Bash受限模式,開啟受限模式后具體表現如下:
* 通過 cd 來改變工作目錄
* 設置或取消環境變量: SHELL, PATH, ENV, BASH\_ENV
* 命令名中不能包含目錄分隔符 ‘/’
* 包含有 ‘/’ 的文件名作為內置命令 ‘.’ 的參數
* hash 內置命令有 -p 選項時的文件名參數包含 '/'
* 在啟動時通過 shell 環境導入函數定義
* 在啟動時通過 shell 環境解析 SHELLOPTS 的值
* 使用 >,>\|, <>, >&, &>, >> 等重定向操作符
* 使用 exec 內置命令
* 通過 enable 內置命令的 -f 和 -d 選項增加或刪除內置命令
* 使用 enable 內置命令來禁用或啟用 shell 內置命令
* 執行 command 內置命令時加上 -p 選項
* 通過 set +r 或 set +o restricted 關閉受限模式
* 現在通過受限bash來創建只讀用戶。
開啟Bash受限模式后會發現變得更安全,再來看一個案例通過set -r方式運行Bash限制模式。
```
#!/bin/bash
echo "Changing current work directory"
cd /etc
echo "Now in $PWD"
set -r
echo "------IN RESTRICTED MODE---------"
echo "Trying to change directory"
cd /usr/local
```
但要注意的是bash提供的受限環境的安全程度取決于用戶能執行的命令,很多命令都能調用外部命令,從而導致逃逸出受限環境。例如用 vim 打開一個文件:
```
[root@blog.puppeter.com_centos ~]# vim /etc/passwd
然后執行外部命令:
[root@blog.puppeter.com_centos ~]# !bash
```
這樣就可以啟動一個不受限的bash,這對 more,less,man 等命令同樣有效。如果還能執行腳本,如 python,perl 等,則有很多方式來啟動一個不受限的 shell。要讓bash受限模式更安全,可以限制用戶能夠執行的命令,如我們讓用戶執行執行 ssh 命令。一種方法是,修改 PATH 環境變量。例如我們創建一個user\_00用戶,讓他只能執行 ssh 命令:
```
[root@blog.puppeter.com_centos ~]# ls -s /bin/bash /bin/rbash
[root@blog.puppeter.com_centos ~]# useradd -s /bin/rbash user_00
[root@blog.puppeter.com_centos ~]# chown -R root:user_00 /home/user_00/.bashrc /home/user_00/.bash_profile
[root@blog.puppeter.com_centos ~]# chmod 640 /home/user_00/.bashrc /home/user_00/.bash_profile
[root@blog.puppeter.com_centos ~]# mkdir /home/user_00/bin
```
然后修改 PATH 環境變量的值為 /home/user\_00/bin,并將允許執行的命令放到這個目錄下。:
```
[root@blog.puppeter.com_centos ~]# echo "export PATH=/home/user_00/bin" >> /home/user_00/.bash_profile
```
把用戶可執行的命令鏈接到用戶 PATH 路徑下:
```
[root@blog.puppeter.com_centos ~]# $ ln -s /user/bin/ssh /home/ruser/bin/ssh
```
這樣就可以只讓登錄的用戶執行 ssh 命令。
- Introduction
- 1.Shell編程基礎
- 什么是Shell
- 編寫第一個Bash程序
- 2.變量
- 什么是變量
- 變量四種賦值方式
- 指定變量類型
- 變量的類型
- 特殊變量
- 3.Bash符號相關
- Bash符號相關
- 特殊符號
- 數學運算符號
- 4.內建命令與外部命令
- 內建命令與外部命令
- 5.read命令
- read命令
- 6.條件語句
- if..then..fi
- if..then..else..fi
- if..then..elif..fi
- 空命令
- 文件測試符
- 字符串判斷、與、或和非
- []與[[]]符號
- 7.Bash循環 && 分支語句
- while循環語句
- for循環
- for..in循環
- until循環
- select循環
- case分支語句
- 8.正則表達式
- 正則表達式
- 9.子Shell和受限Shell
- 子Shell
- 受限Shell
- 10.函數與函數的加載
- 函數語法與案例
- 遞歸函數
- 函數的加載
- 11.Bash腳本風格
- Bash腳本風格
- 12.Bash腳本調試
- Bash腳本調試
- 13.sed && awk
- sed
- 14.awk
- awk
- 15 Bash雜項 && 案例
- while循環的陷阱
- Bash的生命周期
- IO重定向
- /bin/bash和/bin/sh區別
- 命令雜項
- Shell加密
- 16.10.2.案例
- Bash版回收站
- 17.Bash中文速查表
- 中文速查表