長年の最初の投稿で、私は詳細を提供しながら簡潔にしようとしました。
/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
ディレクトリーにナビゲートできますが、コンテンツのls
はremote readdir("/bills"): Failure
を提供します。メッセージ。ls
が同じエラーを生成するたびに、/bills/2019
および/bills/2019/09
サブディレクトリにさらにナビゲートすることができました。
ただし、一時ファイルを/bills
にput
すると、ファイルが正常にアップロードされただけでなく、アップロードするとls
が許可されるので非常に興味深いものになります。働くために。エラーに戻したい一時ファイルを削除するとすぐに、put
ファイルが元に戻り、ls
が再び機能します。
質問1:chrootホームの外部にあるディレクトリにアクセスできるようにする必要がありますか?アクセスできる場合は、どのようにアクセスできますか?
質問2:必要な結果を達成する別の方法はありますか?サードパーティソフトウェアのインストールを伴わないもの。
ここまでお読みいただき、誠にありがとうございます。
シンボリックリンクは基本的に別のファイルへの単なるポインタですが、chroot内に存在しないその名前のファイルを検索するため、chroot外の何かを指すことはできません。
mount
とbind
を使用して、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
@harrymcへのコメントで述べたように、「namefs」マウントタイプで答えを見つけたと思いましたが、SFTPセッションがマウントポイントに移動できるにもかかわらず、「ls」コマンドはそれを空として表示しました(そうではありませんでした) 't)。
私のチームリーダーは非常に賢い人で、ブラウジングを可能にするためにソースディレクトリにドットファイルが必要かもしれないと提案したので、「。do-not-delete」ファイルを作成しました。HeyPresto!、それは機能しました。しかし(これが来ることはわかっていたでしょう)...ユーザーが閲覧する必要のあるすべてのサブディレクトリにドットファイルが必要でした。定期的に新しいサブディレクトリが作成されている場合、実際には持続可能ではありません。
さらにテストを行ったところ、ドットファイルの存在により、予測できない結果が混在していることが判明しました。たとえば、SFTPセッション中に一時ファイルを削除したところ、ディレクトリを参照できなくなったことがわかりました。別のSSHセッションからドットファイルを削除すると、参照機能が復活しました。私は最終的に、ドットファイルの存在または欠如と能力または閲覧できないことのほぼすべての組み合わせを見つけました。
この時点で、OSとSFTPパッケージの古さ、および実行可能なアップグレードパスの欠如と組み合わされた予測不可能な動作のため、これは実行可能なソリューションではなく、このアクセスを要求するチームは戻る必要があると判断されました。製図板に。
「バインド」の提案をしてくれたharrymcと、これを読むのに時間を割いてくれたすべての人に感謝します。
乾杯、
ニック
P.S.これが閉鎖されてうれしいです。