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


124

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

というユーザーを作成し、bobという新しいグループに追加しましたsftponly。にホームディレクトリがあり/home/bobます。/bin/falseSSHログインを停止するようにシェルを変更しました。以下がその/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

2
私はChrootDirectory /home/%u交換できると信じていますChrootDirectory %h
フランクデルノンクール16年

回答:


120

この痛みはすべて、ここで説明されるようにいくつかのセキュリティ問題のおかげです。基本的に、chrootディレクトリは所有されている必要がrootあり、グループ書き込みアクセスはできません。素敵。だから、基本的に保持セルにあなたのchrootを有効にする必要があり、中にいるあなたは、あなたの編集可能なコンテンツを持つことができます。

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

また、ログインしてログインすることもできます/writable


3
本当にありがとうございます。しかし、2つの問題。1.)書くことはできませんが、ファイルシステム全体を閲覧することはできます。2.)シェルを/ bin / falseに変更すると、SFTPが完全に防止されます。私は何か間違っていますか?
kim3er

1
ありがとうございました!このトピックに関する他の多くの記事はこの詳細を見逃しており、サーバーがssh接続を受け入れられないようにしている場合もあります(EC2を使用している場合、これが唯一の方法です)。
トムハリソンJr

4
kim3er:これは、ユーザーのシェルを/ sbin / nologinに設定する必要があるためです。/bin/falseは、あらゆる種類のアクセスを無効にします。

8
また、chrootフォルダーにつながるすべてのフォルダーはが所有する必要があることに注意してくださいroot。この例で/homeは、rootも所有する必要があります。
シキ

2
14.04には、これが機能Subsystem sftp /usr/lib/openssh/sftp-serverするSubsystem sftp internal-sftp -f AUTH -l VERBOSE前に行を 変更する必要がありました。
一部のこと

57

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
    

3
これはうまくいかないようです。この例では、ユーザーjohn/home/johnディレクトリにロックされています。755ディレクトリへのアクセス許可を付与しました。したがって、所有者にはread(4)、write(2)、execute(1)があり、グループにはread(4)、execute(1)があります。また、所有者とグループをとして設定しているrootためjohn、他に属します。また、彼は読み取り(4 + 1 = 5)を実行しました。johnを書き込み権限のないディレクトリにロックしました。これを修正する方法は?特権を変更する757777、ログインを中断します。グループまたは所有者をjohnに変更すると、ログインも切断されます。
ダニエル

また、次の点にも注意してください。/etc/ssh/sshd_configでは、構成が順番に読み取られます。そのため、一般ユーザーのルールがあり、そのうちの1つを上書きする場合は、ユーザー固有のルールを一番上に配置します。
rwenz3l

他のユーザーのホームフォルダーにあるSFTPディレクトリをchrootしたい。私はでUSERXしている/home/userx/sftproot/uploadsとは/ home / sftpuseでsftpuser。chrootを/home/usex/sftprootroot:rootおよびchmod 755が所有するように設定しました。これ/home/usex/sftproot/uploadsはsftpuser:sftpuserによってchownされます。上記の最初の質問と同じエラーが表示されます。sftpが機能するためには、chrootおよびすべての親フォルダーをroot:rootが所有する必要がありますか?
プリモスローマ

6

私は一日中、ラズベリーでネットワーク共有を取得しようとしました。ユーザーをロックして、ファイルシステム全体をナビゲートできず、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/

それだけで、それ以上の変更なしで機能しました。オンラインでは他の多くのソリューションと同じように、私はグループに対してではなく、ユーザーに対してのみ書き込み可能な権限を持っていることに注意してください。私は問題なくファイル/フォルダーを作成/削除/編集/名前変更することができました。

chroot構成のためにnetdriveユーザーを使用sshfsしてアクセスすると、サーバーのディレクトリ内に保存されているものだけが表示されます。完璧です。繰り返されるディレクトリ構造は、きれいなchroot ssh書き込み可能ソリューションを作成する上でそれを機能させたものです/home/netdrive//home/netdrive/home/netdrive/

次に、私が抱えていた問題を以下に説明します。

次の段落を実行しないでください

上記のソリューション(およびacl(アクセス制御リスト)を使用したネット上の他の多くのソリューション)を調べた後、次の作業を行ったため、まだ動作しませんでした。

以下は私にとってはうまくいきませんでした:

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、マウントポイントなどを設定しなければならなかったので、それには満足していませんでした。また、同じユーザーが所有するフォルダに書き込むためにグループ許可が必要な理由もわかりません。

何らかの理由で/home/netdrive/home/netdrive、最後のnetdriveフォルダの所有権を作成して付与することで、グループのアクセス権を損なうことなくすべてを機能させることができたようです。


1

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

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

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

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

ChrootDirectory %h

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.