SFTPを使用してパスワードなしのバックアップを制限する


11

Duplicityを使用してサーバーをコンピューターにバックアップする必要があります。

duplicity /etc sftp://backup@my.dynamic.ip.address//home/backup

これを行う前に、次の手順でパスワードなしのアクセスを許可する必要があります。

$ ssh-keygen
$ ssh-copy-id backup@my.dynamic.ip.address
$ ssh backup@my.dynamic.ip.address

私の質問は、生成された公開キーでこのSFTP転送だけにコマンドを制限するにはどうすればよいですか?

command="restrict to sftp",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa AAAA…

また、動的IPアドレスを使用しているので、IPが変更されるたびに、「不明なホストが見つからない」問題をどのようにして克服できますか?



1
「ホストの既知の問題が見つかりません」:StrictHostKeyChecking = noオプションを使用してssh
Marki

@Marki、ありがとう、ssh_configで設定すると機能します。
質問のオーバーフロー2014年

回答:


15

質問1

私の質問は、生成された公開キーでこのSFTP転送だけにコマンドを制限するにはどうすればよいですか?

これを行うには2つの方法があります。

1.-sshdによる制限

この方法では、SSHデーモン内でSFTP機能を設定しますsshd。これは、/etc/ssh/sshd_config構成ファイルを通じて制御されます。注:これによりユーザーが制限backupされ、サーバーへのSFTPのみが許可されます。

# /etc/ssh/sshd_config

Subsystem       sftp    internal-sftp

## You want to put only certain users (i.e users who belongs to sftpusers 
## group) in the chroot jail environment. Add the following lines at the end 
## of /etc/ssh/sshd_config

Match User backup
  ForceCommand internal-sftp

2.-authorized_keysによる制限

この方法では、sshd_configファイルに変更を加える必要はありません。command=質問ですでに述べた機能を使用して、ユーザー+ SSHキーを単一のコマンドに制限できます。秘訣は、どのコマンドを含めるかです。このcommand=行にSFTPサーバーを配置sshd_configできます。これは、ファイルにSFTPサーバーを設定するのと同じ効果があります。

# User backup's $HOME/.ssh/authorized_keys file
command="/usr/libexec/openssh/sftp-server" ssh-dss AAAAC8ghi9ldw== backup@host

注:ユーザーがへの書き込みアクセス権を持っている場合、ユーザーは ~/.ssh/authorized_keysそれを読み取りまたは変更できます。たとえば、それをダウンロードして編集し、を削除して再アップロードしてcommmand=...、シェルを含む自由なコマンドアクセスを許可することができます。ユーザーがへの書き込みアクセス権を持っている場合は~/.ssh、ファイルのリンクを解除して再作成するかchmod、書き込みアクセス権を付与することもできます。次のよう~/.ssh/authorized_keysに、ユーザーが書き込みできない場所にファイルを配置するなど、考えられる解決策は多数あります。

Match Group sftponly
    AuthorizedKeysFile      /etc/ssh/authorized_keys/%u

質問2

また、動的IPアドレスを使用しているので、IPが変更されるたびに、「不明なホストが見つからない」問題をどのようにして克服できますか?

これはトリッキーですがfrom=authorized_keysファイル内の機能を使用しても実行できます。ここでは、ホストからのアクセスのみを制限していますsomehost.dyndns.org

from = "somehost.dyndns.org"、command = "/ usr / libexec / openssh / sftp-server"、no-port-forwarding、no-X11-forwarding、no-agent-forwarding、no-pty ssh-dss AAAAC8ghi9ldw == backup @ host

command=SSH鍵の使用がさらに制限されるため、の後の追加設定も同様に重要です。

機能の内訳

  • from='hostname1,hostname2,'' -指定されたIPまたはホスト名パターンからのアクセスを制限します
  • command='command' -認証後に指定されたコマンドを実行します
  • no-pty -ptyを割り当てません(インタラクティブログインを許可しません)
  • no-port-forwarding -ポート転送を許可しません
  • no-X11-forwarding -ユーザーはディスプレイX11 GUIを削除できません
  • no-agent-forwarding -ユーザーはこのホストを介して他の内部ホストに転送できません

