Linux
如何在 Linux 上“監禁”使用者帳戶的網路功能?
Linux
a
機器通過動態 DNS 註冊連接到家庭 DSL 線路,託管一個tmux
會話,多個客戶端通過 SSH 以只讀模式連接到該會話。所有使用者都使用相同的憑據進行連接: userb
。Example: ssh b@a.dynip.org tmux attach -t screencast
一切正常,但我有一個使用者從盒子到網際網路做“頑皮”的事情。這是不可接受的,因為我要對與 ISP 的網際網路契約負責;除了授予使用該帳戶的能力之外,我如何完全監禁每個使用者
b
,overssh
,用於在我的機器上tmux
觀看會話?screencast``a
我正在考慮在使用者通過 ssh 連接後立即更新 ipchains,只允許流量返回該 IP 地址,但是……多個查看者共享同一個帳戶?
我不完全理解您的要求:使用者將被監禁在哪台機器上?他們可以做任何不涉及網路的事情嗎?儘管如此,我想我可以告訴你必要的建構塊是什麼。
要將使用者限制為特定的網路連接,請參閱 如何在 Linux 中使用 iptables 限制區域網路上特定使用者的 Internet 訪問。簡而言之,將使用者 1234 的網路流量限制為通過 ssh 連接到 192.0.2.42(機器 A 的 IP 地址):
iptables -t mangle -A OUTPUT -o eth0 -m owner --uid-owner 1234 -d 192.0.2.42 --dport 22 -j ACCEPT iptables -t mangle -A OUTPUT -o eth0 -m owner --uid-owner 1234 -j DROP
如果您有 IPv6,請記住也要阻止它。
在機器 A 上,要將受限使用者限制為帳戶 B,最有效的方法是安排這些使用者沒有其他帳戶的憑據。您可以使用
Match
指令sshd_config
來限制來自某些 IP 地址的連接以驗證某些使用者,但這可能不是一件好事,因為它會阻止您獲得管理訪問權限。Match 192.0.2.99 AllowTCPForwarding No AllowUsers B PasswordAuthentication No X11Forwarding No
要將賬戶 B 限制為單個命令,有兩種方法:
- 給使用者一個私鑰(最好是每個使用者一個),並在
authorized_keys
文件中使用command=
指令設置此密鑰的限制。command="tmux attach-session -r -t screencast" ssh-rsa …
tmux
將使用者的 shell 設置為使用正確參數啟動的腳本。這樣做的好處是您可以允許密碼身份驗證,但可能更難以一種不允許使用者突破到 shell 提示符的方式正確處理。我認為 tmux 不允許在只讀會話中進行 shell 轉義,但我不確定,請檢查使用者此時是否無法轉義。