web-dev-qa-db-ja.com

SELinuxの問題除外に必要なフルパス:net:[4026532292]

次のコマンドを使用してディレクトリにsambaコンテキストを設定しようとしていますが、このエラーの原因がわかりませんが、ディレクトリにコンテキストを設定できません。

semanage fcontext -a -t samba_share_t "/common(/.*)?"

エラー次のようにスローされます。

除外に必要なフルパス:net:[4026532292]。

3
Sagar

質問されてから1年以上経ちますが、オンラインで答えが見つかりませんでした。次の人のためにそれを修正しましょう。 :)

これらのエラーは、マシン上に何かがネットワーク名前空間を作成したために発生します。 mountの出力を見ると、どこかに(おそらく/ runまたは/ var/runの下に)その番号でマウントされたprocファイルシステムタイプがあります。ただし、restorecon(およびsemanage)のように_/proc/mounts_を見ると、マウントポイントとして「net:[xxx]」が付いた同じファイルシステムが表示されます。残念ながら、restorecon/semanageはそれに対処する方法を知りません。 _/_で始まらないパスが表示され、エラーが発生します。

なぜそれをするのですか? restorecon source をチェックアウトすると、restoreconが、seclabelマウントオプションが設定されていないマウントポイントの除外エントリを自動的に追加することがわかります。同じことがおそらくセマネージにも当てはまります。 seclabelオプションはSELinuxで管理する必要があると思います。これは、ファイルシステムがxattrsを使用してSELinux属性を格納していることを示しています。そのため、これらのファイルシステムは除外されています。ファイルシステムがSELinuxコンテキストをサポートしていない場合、ファイルにコンテキストを設定しようとしても意味がありません。

すごい。どのように修正しますか? selinux_restorecon() syscallには、そのチェックを気にしないように指示するフラグ--SELINUX_RESTORECON_IGNORE_MOUNTS--が含まれていますが、restoreconまたはsemanageプログラムに同じことを行うように指示する方法はないようです。したがって、1つのオプションは、マウントラベルを無視するフラグを使用してそのsyscallを作成する独自のrestoreconプログラムを作成することです。それは苦痛です。 :)私が好むより簡単なオプションは、マウントコンテキストを使用して、おそらくトラバースする必要がないマウントポイントを非表示にすることです。コンテキストは問題を引き起こすので、コンテキストでも修正してみませんか?

_Sudo unshare -m sh
umount $( mount | awk '$3~/netns/{print $3}' )
restorecon -rv /some/file
exit
_

_unshare -m_を使用して新しいマウント名前空間を作成し、その名前空間でsh(ここでお気に入りのシェルを選択)を実行します。次に、問題のあるファイルシステムをアンマウントします。私のDockerの場合、これを行うと、ファイルシステムにはすべてnetnsが含まれます(そして、その文字列を含むファイルシステムはありません)。他の誰かが別の方法で見つけてマウントを解除する必要があるかもしれませんが、考え方は同じです。 _unshare -m_はデフォルトでプライベートマウント名前空間に設定されているため、アンマウントはシステム上の他の何にも影響を与えません。基本的に、マウントをこのプロセスから隠します。その時点で、これらのファイルシステムが表示されないシェルがあります。したがって、restoreconが_/proc/self/mounts_を検査するとき(技術的には_/proc/mounts_を開きますが、下位互換性のために、マウント名前空間をサポートするシステムでは_/proc/self/mounts_へのリンクです)、シェルから継承する名前空間にあります。問題なく実行できます。

これを頻繁に実行している場合は、umountとrestoreconをシェルスクリプトに入れて、シェルを起動する代わりに、restoreconでそれを実行することはおそらく意味があります。

1
dannysauer

表示されるエラーは、/commonディレクトリにsamba_share_tコンテキストを適用したことが原因ではありません。それでもrestorecon -R /commonを試すことができ、selinuxコンテキストが実際に変更されていることを確認してください。エラーは以前の構成に起因すると考えています。

0
JohnKoch