そこで、自分のフォルダ内の特定のフォルダにのみアクセスできるユーザーを作成しようとしていますpublic_html
。 ユーザーの作成に成功し、ログインできました。 最初はログインに問題がありました。これは、sftp ユーザーが sftp できるようにするには、フォルダを root が所有している必要があったためです。
そこで私はこのガイドに従いました:https://serverfault.com/questions/584986/bad-ownership-or-modes-for-chroot-directory-component- フォルダーの所有権をルートに変更するように指示します。
これを実行すると、正常にログインできますが、このフォルダはルートによって所有されているため、ログインすると、ファイルを追加したり、このフォルダ内で何も実行したりできなくなります。
グループを作成し、root ユーザーと sftp ユーザーをこのグループのメンバーとして追加してみましたが、それでもうまくいきませんでした。
私の回避策は、root ユーザーを使用して sftp フォルダー内に別のディレクトリを作成し、その後所有権を sftp ユーザーに変更することでしたが、これは私にとってはあまりにもハッキーすぎるように思われ、さらにツリー構造に別のフォルダーが追加されるため、あまり好きではありません。
ルートが所有者のままで、sftp ユーザーにフォルダーへの書き込みアクセスを許可する方法はありますか?
答え1
いくつかの Stack Exchange サイトで、この種のことについて多くの議論が行われています。ただし、これが重複でない場合は...
私の CentOS 7 では、ChrootDirectory を使用してユーザーをディレクトリに制限する場合、そのディレクトリは root が所有する必要があり、権限または FACL によって他のユーザーに書き込みアクセスを許可することはできません。シンボリック リンクを設定することはできますが、ディレクトリに制限されている sftp ユーザーはそのリンクをたどることができません。そのため、これを実行する必要があります。
ユーザーを作成する
useradd ftp_user
パスワードを設定する
passwd ftp_user
権限を設定します。彼のホームディレクトリが彼の監獄になります。
chown root:root /home/ftp_user
chmod 0755 /home/ftp_user
今すぐユーザーをその刑務所に制限する
vi /etc/ssh/sshd_config
これを変える:
#Subsystem sftp /usr/lib/openssh/sftp-server
に
Subsystem sftp internal-sftp
追加
Match User ftp_user
ChrootDirectory %h
ForceCommand internal-sftp
AllowTCPForwarding no
X11Forwarding no
保存してviを終了します。
忘れないで:
systemctl restart sshd
今度は彼らを騙します。あなたのクライアントが /var/www/corny_website で遊ばせ続けるウェブサイトを持っているとします。
そのディレクトリに対する権限があることを確認してください
setfacl -m u:ftp_user:rwx /var/www/corny_website
setfacl -d -m u:ftp_user:rwx /var/www/corny_website
今度は、シンボリックリンクの代わりにマウントします。
mkdir /home/ftp_user/corny_website
mount --bind /var/www/corny_website /home/ftp_user/
これで、ユーザーが sftp を実行すると、パイプ破損エラーは表示されなくなり、/home/ftp_user のみが表示されます。さらに、/corny_website として表示される /var/www/corny_website へのアップロードまたはそこからのダウンロードのみが可能になります。