受限的shell限制了使用者帳戶在Linux上可以做什麼。受限使用者不能更改其目錄,您可以控制他們可以訪問哪些命令。下面介紹如何在Linux上設定受限shell。
受限shell不是另一個shell。這是標準外殼的另一種模式。Bash、Korn、Fish和其他shell都可以在受限shell模式下啟動。在本文中,我們將使用Bash,但相同的原則也適用於其他shell。
因為受限shell只是使用標準shell的另一種方式,所以它們很容易設定。沒有什麼可安裝的,而且它們在Linux所在的任何地方都可用。
受限shell也可以應用於指令碼。這就確保瞭如果它們被錯誤地寫入,可能造成的任何損壞都被限制在它們的受限世界中,並且它們無法訪問您的整個計算機。
不過,請注意,受限炮彈並不是完全可以逃脫的。有足夠知識的人可以逃脫限制。它們非常適合為臨時使用者設定安全邊界,但不要依賴受限shell來實現生產系統的任何真實安全。
相關:Bash、Zsh和其他Linux shell之間有什麼區別?
當您將Bash作為受限shell執行時,使用者將從中刪除一些功能。具體來說,使用者不能:
您可以使用-r(restricted)選項來呼叫受限制的Bash shell。禁止嘗試執行更改工作目錄之類的簡單任務。一條簡短的訊息告訴您cd受到限制。
bash -r cd DocumentsBash shell還可以檢測何時使用“rbash”而不是“Bash”呼叫它,這使得它也以受限shell的形式啟動。這提供了一種為特定使用者設定預設shell的方便方法,我們將很快使用它。
如果我們在Ubuntu上使用whereis命令來查詢rbash檔案,我們將看到可執行檔案位於“usr/bin”目錄中。手冊頁位於“/usr/share/man/man1”目錄中。
將ls命令與-l(long)選項一起使用,可以發現rbash實際上是bash的符號連結。
whereis rbash ls -l /usr/bin/rbash在Manjaro和Fedora上,必須建立rbash符號連結。這適用於兩種發行版:
whereis rbash sudo ln -s /bin/bash /bin/rbash whereis rbash第二次使用whereis命令時,它會在“/usr/bin”目錄中找到rbash。
讓我們建立一個名為“Minnie”的新使用者帳戶。我們將使用useradd命令的-s(shell)選項將shell設定為受限shell。我們還將使用asswd命令設定帳戶密碼,然後為它們建立主資料夾。
mkdir命令中的-p(parents)標誌告訴mkdir建立目標目錄以及它需要建立的任何父目錄。因此,透過建立“/home/minnie/bin”目錄,我們可以同時建立“/home/minnie”目錄。
sudo useradd minnie -s /bin/rbash sudo passwd minnie sudo mkdir -p /home/minnie/bin當敏妮登入時,她將在一個受限的外殼中執行。
cd她不能呼叫需要包含正斜槓“/”的命令:
/usr/bin/ping但是,她仍然可以執行在路徑中找到的命令。
ping這不是你所期望的行為,當然也不是我們想要的。為了進一步加強限制,我們需要更改minnie的shell用於查詢命令的路徑。
當我們建立minnie的home目錄“/home/minnie”時,我們還建立了一個“/home/minnie/bin”目錄。這就是目錄發揮作用的地方。
我們將編輯minnie的“.bash\u profile”檔案,並將她的路徑設定為僅指向該目錄。我們還將限制minnie的“.bash\u profile”檔案,以便只有root使用者可以編輯它。這意味著沒有其他使用者可以編輯該檔案並更改其路徑。
sudo gedit /home/minnie/.bash_profile編輯現有“PATH=”或新增以下行:
PATH=$HOME/bin儲存檔案。我們將使用chown命令將檔案的所有者更改為root,並使用chmod命令更改檔案許可權。只有根使用者才能編輯檔案。
sudo chown root:root /home/minnie/.bash_profile sudo chmod 755 /home/minnie/.bash_profile ls -l /home/minnie/.bash_profile下一次使用者minnie登入時,她的路徑指向一個資料夾。
我們的受限使用者minnie只能使用Bash內建的命令,比如echo、alias和logout。她甚至不能用ls!
ls如果我們希望他們能做任何有用的事情,我們就需要放鬆一下我們的勒索。我們將建立一些符號連結,從minnie的“bin”目錄到我們希望minnie能夠使用的命令。
sudo ln -s /bin/ls /home/minnie/bin sudo ln -s /bin/top /home/minnie/bin sudo ln -s /bin/uptime /home/minnie/bin sudo ln -s /bin/pinky /home/minnie/bin當minnie下次登入時,她會發現她可以使用Bash內建命令,以及那些連結到的命令。
ls pinky dave uptime我們建立了一個新使用者minnie。要更改現有使用者的shell,可以使用usermod命令的-s(shell)選項。
sudo usermod -s /bin/rbash mary您可以在“/etc/passwd”檔案中使用less命令快速檢視將哪個shell設定為使用者的預設shell。
less /etc/passwd我們可以看到,使用者mary下次登入時將使用受限shell。
記住將其他更改應用於$PATH環境變數,並設定希望使用者mary能夠執行的命令。
常規的、不受限制的使用者可以啟動在受限shell中執行的指令碼。複製以下行並將其貼上到編輯器中。將檔案另存為“受限.sh“然後關閉編輯器。
#!/bin/bash # script starts in normal Bash shell echo "## In UNrestricted mode! ##" echo echo "Current directory: `pwd`" echo "Changing directory" cd /usr/share echo "Now in directory: `pwd`" echo "Changing to home directory" cd ~ echo "Now in directory: `pwd`" # Setting restricted mode set -r echo echo "## In restricted mode! ##" echo echo "Current directory: `pwd`" echo "Changing directory to /home/" cd /home echo "Still in directory: `pwd`" echo echo "Trying to start another shell" /bin/bash echo echo "Trying to redirect command output" ls -l $HOME > my_files.txt cat my_files.txt echo exit 0我們需要使用chmod命令和+x(execute)標誌來使指令碼可執行。
chmod +x restricted.sh指令碼的第一部分在普通shell中執行。
./restricted.sh指令碼的第二部分是在受限shell中執行的“set-r”行之後的位。
在指令碼的受限制部分中,沒有任何嘗試的操作成功。
透過在第一行新增-r,可以使整個指令碼在受限shell中執行:
!#/bin/bash -r受限炮彈是有用的,但並非完全無誤。一個足夠熟練的使用者可以逃脫他們。但如果使用得當,它們是為特定帳戶建立一組限制的有用方法。
... …其中[遠端主機]是您正在訪問的IP地址。如果您的使用者名稱在遠端系統上不同,您可以透過輸入以下內容指定確切的使用者名稱: ...
...2018年Windows 10週年更新中,並在秋季Creators更新中向所有使用者推出,它基本上可以讓您在Windows 10中執行Linux軟體。 ...
... Bash是最流行的shell語言之一,以其強大功能和使用者友好命令的結合而聞名。這就是它在Linux發行版中如此豐富的原因。 ...
... 這是Linux使用者中最流行的shell。如果沒有Bourne-Again-Shell(bash)作為等式的一部分,甚至很難想到Shell。許多Linux發行版附帶bash作為預設shell,因為bash是預設的gnushell。在1989年發行...
...出顯示的文字。 向下滾動,您將看到頁面的不同元素是如何著色的。 多用與少用非常相似,但也有一些不同。在most中按H可檢視鍵繫結及其函式的列表。 用更少的顏色 如果你不想安裝另一個尋呼機或必須學習新的按鍵,有一...
...編寫的,並不是從任何其他shell家族派生的。它的目的是使用者友好。在它的許多其他特權中,fish根據您的歷史記錄和當前資料夾的內容為命令提供建議,類似於預測文字。 ksh:KornShell提供了一種特別強大的指令碼語言。 相關...
...小又簡單。 在使用Linux計算機的第一個小時內,您將學習如何使用Bash和其他shell附帶的cd命令。也許您以前有在其他作業系統上使用它的經驗,不需要解釋。它會改變當前的工作目錄,對嗎?還有什麼要知道的? 好吧,比你想象...
...視窗推到後臺(稱為“分離”)。當你想看到你的程序是如何進行的,你可以把視窗拉到前臺(“重新連線”)並再次使用它。這對於您不希望透過關閉終端視窗意外終止的長程序來說非常有用。 一旦運行了螢幕會話,就可以...
...Linux計算機後臺的靜默操縱器之一。它會悄悄地影響你的使用者體驗,但這並沒有什麼不好的地方。我們將解釋它的作用,以及如何調整它。 什麼是$path,它是如何工作的($path on linux, and how does it work)? 當您在終端視窗中鍵入...
...我們命令將在sh shell下執行。 第二行:我們看到命令將在使用者和組ID都為1000的情況下執行。這些是執行at命令的人的值。 第三行:收到任何電子郵件的人。 第四行:使用者掩碼是22。這是用於設定在此sh會話中建立的任何檔案...