回答:
Unixシステムには、ユーザーを「上位」のファイルやディレクトリにアクセスできないファイルシステム階層内のディレクトリにchroot
リセットできるコマンドが用意さ/
れています。
ただし、あなたのケースでは、リモートシェルサービスによって実装された仮想chrootを提供することが適切です。sftpは、ローカルユーザーをファイルシステムの特定のサブセットに制限するように簡単に構成できます。
したがって、あなたのケースでchroot
は、ユーザーfoo
userを/var/www/vhosts/
ディレクトリに入れるとしましょう。
ユーザーがchrootディレクトリを設定して、それらをの/var/www/vhosts/
ようにサブディレクトリに限定することができます/etc/ssh/sshd_config
。
foo
パスワードでユーザーを作成
sudo useradd foo
sudo passwd foo
SFTP専用グループ用に作成
$ sudo groupadd sftp_users
foo
SFTPのみのグループのユーザーに追加する
$ sudo usermod -G sftp_users foo
読み取り/書き込み権限があるため、所有者を変更します
sudo chown root.root /var/www/vhosts/
権限を追加
sudo chmod 755 /var/www/vhosts/
編集する /etc/ssh/sshd_config
sudo vi /etc/ssh/sshd_config
コメントアウトして、以下のような行を追加します
#Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp
最後に追加
Match Group sftp_users
X11Forwarding no
AllowTcpForwarding no
ChrootDirectory /var/www/vhosts/
ForceCommand internal-sftp
(注:Match
ブロックはファイルの終わりにある必要がありsshd_config
ます。)
ssh
サービスを再開
sudo service ssh restart
この構成では、SSHでフォルダーに移動ubuntu
してファイルを取得できます。できないput
かdelete
正しいフォルダでsftpするにはedit /etc/passwd
。ユーザーの行をfoo
このように変更します
$ sudo vi /etc/passwd
..
foo:x:1001:1001::/var/www/vhosts/:
..
これにより、ユーザーのfoo
ホームフォルダーがsftpサーバーフォルダーに変更されます。
Subsystem sftp internal-sftp Match Group sftp ChrootDirectory /var/www/vhosts AllowTcpForwarding no ForceCommand internal-sftp
が、sshを再起動するときにエラーが発生します/etc/ssh/sshd_config line 92: Directive 'UsePAM' is not allowed within a Match block
Match.....
の終わりにセクションを置くことを明確に述べました。そのコードをファイルの最後に置き、再起動します。
Match Group sftp ChrootDirectory /var/www/vhosts AllowTcpForwarding no
はあなたと同じようにIn sshd_config を追加して ユーザーとグループを作成しましたが、ユーザーfoo
はすべてのフォルダに対する権限を持っています:(