サーバーに新しいユーザーfriend
を作成しました。目標は、私の友人にSFTPアクセスを許可して、彼が自分のWebサイトをホストできるようにすることです。
ユーザーfriend
を使用してサーバーをSFTPで接続する場合、デフォルトのフォルダーは/home/friend/
ですが、/home/friend/
および/home/anotheruser/website2/config.php
!など、サーバーの読み取りアクセスですべてのファイルにアクセスします。これは欲しくない。
このユーザーを「投獄/分離モード」にするように言われたので、デフォルトの最後にsshd_config
:
...
Subsystem sftp /usr/lib/openssh/sftp-server
...私はこれを追加しました:
Match User friend
ChrootDirectory /home/friend
ForceCommand internal-sftp
そしてservice sshd restart
をしました。
次に、ユーザーfriend
とSFTPでサーバーに接続できなくなりました。また、Subsystem ...
をSubsystem sftp internal-sftp
に置き換えてみましたが、結果は同じでした:friend
は、SFTP経由でサーバーに接続できなくなりました。
質問:
ユーザーfriend
を隔離してSFTP/SSH経由で自宅から出られないようにする方法/home/friend/
?
注: chroot Jailを使用してSFTPユーザーをホームディレクトリに制限する方法 、 sftpのみのSSHユーザーを自宅にchrootする方法は? などを既に読んでいます。
これはチュートリアル sshキーで制限されたchrootユーザーでsftpサーバーを構成する方法 に触発されて@HeysusEscobarの回答に記載されています。
これをroot
から行います。
useradd friend # NB: this doesn't create a home dir, see https://askubuntu.com/q/374870
passwd friend # set the password
groupadd sftpusers
mkdir /sftp
mkdir /sftp/friend # this is where he'll be chrooted
mkdir /sftp/friend/home # his home directory
mkdir /sftp/friend/www # for websites
usermod -aG sftpusers friend # aG for append group
chown friend:sftpusers /sftp/friend/home/
chown friend:sftpusers /sftp/friend/www/
usermod -d /sftp/friend/home friend # set as his home directory
これを/etc/ssh/sshd_config
に追加:
# Subsystem sftp /usr/lib/openssh/sftp-server # you'll probably need to comment this line
Subsystem sftp internal-sftp -d /home
Match Group sftpusers
ChrootDirectory /sftp/%u
service sshd restart
を実行します。それで全部です!
ご了承ください:
ssh
を使用できるため、他のユーザーの変更はありませんfriend
はssh
できませんfriend
はsftp
経由で接続できますPS:friend
のウェブサイトをインターネットで利用できるようにしたい場合は、Apache設定に追加できます。
<VirtualHost *:80>
ServerName friend.example.com
DocumentRoot /sftp/friend/www
php_admin_value "open_basedir" "/sftp/friend"
<Directory />
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
サイトノート:上記のopen_basedir
を使用しても、friend
でPHP)を使用してchrooted-environmentから抜け出すことや、ファイルシステム全体に影響を与える悪意のあるコードを実行することはできませんか?リンクされた質問: chrootされた/分離されたSFTPユーザーは、PHPを使用してファイルシステム全体にアクセスできます
ドキュメントによると、ChrootDirectory /home/friend
をChrootDirectory /home
に置き換えるのは役立ちました:
ChrootDirectory:認証後にchroot(2)するディレクトリのパス名を指定します。 パス名のすべてのコンポーネントは、他のユーザーまたはグループが書き込みできないルート所有ディレクトリでなければなりません。
これにより、ユーザーfriend
は再びSFTPに接続できます。 /home/
から出ることはできません。ただし、/home/anotheruser/...
には引き続きアクセスできますが、これは不要です。
使用しているOSはわかりませんが、jailされたSFTPユーザーを構成する必要がある場合は、以下のリンクを使用します。投獄されたSFTPユーザーを設定する方法についての非常に優れたチュートリアルです。
https://access.redhat.com/solutions/2399571
次に、友達にアクセスを許可したいchrootディレクトリにディレクトリをマウントバインドします。