web-dev-qa-db-ja.com

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

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

duplicity /etc sftp://[email protected]//home/backup

これを行う前に、以下を実行してパスワードなしのアクセスを許可する必要があります。

$ ssh-keygen
$ ssh-copy-id [email protected]
$ ssh [email protected]

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

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

また、動的IPアドレスを使用しているため、IPが変更されるたびに「既知のホストが見つからない」問題を解決するにはどうすればよいですか?

11

質問1

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

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

1.-sshdによる制限

この方法では、SSHデーモンsshd内にSFTP機能を設定します。これは、/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のマニュアルページを参照してください。

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

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

上記の#1で概説されているように、/sbin/nologinからchroot機能を使用することを選択した場合、sshd_configの使用も使用できます。 。ただし、#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

参考文献

15
slm

制限付きシェル

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

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

0
rking