アプリケーションがアプリケーション自体からのみアクセスできるファイルを作成できるかどうか疑問に思います。問題は、rootアクセス権がないことです。
たとえば、UserAでアプリケーションを実行している場合は、UserAが実行している他のアプリケーションがこれらのファイルにアクセスできないようにしたいと思います。
答え1
ファイルのアクセス許可を次に設定するか、0600
アプリケーションを実行しているユーザーに設定すると、umask 077
アプリケーションユーザーとのみファイルにアクセスできますroot
。
答え2
以前は、削除されたproc(5)
システムでプロセスがファイルを作成して開くことができ、unlink(2)
有効で開かれた匿名ファイルハンドルを持つことができました。他のプロセスの名前を指定できないため、ファイル名を指定できません。open(2)
同じユーザー(またはルート)が実行する他のプロセスも同じです。
ただし、ほとんどのLinuxシステムは/proc
マウントされているため、名前のないファイルにも名前が保持されるため、/proc/2757/fd/4
同じユーザーが実行している他のプロセスがその名前にアクセスできます。
答え3
私は現在の根を含まずに欲しいものを達成する方法を考えることはできません。したがって、システム管理者に連絡して、アプリケーションの2番目のアカウントを入手してください。
答え4
権限のないプロセスは自分で読み取ることができますが、そのユーザーとして実行されている他のプロセスは読み取れないファイルを作成できません。
証明:プロセスA(権限なし)がファイルを開き、プロセスB(同じユーザーとして実行)もファイルを開こうとします。プロセスBは呼び出すことができます。ptrace
制御プロセス。ptrace
システムコールを使用すると、プロセスBはプロセスA用のUnixソケットを設定し、それを介して開かれたファイル記述子を渡すなど、プロセスA内で任意のコードを実行できます(ファイル記述子の転送は、名前が示すようにUnixデータグラムソケットの機能なので、発信者は次のことができます)。ファイル記述子を受信者に送信すると、受信者は同じモードで同じファイルを開きます。
教授の意図は、ファイルを開いて削除することです。削除されたファイル(技術的にリンクされていないファイル)は通常の方法で開くことはできません。open
引数として渡すことができる名前がないため、どのプロセス(権限のあるプロセスでも)を介してシステムコールを介して開くことはできません。ただし、ファイルを開いたプロセスはファイルを引き続き使用できます。ファイルを開いた最後のプロセスが終了したときにのみ、ファイルは実際に削除されます。他のプロセスはまだptrace
上記の方法を使用してファイルへのハンドルを開くことができます。
その方法に加えて、ptrace
Linuxを含む一部のUnixバリアントには次のものがあります。他のプロセスで開かれたファイルを開く方法/proc
。