クライアントにサーバーへのアクセスを許可したいのですが、それらのユーザーをホームディレクトリに制限したいです。表示したいファイルにバインドマウントします。
bob
というユーザーを作成し、sftponly
という新しいグループに追加しました。 /home/bob
にホームディレクトリがあります。 SSHログインを停止するために、シェルを/bin/false
に変更しました。 /etc/passwd
行は次のとおりです。
bob:x:1001:1002::/home/bob:/bin/false
/etc/ssh/sshd_config
も次のように変更しました:
Match Group sftponly
ChrootDirectory /home/%u
ForceCommand internal-sftp
AllowTcpForwarding no
それらとしてログインしようとすると、次のように表示されます
$ sftp bob@server
bob@server's password:
Write failed: Broken pipe
Couldn't read packet: Connection reset by peer
ChrootDirectory
行をコメントアウトすると、SFTPで入力できますが、サーバーを自由に制御できます。 ChrootDirectory /home
は機能することがわかりましたが、それでもすべてのホームディレクトリにアクセスできます。 ChrootDirectory /home/bob
を明示的に試しましたが、それも機能しません。
何が間違っていますか? bob
を/home/bob/
に制限するにはどうすればよいですか?
----編集-----
わかりましたので、/var/log/auth.log
を見て、これを見ました:
May 9 14:45:48 nj sshd[5074]: pam_unix(sshd:session): session opened for user bob by (uid=0)
May 9 14:45:48 nj sshd[5091]: fatal: bad ownership or modes for chroot directory component "/home/bob/"
May 9 14:45:48 nj sshd[5074]: pam_unix(sshd:session): session closed for user bob
私はそこで何が起こっているのか完全にはわかりませんが、ユーザーディレクトリに何か問題があることを示唆しています。 ls -h /home
出力は次のとおりです。
drwxr-xr-x 26 oli oli 4096 2012-01-19 17:19 oli
drwxr-xr-x 3 bob bob 4096 2012-05-09 14:11 bob
このすべての痛みは、 ここで説明 のようないくつかのセキュリティ問題のおかげです。基本的に、chrootディレクトリはroot
によって所有される必要があり、グループ書き込みアクセスは許可されません。素敵。したがって、本質的にchrootを保持セルに変える必要があり、that内で編集可能なコンテンツを作成できます。
Sudo chown root /home/bob
Sudo chmod go-w /home/bob
Sudo mkdir /home/bob/writable
Sudo chown bob:sftponly /home/bob/writable
Sudo chmod ug+rwX /home/bob/writable
Bam、ログインして/writable
に書き込むことができます。
SFTPディレクトリをchrootするには、以下が必要です
ユーザーを作成し、rootをその所有者にする
cd /home
mkdir john
useradd -d /home/john -M -N -g users john
Sudo chown root:root /home/john
Sudo chmod 755 /home/john
/ etc/ssh/sshd_configのサブシステムの場所を変更します。
#Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp
ファイルの最後にユーザーセクションを作成します(サブシステムの行の後に配置すると、sshが再スポーンして死ぬ可能性があります)。
Match User john
ChrootDirectory /home/john
ForceCommand internal-sftp
AllowTCPForwarding no
X11Forwarding no
私は一日中、ラズベリーでネットワーク共有を取得しようとしました。ユーザーをロックして、ファイルシステム全体をナビゲートできず、sshログインアクセスができないようにし、ネットワーク共有への書き込みアクセスが必要でした。
最初にユーザーを作成しました:
Sudo useradd netdrive
次に、/etc/passwd
を編集し、ユーザー用に/bin/false
があることを確認しました。そのため、行は次のようになりました。
netdrive:x:1001:1004:Net Drive User,,,:/home/netdrive:/bin/false
/etc/ssh/sshd_config
を編集して、以下を含めました。
Match User netdrive
ChrootDirectory /home/netdrive
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
変更されたホームディレクトリの所有者と権限:
Sudo chown root:root /home/netdrive/
Sudo chmod 755 /home/netdrive/
わかりましたので、この後、sshfs
を使用して接続できましたが、読み取り専用モードでした。書き込み可能なフォルダーを取得するために私がしなければならなかったこと:
Sudo mkdir -p /home/netdrive/home/netdrive/
Sudo chown netdrive:netdrive /home/netdrive/home/netdrive/
Sudo chmod 755 /home/netdrive/home/netdrive/
それだけで、それ以上の変更なしで機能しました。私はserに対してのみ書き込み可能な権限を持っていることに注意してください。groupにはオンラインの他の多くのソリューションとは異なります。私は問題なくファイル/フォルダーを作成/削除/編集/名前変更することができました。
Chroot構成のためにnetdriveユーザーでsshfs
を使用してアクセスすると、サーバーの/home/netdrive/
ディレクトリ内に保存されているもののみが表示されます。繰り返される/home/netdrive/home/netdrive/
ディレクトリ構造は、きれいなchroot ssh writableソリューションを実現する上でそれを機能させたものです。
おそらく次の段落を実行しないでください:
上記のソリューション(およびacl(アクセス制御リスト)を使用したネット上の他の多くのソリューション)を確認した後、次の操作が原因でまだ動作しませんでした:
以下がやったNOT私のために働く:
Sudo mkdir /home/netdrive/writable/
Sudo chown netdrive:netdrive /home/netdrive/writable/
Sudo chmod 755 /home/netdrive/writable/
netdriveユーザーは、フォルダを所有し、アクセス許可を持っているにもかかわらず、その/home/netdrive/writable/
ディレクトリに書き込むことができなかったためです。その後、Sudo chmod 775/home/netdrive/writable /を実行しました。ディレクトリを作成して削除できましたが、グループの書き込み可能なアクセス許可なしで作成されていたため、編集できませんでした。ここで私がネットで見たものから人々はそれを修正するためにacl
を使用します。しかし、acl
をインストールし、マウントポイントなどを設定しなければならなかったので、私はそれに満足していませんでした。また、所有するフォルダに書き込むためにgroup許可が必要な理由もわかりません同じユーザーによって。
何らかの理由で/home/netdrive/home/netdrive
を作成し、最後のnetdrive
フォルダーに所有権を与えると、group権限を乱すことなくすべてを機能させることができたようです。