
これが基本的すぎて私にRTFMを投げたい場合は許してください。ユーザーに同じファイルに対する読み取り権限を付与しながら、特定のファイルをコピーしないようにしたいと思います。会うまでは不可能だと思いました。これSELinux Wikiの例:
allow firefox_t user_home_t : file { read write };
したがって、問題のファイルに0700モードを提供し、SELinuxを使用して、ユーザーが通常ファイルを読み取るために使用するアプリケーションへの読み取りアクセス権のみを付与できるかどうか疑問に思います。
もう一度申し上げますが、あまりにも基本的な話だと申し訳ありません。日程が厳しくて、どういうわけか(可能か不可能でも)、上司にできるだけ早く答えてあげたいのですが、よくわかりません。 SELinuxについては何も知らないので、時間がかかりすぎるかどうかを調べるために直接読むことが心配です。私は読むことに反対しません。それ自体関連文書があればありがとうございます。
基本的に私の質問はSELinuxでこれを行う方法はありますか?それとも、そのような選択肢を追求するのに時間を無駄にしていますか?
PS:読み取りアクセスを許可すると、実際にファイルをコピーしたいユーザーがファイルを読み取るために使用するアプリケーションからそのファイルをコピーして貼り付けることができることがわかります。
編集する
マイユースケースをよりよく説明するには:
- 問題のファイルはテキストファイルとバイナリファイルが混在しています。
- これは独自の商用ソフトウェアで読む必要があります。電子シミュレーションソフトウェア用のシミュレーションモデルです。
- モデル自体は排他的であり、シミュレーションに使用するユーザーが不正使用のために漏洩したくありません。
- ソフトウェアはモデルを読み取り、これらのファイルからいくつかのスクリプトを実行するだけで、その内容はどこにも記録されません。
- 簡単に言えば、エミュレーションソフトウェアがユーザーの読み取りアクセスをブロックしながら、これらのファイルを読み取って実行できるようにしたいと思います。
答え1
cat
上記の意見では、これが問題ではなくシェルリダイレクトであることを覚えておくことが重要だと思います。バイナリまたはテキストファイルのコピーを制限しようとしていますか?バイナリファイルなら、rbashを使っていくつかの問題を解決できると確信しています(参照http://blog.bodhizazen.net/linux/how-to-restrict-access-with-rbash/)。
しかし、テキストファイルの場合、誰かがローカル端末からコピーするのをどのように防ぐことができるのかわかりません。
一般的なSELinuxソリューションがここで役に立つかどうかはわかりません。ファイルを読み取るアプリケーションはどこにデータを書き込むべきですか?そうでない場合は、アプリケーションがファイルを読み取る必要がある場合は、読みたいファイルの読み取り専用アクセスをアプリケーションに付与できますが、書き込みはそのファイルへのアクセスを許可できません。
あなたのユースケースに必要な正確な権限に関する詳細情報が役に立つと思います。あいまいな回答を申し訳ありません。
アップデート - より具体的な回答
SELinuxがなくても欲しいものが手に入ると思います。なぜならこれが処理されるからです(例えば、一般ユーザーがコマンドを介して/etc/shadowでパスワードを変更する場合passwd
)。
- ビジネスソフトウェア用に別々のユーザーおよび/またはグループを作成する(おそらくすでに完了している)
- そのユーザーおよび/またはグループにファイルへの読み取り専用アクセス権を付与します。
- 一般ユーザーがこのファイルにアクセスできないようにしてください。
- 実行可能ファイルをsetuidまたはgetgidにします(グループまたはユーザーを使用するかどうかによって異なります)
chmod g+s
。chmod u+s
- ユーザーがアプリケーションを実行すると、アプリケーションユーザーまたはグループと同じ権限を持つようになり、目的のアプリケーション内の特定のファイルへの読み取りアクセスが許可されます。
アップデート2 - 複数のユーザーとグループ
複数のアプリケーションとグループがある場合に使用できますsudo
。多くの人がrootでコマンドを実行できることを知っていますが、その有用性はこの例よりはるかに優れています。これが理想的な設定かどうかはわかりませんが、これはあなたがやろうとしていることを達成するための1つの方法です。
そのアプリケーションは、すべてのアプリケーションファイルを所有するように作成できますが、その後、各ファイルセットごとに別々のグループを作成できます。ファイル/etc/sudoers
またはその中に含まれるファイルは/etc/sudoers.d/
次のとおりです。
User_Alias FILEGROUP1 = user1, user2
User_Alias FILEGROUP2 = user3, user4
Cmnd_Alias MYEDITOR = /usr/local/bin/myeditor, /usr/local/bin/mycompiler
FILEGROUP1 ALL=(:fileset1) NOPASSWD: MYEDITOR
FILEGROUP2 ALL=(:fileset2) NOPASSWD: MYEDITOR
このグループが所有するファイルへのアクセス権が必要であり、user1
このグループが所有するファイルへのアクセス権が必要です。ユーザーの代わりにグループを使用することもできます。user2
fileset1
user3
user4
fileset2
ユーザーは、エディタの実行や同様の操作でsudo -g fileset1 /usr/local/bin/myeditor
ファイルにアクセスできます。
sudo -g
特にグラフィックアプリケーションのように聞こえるので、ユーザーに必要なコマンドのいくつかのラッパースクリプトを作成するのが役立ちます。
詳細は:
http://www.garron.me/linux/visudo-command-sudoers-file-sudo-default-editor.html
https://serverfault.com/questions/166254/change-primary-group-with-sudo-ug
答え2
これはカニの方法でのみ達成できます。問題は、「copy()」システムコールがないことです。ファイルのコピーは、ソースを読み取り、ターゲットに書き込み/生成することによって行われます。
したがって、唯一の機会は、コピーの作成が許可されていないアプリケーションにこれらのファイルへのアクセスを制限することです。 「コピー禁止」は一般にアプリケーションの設計目標ではないため、評価が難しい場合があります。 Firefoxは明らかにこれには適していません。
ただし、2 つのレベルのソリューションを使用できます。
- Firefoxの書き込みアクセスを特定のディレクトリ(ツリー)に制限します。 / tmpを考えると、これは邪悪になる可能性があります。したがって、設定ディレクトリの場所を指す$ TMPを使用してFirefoxを起動する必要があるかもしれません。
- 他のすべてのアプリケーション(ユーザーがアクセス可能)がこのディレクトリを読み取らないようにします。 (私のAppArmorの観点から)これは、ログインプロセスがすべてのユーザーに対してこれらのディレクトリにアクセスできないように無効にし、Firefoxへのアクセスを許可することを要約します。
より一般的で間接的な方法:どのファイルが作成されたかを確認し、禁止ファイルと比較します。アプリケーションで 2 つのファイルが同時に開いている場合、これは非常に簡単ですが、安全ではないと仮定されます。もちろん、straceを介してすべてを実行しても、システムが速くなるわけではありません。 FAM / fileschangedがファイルシステム全体でどのように拡張されるのかわかりません。この拡張問題(存在する場合)は、すべてのアプリケーション(ファイルマネージャを除く)が単一のディレクトリ(およびその設定ディレクトリ)への書き込みアクセスを許可することを制限し、そのディレクトリ(および/ tmp)にのみFAM検索を必要とする「解決」できます。 。保護されたすべてのファイルに対する各プロセスの読み取りアクセスを記録することで、これらのスキャンを高速化できます。 FAMはこれを行うことはできませんが、AppArmor監査はこれを行うことができます(したがってSELinuxもこれを実行できると思います)。
非常に良い解決策は、書き込み可能なディレクトリに対してFUSEモジュールを使用して(競合状態を防ぐために)チェックを実行することです。