回答:
Unixシステムには、ユーザーを「上位」のファイルやディレクトリにアクセスできないファイルシステム階層内のディレクトリにchrootリセットできるコマンドが用意さ/れています。
ただし、あなたのケースでは、リモートシェルサービスによって実装された仮想chrootを提供することが適切です。sftpは、ローカルユーザーをファイルシステムの特定のサブセットに制限するように簡単に構成できます。
したがって、あなたのケースでchrootは、ユーザーfoouserを/var/www/vhosts/ディレクトリに入れるとしましょう。
ユーザーがchrootディレクトリを設定して、それらをの/var/www/vhosts/ようにサブディレクトリに限定することができます/etc/ssh/sshd_config。
fooパスワードでユーザーを作成
sudo useradd foo
sudo passwd foo
SFTP専用グループ用に作成
$ sudo groupadd sftp_users
fooSFTPのみのグループのユーザーに追加する
$ 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はすべてのフォルダに対する権限を持っています:(