新增只能遠端執行腳本的用戶

新增只能遠端執行腳本的用戶

我想創建一個只能做一件事的用戶:透過 ssh 指定一個駐留在一個特定資料夾中的腳本(以及該腳本的命令列參數)(出於這個問題的目的,讓我們稱之為它/local/remote_only_scripts/foo)並執行該腳本並傳回它的輸出。

為了清楚起見,我不希望使用者能夠做一些事情的例子:

  • 本機登入帳戶。登入應用程式是/bin/login.它不是/local/remote_only_scripts/foo資料夾中的腳本,因此不應由使用者呼叫。
  • 遠端登入帳戶。再次登入(是 ssh 呼叫的嗎?)不是相關資料夾中的腳本。
  • 列出目錄的內容。 ls 位於/bin/ls.它不是適當目錄中的腳本。
  • 編輯該目錄中的檔案。 emacs、vi、gedit 大多數其他編輯器不是該目錄中的腳本。
  • 查看該目錄中文件的內容。
  • 執行該目錄下他無權執行的文件。

請注意,這些是例子還有許多其他操作我不希望用戶能夠執行。在考慮某個操作時,請詢問“這是由 中的腳本完成的嗎/local/remote_only_scripts/foo?”如果答案是否定的,則使用者不應該能夠這樣做。如果答案是肯定的,那麼用戶應該能夠做到這一點。

PS:讓我澄清一下「添加用戶」的意思。我的意思並不是將使用者新增到某些 ssh 子系統。相反,我的意思是向電腦系統添加用戶。例如,我有一個運行 debian stable 的系統,透過它的位址呼叫它,www.hg.bar.com。我想添加一個用戶(透過 kuser、users-admin 或 useradd 或某種類似的方式)稱他為 hg_guest。 hg_guest 無法本機登入或執行上述清單中的任何操作。 hg_guest 所能做的就是「遠端」執行腳本。我說他應該可以透過ssh來做到這一點,但現在想想,也許允許他使用ssh可能會讓他在本地登錄,所以可能需要一些其他機制。

答案1

有一個命令authorized_keys 檔案中的選項。這個選項似乎完全符合你的要求。

請注意,它不是 chroot 或受限 shell。它只允許透過 ssh 執行這些命令。以你的例子來說,它將是:

ssh somehost /local/remote_only_scripts/foo

對於這個authorized_keys檔:

command="/local/remote_only_scripts/foo",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ...public key... 

如果您不希望用戶能夠本地登錄,有很多方法。您可以:

  • 只需將其外殼設置為/bin/假(也許你需要/bin/真因為 ssh 需要有效登入)
  • 鎖定其密碼,請參閱passwd -l

編輯:新增了更多限制選項並闡明如何刪除本機存取權限。

答案2

嘗試將此作為使用者的登入 shell:

#!/bin/sh
basedir=/local/remote_only_scripts
while read -p '$ ' prog args; do
    if [ ! -x "$basedir/$prog" ]; then
        echo "Invalid program: $prog"
    else
        case "$prog $args" in
            *\**|*\?*|*\^*|*\&*|*\<*|*\>*|*\|*|*\;*|*\`*|*\[*|*\]*)
                echo "Invalid character in command";;
            *)
                eval "$prog $args"
                echo;; # force a trailing newline after the program
        esac
    fi
done

您可能還希望將其authorized_keys明確地包含在文件中,如 Coren 的回答所示;但替換 '.../foo;與這裡的程式。這將阻止來自 SSH 的命令,例如sftpscpssh hostname command

答案3

萬一他們只需要存取一個腳本,這對我來說非常有效。新增使用者並將其預設 shell 變更為腳本的路徑。當他們透過 ssh 連線時,它將執行腳本並關閉會話。

server1:/ # useradd -s "/local/remote_only_scripts/foo/script.sh" hg_guest

server1:/ # grep hg_guest /etc/passwd

hg_guest:x:2002:100::/home/hg_guest:/local/remote_only_scripts/foo/script.sh

相關內容