私はしたいと思います:
/home/friend
へのSFTPアクセスを友人に与える/home/friend/www/
でApacheを使用してWebホスティングを提供します/etc/
および同様のディレクトリへのアクセスを許可しない(現在解決済み)。また、自分のユーザーの家/home/me
へのアクセスを許可しない(現時点では解決されていない)これをする:
adduser friend
を作成しました
私は彼にApache VirtualHostを追加しました:
<VirtualHost *:80>
ServerName hiswebsite.com
DocumentRoot /home/friend/www
...
</VirtualHost>
およびservice Apache2 restart
。
SFTP/SSHアクセスを「投獄」しました。
PermitRootLogin yes
ChallengeResponseAuthentication no
UsePAM yes
X11Forwarding yes
PrintMotd no
AcceptEnv LANG LC_*
PasswordAuthentication yes
GatewayPorts yes
Subsystem sftp internal-sftp
Match User friend
ChrootDirectory /home/
ForceCommand internal-sftp
およびservice sshd restart
。
問題:
friend
は/home/
から出られなくなりました(これは良いことです)が、/home/me/
そして中のファイルを読んでください!彼に/home/friend/
へのアクセスのみを許可し、他には何を許可しないのですか?次の理由により、これは不可能に思われます。
ChrootDirectory
認証後にchroot(2)するディレクトリのパス名を指定します。 パス名のすべてのコンポーネントは、他のユーザーまたはグループが書き込みできないルート所有ディレクトリである必要があります。
したほうがいい
friend
をグループwww-data
に追加しますか?www-data
をグループfriend
に追加しますか?または別のユーザー/グループ設定?
apacheがファイルを提供できるようにするため、およびPHPに/home/friend/www/
への書き込みアクセス権を与えるには?]彼のWebサイトにファイルアップローダーがあるとします:PHP =このディレクトリに書き込む必要があります。/home/friend
と/home/me
に付与する権限はどれですか?
リンクされたトピック:
このセクションの警告、これは、のみの使用法がWebホスティングである場合にのみ推奨されます。Apacheは、ホームユーザーのフォルダーにアクセスするためのものではありません(他の提案答えの最後にあるほうが適切かもしれません)。
www-data
グループ)には、サービスを使用するすべてのユーザーが必要ですwww
へのアクセス権を持ちながら、お互いのアクセス権を制限する必要があります/home
の下の各ディレクトリにはwww-data:user
権限が必要です chown www-data:me /home/me
[〜#〜]または[〜#〜]
www-data
グループ)には、サービスを使用するすべてのユーザーが必要ですwww
にアクセスできる必要がありますchown me:me /home/me
が必要です/home
をApacheに属させるchown www-data:root /home
同様に、Apacheは必要なwww
ディレクトリにアクセスでき、ユーザーは他のユーザーのフォルダーにアクセスできません。
ここで重要なのは、グループ権限がユーザー間で共有される一方で、Apache自体が他のユーザーに公開されていないユーザーです。たとえば、chown www:me /home/me
me
を他のユーザーから隔離して、Apacheと私にアクセスを許可します(そしてchown me:www /home/me
はグループwwwの全員にme
フォルダへのアクセスを許可します)
ディレクトリwww
は、現在の構成設定www-data
から/home/me
またはwww-data:me
へのApache(/home
ユーザー)に属する場所に存在する必要がありますwww-data:root
は、ユーザーディレクトリ内にwww
を配置するための回避策です。
これが、デフォルトのwww
の場所がホームディレクトリではなく/var
の下にある理由です。これにより、Apacheとユーザーは、Apacheに不要なアクセス権を与えずにwww
にw/rできるようになります。この場合、ユーザーのフォルダ全体へのアクセス)
ホームフォルダーがonlyでwww
(Webの使用)を意味する場合、現在の提案/構成で問題ありませんが、 Webホスティング以外の目的でシステムを使用する。その場合、www
は/home
フォルダではなく、/var
などの別の場所に配置する必要があります。その場合、ChrootDirectory
の使用を削除し、代わりにファイルアクセスがファイルアクセス許可によってのみ管理される従来の構成を使用する必要があります こちらは クラシックユーザー...
セキュリティ、分離、Webホスティングに加えてその他のLinux /サーバーの使用法がユーザーごとに必要な場合は、仮想化および/または進化する異なるソリューションを実装する必要がありますサンドボックス化。
あなたが求めていることを達成するためには他にも多くの可能性がありますが、これはあなたの設定に関して最も速いことに注意してください、より適切な実装については以下のセクション最終的な提案を読んでください。
実装は、対象のセキュリティレベルと対象の使用法によって異なります。したがって、1つの構成が1つの状況に最適であると同時に、別の状況に悪影響を及ぼす可能性があります。
現在の構成は、ChrootDirectory
の代わりに、従来のファイルのアクセス許可、グループ、およびユーザーのアクセスレベルを使用して各sshユーザー間の分離を管理する従来の構成からそれほど離れていません。私はあなたがそれを達成するためにあなたの設定にユーザーアクセスレベルを欠いているだけだと思います。 here 、 here および here を実装する方法の詳細を以下に示します(これに加えてChrootDirectory
を使用すると述べた)適切なセキュリティ対策)
最初にPermitRootLogin yes
を使用しないでください。代わりにme
ユーザーをスーダーに追加してください。ルートはme
ユーザーからSudo su
またはsu
でアクセスできます。
強化されたセキュリティをターゲットにしている場合は、カーネルuser space
機能を使用できます。これにより、各ユーザーが完全に分離されますが、これはまったく別の構成です。これは、ネイティブLinuxツールや、ファイル/ネットワークなどを分離する firejail を使用して実現できます。
また、強化されたセキュリティと同じ範囲で、PasswordAuthentication yes
の代わりに秘密鍵/公開鍵による認証を使用する必要があります
[〜#〜] sshfs [〜#〜] は、ホストされているファイルを区切るための代替手段になる場合もあります。
また、このトピックに関する興味深いリンクもあります。
最後に、あなたの設定に関して私はちょうど提案します
PermitRootLogin
/home
権限を確認してください。/home
ディレクトリではなく、提案された権限を適用しますが、/var/Apache/user1,user2,etc
のような構造を使用します。次にChrootDirectory /var/Apache/
を使用します/home
ディレクトリではなく、推奨される権限を適用していますが、/var/Apache/user1,user2,etc
withoutChrootDirectory
を使用して、ファイルアクセス権で権限を管理します。