web-dev-qa-db-ja.com

sftpのみのSSHユーザーを自宅にchrootするにはどうすればよいですか?

クライアントにサーバーへのアクセスを許可したいのですが、それらのユーザーをホームディレクトリに制限したいです。表示したいファイルにバインドマウントします。

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
123
Oli

このすべての痛みは、 ここで説明 のようないくつかのセキュリティ問題のおかげです。基本的に、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に書き込むことができます。

118
Oli

SFTPディレクトリをchrootするには、以下が必要です

  1. ユーザーを作成し、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
    
  2. / 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
    
56
josircg

私は一日中、ラズベリーでネットワーク共有を取得しようとしました。ユーザーをロックして、ファイルシステム全体をナビゲートできず、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権限を乱すことなくすべてを機能させることができたようです。

6
mihai.ile

this の記事に従いましたが、うまくいきませんでした。この変更を行った後、動作し始めました(上記の回答で示唆されています):

#Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp

さらに、上記で説明したように、ユーザーが書き込み可能なサブディレクトリの下にルート所有可能ホームディレクトリを作成しました。

この回答で追加したい新しい便利なことは、ユーザーのホームディレクトリとして%hを指定するだけで構成を簡素化できることです。

ChrootDirectory %h

this リンクのおかげで発見しました。

1
user109764