「不明なホストが見つからない」というメッセージを取り除くには、クライアントが接続するときに、次のようにこのSSHオプションをクライアントに追加します。

$ ssh -o StrictHostKeyChecking=no ....

ssh_configこのスイッチの詳細については、manページを参照してください。

ユーザーのシェルを制限する

上記の両方の解決策backupでは、/etc/passwdファイル内のこのユーザーのシェルも制限することにより、ユーザーをロックダウンする必要があります。通常はに設定しますがscponly、これには他の選択肢もあります。これを行う方法については、このU&L Q&Aというタイトルの「SCP用のシェルが必要ですか?」を参照してください。

使用/sbin/nologinあなたからのchroot機能を使用することを選ぶ場合は缶も使用することsshd_configに概説されているよう#1上記の。ただし、#2で概説されている方法を使用することを選択した場合はscponly、でユーザーのシェルに何かを使用する必要があります/etc/passwd


ボーナス-上記#2の拡張

このユーザーに一連のコマンドを公開する必要がある場合は、これも実行できます。次のようなスクリプトを作成します/home/backup/commands.sh

#!/bin/sh

case $SSH_ORIGINAL_COMMAND in
  "diskspace")
    df -h
    ;;
  "dirlist")
    ls -1
    ;;
  "apache_restart")
    /etc/init.d/apache restart
    ;;
  *)
    echo "Unknown command"
esac

次に、次のauthorized_keysようにファイルを設定します。

command="/bin/sh /home/user/commands.sh" ssh-dss AAAAC8ghi9ldw== user@host

backupその後、ユーザはそのような、これらのコマンドを実行することができます:

# diskspace
$ ssh -q user@remote_host diskspace
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/dev-root   39G  2.2G   35G   6% /

# dirlist
$ ssh -q remote_host dirlist
commands.sh
dump.sql

参照資料


ユーザーがアクセスできるコマンドに注意してください。そうしないと、ユーザーは完全なシェルを取得できる場合があります。例として、vimへのアクセスを誰かに与えると、それらは簡単に:!/ bin / bashまたは:!/ bin / someotherprogramになります。
2014年

@rking-はい、言うまでもありません...
slm

そのような詳細な答えをくれてありがとう。コマンド制限は完全に機能します。しかし、2つの問題があります。1)動的IPはサーバーではなく私のコンピューターを指します。authorized_keysファイルの「from」フィールドのホスト名は、サーバーが私のコンピューターにアクセスできるアドレスのみを制限し、コンピューターの「不明なホストが見つからない」問題を解決するために何もしません。2)で私のコンピューターのバックアップユーザーのシェルログインを無効に/sbin/nologinすると、サーバーがSFTPでコンピューターにアクセスできなくなります。これを試しました。
質問のオーバーフロー2014年

1
混乱させて申し訳ありません。コンピューターSへのバックエンドSFTP接続を行うと、サーバーSがクライアントになります。バックアップを実行するサーバーSがssh known_hostsファイルにリストされていない場所に接続するたびに、「不明なホストが見つかりません」という問題が発生します。マルキは彼のコメントで正しい解決策を提供しました。fromで、パラメータauthorized_keys私のコンピュータのC上のファイルは、SがCに接続できる場所に制限
質問オーバーフロー

はい、編集してください。ちなみに、証明書で指定したのではなく、/sbin/nologinforceコマンドを使用した場合に機能することを理解しています。これらは2つの異なるサブシステムだと思います。そして、前者のchrootディレクトリを作成するほうがはるかに簡単です。internal-sftp/usr/libexec/openssh/sftp-server
質問のオーバーフロー2014年

0

制限付きシェル

scponlyrsshなどの制限付きシェルを割り当てる必要があります。

scpまたはsftpを使用すると、ssh経由でリモートサイトに接続し、リモートシェルがscp proccessまたはsftpプロセスを実行します。必要なのは、scpまたはsftpのみがログインをロックダウンできるようにする制限付きシェルです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.