web-dev-qa-db-ja.com

プライベートENCFSマウント(プロセス限定アクセス)

ENCFSマウントへのアクセスを制限する方法(a)特定のプロセス(ES)に?

デフォルトでは、ENCFSは現在のユーザーだけに表示されます(_--public_オプションを使用する場合を除く)。

他のユーザーとしてENCFを実行すると、ファイルが他のユーザーが所有するため、おそらく制限的な権限があるため、許可の問題が発生しやすいという欠点があります。許可の問題に対処したくありません。

だから私は同じユーザーによってENCFを実行し、プロセスごとのアクセス制限はe.によって処理されます。制御グループ(CGROUPS)または名前空間。

3
KrisWebDev

以下のソリューションは、 unshare コマンドを介して名前空間を使用します。他のネームスペースのプロセスはマウントは表示されません。

nogroupsグループ権限で実行されているため、unshare -rを使用できません。そのENCFS/FUSEは嫌いではありません。

解決策1(すべての打ち上げで根の権利を求める)

Sudo unshareを使用してバインドマウントを作成し、それを非公開としてマークします。完了したら、ユーザーをsudo呼び出し側(Sudo -u "#$Sudo_UID" -g "#$Sudo_GID")の終わりに根本的な権限を明確に削除します(Sudo -K)。その時点で、encfsを呼び出して、your_program_hereでものをし始めることができます。終了すると、プライベートバインドマウントは親ルートBASHによって削除されます(ユーザーのrootパスワードに対して尋ねることなく、ユーザーのrootパスワードを尋ねることなく)、mount -lを介してrootからもう表示されません。

enc_dir="/path/to/enc_dir"
mount_point="/path/to/plain_dir"
RUN_CMD="mount --bind \"$mount_point\" \"$mount_point\"; \
         mount --make-private \"$mount_point\"; \
         Sudo -u \"#\$Sudo_UID\" -g \"#\$Sudo_GID\" \
             bash -c \"Sudo -K; \
                       encfs \\\"$enc_dir\\\" \\\"$mount_point\\\"; \
                       your_program_here \\\"\\\$@\\\"; \
                       fusermount -u -z \\\"$mount_point\\\" \
                     \" - \"\$@\"; \
        umount \"$mount_point\""
Sudo unshare -m bash -c "$RUN_CMD" - "optional" "arguments"

your_program_hereはあなたが望むものは何でもすることができます。コマンドプロンプトのbashこのプログラム($ 1 = "オプション" $ 2 = "引数")に引数を渡すことができます。

source : スクリプト終了時にsudoedコマンドを起動しますか? Celadaによる回答+ソースを参照してください。ソリューション2.

解決策2(Unshareを使用している場合> = v2.27.1を使用する場合は重要な脆弱性があります)

unshareがrootとして実行されないようにするには、SetUIDビットを使用する必要があります。

Sudo groupadd unshare
Sudo adduser $USER unshare
Sudo chmod u+s /usr/bin/unshare
Sudo chown root:unshare /usr/bin/unshare

警告:最近のUnshareバージョンの脆弱性を誘発しました( v2.27.1 )、Unshare Noとして使用しないでください。コマンドを実行するときにroot権限が低いため、誰でもrootアクセス権がある可能性があります。回避策が存在し、記述されています ここ

それから(おそらく新しい端末が必要です)。

unshare -m

$ root記号ではなく、#ユーザー記号を持つシェルがあるはずです。現在、マウントオプション(以下のソース内の説明)でprivateまたはrprivateを明示的に指定してからENCFSを起動する必要があります。

enc_dir="/path/to/enc_dir"
mount_point="/path/to/plain_dir"
Sudo mount --bind "$mount_point" "$mount_point"
Sudo mount --make-private "$mount_point"
encfs "$enc_dir" "$mount_point"

このシェルから開始されたプロセスはマウントポイントを表示できます。他のプロセスはしません。

source : rootアクセスなしの共有システム内の暗号化フォルダを非表示 Philipp Wendler& プロセスマウント名ごとに取得できない)働くために ub1quit33-___-からの回答

解決策3? (ベスト品種)

さらに探検されています。ソリューション1のスクリプトを.shファイルに入れることでやるべきこと、およびソリューション2のようにsetuid bit +を作成することによって行うことができます。#$Sudo_*ID変数は他のものに置き換えられ、Sudo -Kの有効性を必要とする必要があるかもしれません。テスト済み。

また、ENC_DIRおよびMOUNT_POINT変数は安全に使用されていないため、パラメータ化可能ではありません。それ以外の場合は、エスケープされる必要がある、またはそれ以上のものになる必要があります。これは、非シアの最初のパラメータとして渡される必要があります(したがって、$ @ @ @ {@:2}の範囲で置き換える必要があります)。

またはunshare -rでENCF/FUSEサポートの機能要求を埋めるために、開発者の外観を記入してください...

3
KrisWebDev