リモートでのみスクリプトを実行できるユーザーを追加する

リモートでのみスクリプトを実行できるユーザーを追加する

1つのタスクしか実行できないユーザーを作成したいと思います。 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サブシステムにユーザーを追加するわけではありません。代わりに、コンピュータシステムにユーザーを追加することを意味します。たとえば、私はwww.hg.bar.comというアドレスで呼び出すdebian stableを実行するシステムを持っています。ユーザーを追加し(kuser、users-admin、useradd、または同様の方法で)、その人をhg_guestと呼びたいです。 hg_guestはローカルにログインしたり、上記のリストの操作を実行したりすることはできません。 hg_guestができることは、スクリプトを「リモートで」実行することだけです。私は彼がsshを介してこれを行うことができなければならないと言いましたが、今考えてみると、彼がsshを使用できるようにすればローカルにログインできるので、他のメカニズムが必要になるかもしれません。

答え1

一つある注文するauthorized_keys ファイルのオプションです。このオプションは、あなたが探しているものと正確に一致するようです。

これはchrootまたは制限されたシェルではありません。このコマンドは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/trueSSHには有効なログインが必要なため)
  • パスワードをロックしてください。参考passwd -l

編集する:さらに制限オプションを追加し、ローカルアクセスを削除する方法を明確にしました。

答え2

ユーザーのログインシェルで次のことを試してください。

#!/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_keysCorenの答えのようにファイルに明示的に含めたい場合がありますが、ここでは「.../foo;」をプログラムに置き換えてください。これによりsftpscpなどのSSHコマンドがブロックされますssh hostname command

答え3

これは、スクリプトにのみアクセスする必要がある場合に便利です。ユーザーを追加し、デフォルトのシェルをスクリプトパスに変更します。 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

関連情報