В программе я разрабатываю (Linux), мне нужен очень основанный на простом тексте IPC. Это было бы очень просто в использовании стандартный канал ввода/вывода для этого. Я могу положить, что сообщения, отправленные в stdin процесса, не могут быть прочитаны никем? Кроме того, я могу положить, что, если я сохранил канал к его stdout, только я могу считать то, что он производит? Я просто хочу удостовериться, что нет никакого находящегося в procfs приема, который может читать из них.
В моем собственном ограниченном тестировании (выполнял uniq | sort
, затем пытался отслеживать оба конца канала через / proc / XXX / fd
), мне кажется, что я не могу прочитать, что отправляется в канал, но я могу вводить в него данные.
Другими словами, проведите собственное тестирование, чтобы увидеть, что вы можете, а что нет. : -)
Честно говоря, я думаю, это зависит от того, какой уровень безопасности, по вашему мнению, требуется вашему приложению. Я ввожу свой пароль ключа GPG на стандартный ввод. Я всегда задаю вопрос «каков допустимый риск?».
Тем не менее, ничто не защитит ваше приложение от руткита в пространстве ядра. Он может читать не только стандартные терминалы ввода / вывода, но и всю память ваших процессов во время работы. И, вероятно, отмените некоторые меры защиты, которые у вас есть.
Вы можете рассмотреть возможность использования изолированной программной среды SELinux в сочетании с тем, что вы делаете - прочтите об этом на http://danwalsh.livejournal.com/ , если вам действительно нужен такой уровень защиты. libselinux позволяет вам взаимодействовать с ним для проверки наличия защиты и т. д.
Насколько я знаю, нет никаких "трюков", и другие пользователи не могут читать ваш stdin/stdout. Просто помните, что:
Учитывая это, если вы работаете с конфиденциальными данными, посмотрите на mlock.
Здесь нет никаких хитростей, единственное, что я могу придумать в отношении обнаружения перенаправления stdout в другое место, это сделать это как в простой функции C, как показано здесь isredirected
, в остальном бремя ответственности лежит на вас, чтобы убедиться, что сообщения хранятся в безопасности. ...Другое дело, что использование хитрости procfs требует привилегий root для доступа к определенным функциям procfs... так что убедитесь, что вы поставили проверку, чтобы убедиться, что она не запущена от имени root...
int isredirected(void){
if (!isatty(fileno(stdin))) return 1;
return 0;
}
Надеюсь, это поможет, С наилучшими пожеланиями, Том.