96

これはセキュリティのアイデアです。当社の従業員は、Linux サーバー上の一部のコマンドにアクセスできますが、すべてではありません。たとえば、ログ ファイルにアクセスしたり ( less logfile)、さまざまなコマンドを開始したり ( shutdown.sh/ run.sh) したりできます。

背景情報:

すべての従業員が同じユーザー名でサーバーにアクセスします。当社の製品は「通常の」ユーザー権限で実行され、「インストール」は必要ありません。ユーザーディレクトリに解凍して実行するだけです。アプリケーションが「インストール」されている複数のサーバーを管理しています。すべてのマシンに user がいますjohndoe。当社の従業員は、ログ ファイルにアクセスして確認したり、手動でアプリケーションを再起動したりするために、コマンド ラインでアプリケーションにアクセスする必要がある場合があります。完全なコマンド ライン アクセス権を持つのは一部のユーザーのみです。

サーバーでppk認証を使用しています。

employee1 がログファイルにのみアクセスでき、employee2 も X などを実行できるとしたら、それは素晴らしいことです...

解決策:解決策として、受け入れられた回答commandに記載されているオプションを 使用します。一部の従業員に対して実行できる唯一のファイルとなる、独自の小さなシェル スクリプトを作成します。スクリプトは、実行可能ないくつかのコマンドを提供しますが、それ以外は提供しません。hereに記載されているように、 from で次のパラメーターを使用します。authorized_keys

command="/bin/myscript.sh",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty
ssh-dss AAAAB3....o9M9qz4xqGCqGXoJw= user@host

これは私たちにとって十分なセキュリティです。ありがとう、コミュニティ!

4

9 に答える 9

72

キーを許可されたコマンド (authorized_keys ファイル内) に制限することもできます。

つまり、ユーザーは ssh 経由でログインせず、制限された一連のコマンドを使用できますが、ssh 経由でこれらのコマンドを実行することのみが許可されます (例: "ssh somehost bin/showlogfile")。

于 2008-12-31T10:06:00.747 に答える
34

sshrshパスワードファイルからユーザーのシェルプログラムを使用してコマンドを実行するという伝統に従います。

sshこれは、構成を一切行わずにこれを解決できることを意味します。

ユーザーがシェルにアクセスできないようにする場合は、そのユーザーのシェルをスクリプトに置き換えるだけです。調べてみる/etc/passwdと、各ユーザーにシェル コマンド インタープリターを割り当てるフィールドがあることがわかります。ssh user@host このスクリプトは、対話型ログインとコマンドの両方のシェルとして使用されますssh user@host command arg ...

ここに例があります。fooシェルがスクリプトであるユーザーを作成しました。スクリプトは、メッセージmy arguments are:に続いてその引数を (それぞれ別の行に山括弧で囲んで) 出力し、終了します。この場合のログには、引数はありません。何が起こるかは次のとおりです。

webserver:~# ssh foo@localhost
foo@localhost's password:
Linux webserver [ snip ]
[ snip ]
my arguments are:
Connection to localhost closed.

ユーザーがコマンドを実行しようとすると、次のようになります。

webserver:~# ssh foo@localhost cat /etc/passwd
foo@localhost's password:
my arguments are:
<-c>
<cat /etc/passwd>

私たちの「シェル」は、それを受け取る-cのとまったく同じ方法で、コマンド全体を 1 つの引数としてスタイル呼び出しを/bin/sh受け取ります。

ご覧のとおり、今できることは、スクリプトをさらに開発して、-c引数で呼び出された場合に大文字と小文字を区別し、文字列を解析することです (たとえば、パターン マッチングによって)。許可されている文字列は、再帰的に呼び出して実際のシェルに渡すことができます/bin/bash -c <string>-creject ケースは、エラー メッセージを出力して終了できます (が欠落している場合を含む)。

この書き方には注意が必要です。非常に具体的なものだけを許可し、それ以外はすべて許可しない、肯定的な一致のみを作成することをお勧めします。

注:の場合は、このようにコマンドでrootシェルをオーバーライドすることで、このアカウントにログインできます。(選択した代替シェル。) 非 root はこれを実行できません。susu -s /bin/bash foo

スクリプトの例を以下に示します。ユーザーを の下のリポジトリへsshのアクセスにのみ使用するように制限します。git/git

#!/bin/sh

if [ $# -ne 2 ] || [ "$1" != "-c" ] ; then
  printf "interactive login not permitted\n"
  exit 1
fi

set -- $2

if [ $# != 2 ] ; then
  printf "wrong number of arguments\n"
  exit 1
fi

case "$1" in
  ( git-upload-pack | git-receive-pack )
    ;; # continue execution
  ( * )
    printf "command not allowed\n"
    exit 1
    ;;
esac

# Canonicalize the path name: we don't want escape out of
# git via ../ path components.

gitpath=$(readlink -f "$2")  # GNU Coreutils specific

case "$gitpath" in
  ( /git/* )
     ;; # continue execution
  ( * )
    printf "access denied outside of /git\n"
    exit 1
    ;;
esac

if ! [ -e "$gitpath" ] ; then
   printf "that git repo doesn't exist\n"
   exit 1
fi

"$1" "$gitpath"

もちろん、これらの Git プログラムgit-upload-packgit-receive-packは、ユーザーがシステムにアクセスできるようにする穴やエスケープ ハッチがないことを信頼しています。

これは、この種の制限スキームに固有のものです。ユーザーは特定のセキュリティ ドメインでコードを実行するように認証されており、そのドメインをサブドメインに制限する制限を設けています。たとえば、ユーザーがvim特定のファイルに対してコマンドを実行して編集できるようにすると、ユーザーは:!sh[Enter].

于 2012-10-20T23:57:56.360 に答える
15

あなたが探しているものはと呼ばれますRestricted Shell。Bash には、ユーザーがホーム ディレクトリにあるコマンドのみを実行できる (他のディレクトリに移動できない) モードが用意されており、これで十分な場合があります。

少し時代遅れではあるが、このスレッドは非常に説明的であることがわかった。

于 2008-12-31T10:02:13.437 に答える
4

制限付きシェルである「rssh」を取得する必要があります

上記の制限ガイドに従うことができます。それらはすべて自明であり、従うのは簡単です. 「chroot jail」という用語と、sshd/端末構成を効果的に実装する方法などを理解してください。

ほとんどのユーザーは sshd 経由で端末にアクセスするため、SSH 経由で特定の制限を適用するには、SSH デーモン構成ファイルである sshd_conifg も調べる必要があります。ただし、注意してください。何を実装しようとしているのかを正しく理解してください。誤った構成の影響はおそらくかなり悲惨なものになるからです。

于 2008-12-31T21:57:24.880 に答える
1

刑務所の設置を検討することをお勧めします。

于 2008-12-31T21:02:50.373 に答える
0

これを調べる別の方法は、POSIX ACL を使用することです。ファイル システムでサポートされている必要がありますが、Windows で同じ制御を行うのと同じ方法で、Linux ですべてのコマンドをきめ細かく調整できます (より優れた UI は必要ありません)。 )。リンク

もう 1 つ調べる必要があるのはPolicyKitです。

これは現時点で Linux の強みではないため、すべてを機能させるには、かなりの量のグーグル検索を行う必要があります。

于 2008-12-31T22:23:01.727 に答える