web-dev-qa-db-ja.com

AIX 6.1 SFTP:chrootされたユーザーが自宅以外の場所にあるファイルにアクセスできるようにする

長年の最初の投稿で、私は詳細を提供しながら簡潔にしようとしました。

/app/dataの多くのサブディレクトリにあるファイルにアクセスするために、SFTP(WinSCP経由)がすでにいくつかのサービスアカウントで使用されているAIX6.1サーバーで作業しています。

/app/data/bills/app/data/invoicesの2つのサブディレクトリへのアクセスを許可するようにSFTPユーザーアカウントを設定するように求められましたが、他のサブディレクトリやサーバー上の他の場所にアクセスできないようにする必要があります。 /appディレクトリブランチ内の所有者、グループ、または権限を変更することは許可されていません。

このリンクをたどると--- sftp chroot環境を構成する -/sftpjail/sftpuserのホームディレクトリでアカウントを正常に作成し、a)それできない他の方法(SSH、コンソール)を介してログオンし、b)WinSCPを介して接続できできますの内容のみを表示できますそのホームディレクトリ。

  • 私の/etc/ssh/sshd_configセクションは次のとおりです。
Match Group sftpgrp
        ChrootDirectory %h
        ForceCommand internal-sftp
        AllowTcpForwarding no
        PermitTunnel no
        X11Forwarding no
  • /app/dataブランチの下のディレクトリとファイルはすべてappsuserとグループappsgroupによって所有され、権限は775(ug = rwx、o = rx)です。

  • Sftpuserアカウントは、appsgroupグループのメンバーでもあります。

ユーザーのホームディレクトリに/app/data/billsへのシンボリックリンクを作成しましたが、リンクはchrootの外部のディレクトリへのパスであるため、これは機能しないと思います。

/app/data/billsディレクトリをユーザーのホーム内のマウントポイントにマウントしようとしました。

cd /sftpjail/sftpuser
mkdir bills
mount /app/data/bills bills

...この後者のアプローチはいくつかの興味深い結果をもたらしました:

  • WinSCP経由で接続し、billsディレクトリを表示できます。ダブルクリックするとエラーダイアログが表示され、クリアするとディレクトリ内に表示されますが、コンテンツは表示されません。

  • AIXサーバーからsftp sftpuser@localhostを使用した場合、問題なくbillsディレクトリーにナビゲートできますが、コンテンツのlsremote readdir("/bills"): Failureを提供します。メッセージ。
    lsが同じエラーを生成するたびに、/bills/2019および/bills/2019/09サブディレクトリにさらにナビゲートすることができました。
    ただし、一時ファイルを/billsputすると、ファイルが正常にアップロードされただけでなく、アップロードするとlsが許可されるので非常に興味深いものになります。働くために。エラーに戻したい一時ファイルを削除するとすぐに、putファイルが元に戻り、lsが再び機能します。

質問1:chrootホームの外部にあるディレクトリにアクセスできるようにする必要がありますか?アクセスできる場合は、どのようにアクセスできますか?

質問2:必要な結果を達成する別の方法はありますか?サードパーティソフトウェアのインストールを伴わないもの。

ここまでお読みいただき、誠にありがとうございます。

1
Nick Clifton

シンボリックリンクは基本的に別のファイルへの単なるポインタですが、chroot内に存在しないその名前のファイルを検索するため、chroot外の何かを指すことはできません。

mountbindを使用して、jailに必要なディレクトリを再マウントできます。

例えば:

# mount --bind /bin /chroot/bin
# mount --bind /lib /chroot/lib
# chroot /chroot

/etc/fstabに配置する場合、同じ例は次のようになります。

/bin /chroot/bin none bind
/lib /chroot/lib none bind
1
harrymc

@harrymcへのコメントで述べたように、「namefs」マウントタイプで答えを見つけたと思いましたが、SFTPセッションがマウントポイントに移動できるにもかかわらず、「ls」コマンドはそれを空として表示しました(そうではありませんでした) 't)。

私のチームリーダーは非常に賢い人で、ブラウジングを可能にするためにソースディレクトリにドットファイルが必要かもしれないと提案したので、「。do-not-delete」ファイルを作成しました。HeyPresto!、それは機能しました。しかし(これが来ることはわかっていたでしょう)...ユーザーが閲覧する必要のあるすべてのサブディレクトリにドットファイルが必要でした。定期的に新しいサブディレクトリが作成されている場合、実際には持続可能ではありません。

さらにテストを行ったところ、ドットファイルの存在により、予測できない結果が混在していることが判明しました。たとえば、SFTPセッション中に一時ファイルを削除したところ、ディレクトリを参照できなくなったことがわかりました。別のSSHセッションからドットファイルを削除すると、参照機能が復活しました。私は最終的に、ドットファイルの存在または欠如と能力または閲覧できないことのほぼすべての組み合わせを見つけました。

この時点で、OSとSFTPパッケージの古さ、および実行可能なアップグレードパスの欠如と組み合わされた予測不可能な動作のため、これは実行可能なソリューションではなく、このアクセスを要求するチームは戻る必要があると判断されました。製図板に。

「バインド」の提案をしてくれたharrymcと、これを読むのに時間を割いてくれたすべての人に感謝します。

乾杯、

ニック

P.S.これが閉鎖されてうれしいです。

0
Nick Clifton