質問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
参照資料