web-dev-qa-db-ja.com

sshd_configでユーザーホームを指定するにはどうすればよいですか?

Sftpユーザーを/ var/wwwにchrootしてもらい、それらを自動的にディレクトリに移動させたいと思います。私は私を大いに助けたこの答えを見つけました: Chroot SFTP-ユーザーが現在の(chroot)ディレクトリに書き込むことを許可することが可能です 。しかし、代わりに(var/wwwのサブディレクトリである)ユーザーをホームディレクトリ(=/=ユーザーの名前)に移動したいと思います。私は試した:

Match Group sftpusers
  X11Forwarding no
  AllowTcpForwarding no
  ChrootDirectory /var/www
  ForceCommand internal-sftp -d %h

しかし、私はfatal: percent_expand: unknown key %h [postauth]

編集:%dはユーザーディレクトリですが、/ var/wwwに基づいて検索しているため、機能していないようです。

1
leonheess

私が理解しているように、あなたが直面している問題は、chrootが配置された後にinternal-sftp呼び出しが発生しているため、%h(および試行された%d)がchroot内で展開されていることです。ユーザーが/var/www/$USERNAMEに住んでいる場合でも、%dを使用すると、当然、internal-sftpに/var/www/var/www/$USERNAMEが不足するように指示されます。

%uはこの問題を回避する必要があります:

Match Group sftpusers
  X11Forwarding no
  AllowTcpForwarding no
  ChrootDirectory /var/www
  ForceCommand internal-sftp -d /%u

したがって、internal-sftpに/$USERNAMEというディレクトリが不足するように指示します。この呼び出しはchrootが確立された後に発生するため、chrootの外部の/var/www/$USERNAMEを逆参照する必要があります。

コメントで説明されているように、ユーザー名とホームディレクトリ名は異なるため、回避策は上記の構成を使用してから、ユーザーごとに/ var/www/USERNAMEを作成し、マウント/ var/www/USERNAMEを/ var /にバインドすることです。 www/CURRENT_HOMEDIR_NAME、次のように:mkdir /var/www/USERNAME; mount -o bind /var/www/USERNAME /var/www/CURRENT_HOMEDIR_NAME

これで、ユーザー名ごとに/ var/wwwの下に2つのディレクトリができますが、一方はもう一方を指すだけです。internal-sftpは期待どおりに機能し、ホームディレクトリに/ var/www/CURRENT_NAMEとしてアクセスする必要があります。壊れません。

3
Omar Buhidma