Мой анонимный канал доступен другим процессам

#python #linux #pipe

#python #linux #канал

Вопрос:

согласно этому сообщению в блоге os.pipe используется для создания анонимных каналов.

первая консоль python:

 import os
rfd, wfd = os.pipe()
w = os.fdopen(wfd, 'bw')
w.write(b'1n')  # 2
w.flush()
os.getpid()  # 13134
rfd  # 3
 

вторая консоль python:

 pipe = open('/proc/13134/fd/3', 'rb')
pipe.readline()  # b'1n'
 

https://unix.stackexchange.com/a/156870/227331 также упоминается эта проблема. Как я могу создать канал, который недоступен ни для одного процесса?

Комментарии:

1. В том же ответе также говорится, что любой дескриптор файла доступен через /proc и описывает, почему это не проблема.

2. Только владелец процесса и root могут использовать /proc/*/fd/ , а не «кто угодно».

3. По ссылке The "peeker" must be either running under the same user as the subject or root, so it's not a security problem . Используйте другого пользователя. Кстати, вы можете создать канал, открыть его и удалить, чтобы канал был недоступен. Но дескриптор файла будет доступен из /proc . Вы также можете размонтировать /proc . Запустите процесс в chroot.

4. Но… почему это плохо? Вы не доверяете пользователю компьютера? В любом случае он может делать с компьютером все, что захочет, почему вас волнует, читает ли он из одного fd? Тем не менее wayland doesn't permit running GUIs as other users , запустите два процесса, один для gui и один для fd.

5. Я поддерживаю ваш вопрос, потому что он хорошо написан. Это по существу, с кодом, показывающим, что вы имеете в виду, и вы провели свое исследование. Хотя в ваших комментариях есть немного разглагольствований, которые могут или не могут спровоцировать людей на понижение. Вероятно, вам следует указать область действия в вопросе, а не в комментариях. Если root, Wayland и GUI имеют решающее значение, укажите это в вопросе. Комментарии могут быть трудными для чтения; они упорядочены по голосам, а не по хронологическому принципу. Также лучше объясните, почему вы обеспокоены, если эта /proc запись в любом случае доступна только для владельца и root.