web-dev-qa-db-ja.com

隔離/投獄されたSFTPユーザーを作成するにはどうすればよいですか?

サーバーに新しいユーザー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する方法は? などを既に読んでいます。

7
Basj

実用的なソリューション

これはチュートリアル 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を使用できるため、他のユーザーの変更はありません
  • ユーザーfriendsshできません
  • ユーザーfriendsftp経由で接続できます

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/friendChrootDirectory /homeに置き換えるのは役立ちました:

ChrootDirectory:認証後にchroot(2)するディレクトリのパス名を指定します。 パス名のすべてのコンポーネントは、他のユーザーまたはグループが書き込みできないルート所有ディレクトリでなければなりません。

これにより、ユーザーfriendは再びSFTPに接続できます。 /home/から出ることはできません。ただし、/home/anotheruser/...には引き続きアクセスできますが、これは不要です。

3
Basj

使用しているOSはわかりませんが、jailされたSFTPユーザーを構成する必要がある場合は、以下のリンクを使用します。投獄されたSFTPユーザーを設定する方法についての非常に優れたチュートリアルです。

https://access.redhat.com/solutions/2399571

次に、友達にアクセスを許可したいchrootディレクトリにディレクトリをマウントバインドします。

5
Heysus Escobar