このコマンドは、hidepid
ユーザーが表示できないようにするために使用されます。みんなそのプロセスに属していないが特定のプロセスを選択する可能性を提供しないプロセス。ただ隠すことはできますか?一つLinuxマシンでプロセスを進めますか?
答え1
少し汚れて、おそらくよりクリーンなソリューション(SELinuxまたはgrsecを使用)があるかもしれませんが/proc/<pid>
。
たとえば、次のようになります。
mount -o bind /empty/dir /proc/42
一般ユーザはプロセス42を見ることができない。
ただし、取付点を見ることができるので、隠された内容も見ることができます。
サービスに対してこれを行うには、サービスが開始されるたびに初期化スクリプトまたは他の方法を使用してこれを実行する必要があります。
特定のユーザーにのみpidを非表示にするには、名前空間を使用して(おそらく使用pam_namespace
)、ターゲットユーザーの名前空間でのみマウントバインディングを完了できます。
この状況を元に戻すには、次の手順を実行します。
umount /proc/42
答え2
カーネル3.3以降、ユーザーの要件を満たすいくつかの機能を実装しました。
PROC(5)によると:
hidepid=n (since Linux 3.3)
This option controls who can access the information in /proc/[pid] directories.
The argument, n, is one of the following values:
0 Everybody may access all /proc/[pid] directories. This is the traditional be‐
havior, and the default if this mount option is not specified.
1 Users may not access files and subdirectories inside any /proc/[pid] directo‐
ries but their own (the /proc/[pid] directories themselves remain visible).
Sensitive files such as /proc/[pid]/cmdline and /proc/[pid]/status are now
protected against other users. This makes it impossible to learn whether any
user is running a specific program (so long as the program doesn't otherwise
reveal itself by its behavior).
2 As for mode 1, but in addition the /proc/[pid] directories belonging to other
users become invisible. This means that /proc/[pid] entries can no longer be
used to discover the PIDs on the system. This doesn't hide the fact that a
process with a specific PID value exists (it can be learned by other means,
for example, by "kill -0 $PID"), but it hides a process's UID and GID, which
could otherwise be learned by employing stat(2) on a /proc/[pid] directory.
This greatly complicates an attacker's task of gathering information about
running processes (e.g., discovering whether some daemon is running with ele‐
vated privileges, whether another user is running some sensitive program,
whether other users are running any program at all, and so on).
gid=gid (since Linux 3.3)
Specifies the ID of a group whose members are authorized to learn process informa‐
tion otherwise prohibited by hidepid (i.e., users in this group behave as though
/proc was mounted with hidepid=0). This group should be used instead of ap‐
proaches such as putting nonroot users into the sudoers(5) file.
これは/proc/PIDを読むことができる人を選択できるので便利です。
したがって、試してみたい場合は、必要に応じて/ procを再マウントすることを忘れないでください。
--実際のケース:
: su -
Password:
root@foo:~# mount -o remount,hidepid=2 /proc
root@foo:~# exit
logout
:ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
tntx 709 0.0 0.1 33980 8012 tty2 S 18:12 0:00 irssi
tntx 746 0.0 0.0 8868 3880 tty1 S 18:13 0:00 -ksh93
これで、PS(1)またはlsof(8)を介して自分のプロセスに加えて他のプロセスを見ることができません。