限制遠端登陸SSH用戶無SHELL許可權
使用SSH作為管道代理來訪問網路的前提,是必須有一個SSH帳號,從安全角度而言,這個帳號是必須最小化的許可權。最簡單的辦法就是,禁止用戶登錄SHELL。
以下是一種設置方法:
在伺服器上建一個 username :
添加用戶:useradd -s /bin/false username,將用戶的shell設置成/bin/false。這樣用戶就無法與系統進行交互。
設置密碼:passwd username
(對已有帳號禁止其shell交互使用:usermod -s /bin/false username)
小技巧:
也可以使用 /usr/bin/passwd 作為用戶的 shell ,這樣用戶就可以通過登錄而來自主修改密碼。需要注意的是,需要將 /usr/bin/passwd 這一行寫進 /etc/shells檔。
sshd 認證通後之後,會檢查設定的 shell 是否登記在 /etc/shells 檔中,若已經登記,則fork自己,然後fork出來的子進程再exec 設定的 shell 。而 ssh 的 -N 參數,則是告訴 sshd 不需要執行 shell。(ssh本身可以通過參數來設置連接到 sshd 但是不執行遠端命令,默認是啟動用戶設定的 shell )。
建立Tunnel:
ssh -D 1080 -qfnN username@hostname
輸入密碼即可使用(也可以用key認證)。
Windows的話,可以使用plink.exe或者MyEnTunnel(MyEnTunnel 本質上也是使用plink.exe來建立Tunnel)。
此時帳號username 可以通過sshd的認證使用 TcpForwarding ,但是不能運行 shell,不能與系統交互。有效保障了系統的安全。
參數詳解:
-D 1080 建立動態Tunnel,監聽在本地1080埠。
-q 安靜模式。
-f ssh在後臺運行,即認證之後,ssh退居後臺。
-n 將 stdio 重定向到 /dev/null,與-f配合使用。
-N 不運行遠端程式。即通知 sshd 不運行設定的 shell。