@qid00000000
Мало что знаю, но информацию найду в гугле

Перенаправить поток вывода одного процесса в другой?

Ситуация, есть 2 активных сессии ssh под разными пользователями на удаленном сервере. На одной из сессий, висит приложение, ожидающее ввод данных.

Требуется, в вывод приложения с ожидающей программой перенаправить вывод приложения, запущенного из-под другой сессии под другим пользователем без доступа к root.

Возможно ли это реализовать?

П.с. можно сделать что-то подобное:
echo 123 > /proc/$PID/fd/1
Но в этой ситуации так сделать нельзя, т.к. fd принадлежит root с правами rw- --- ---

П.С.2 доступа к root нету.

П.С.3 (обоснование важности) совсем не важно, но очень интересно так сделать :))
  • Вопрос задан
  • 139 просмотров
Решения вопроса 1
saboteur_kiev
@saboteur_kiev Куратор тега Linux
software engineer
создайте пайп
mkpipe /tmp/mypipe

от одного юзера сделайте
read</tmp/mypipe

от другого паралельно
echo "hello" > /tmp/mypipe

p.s. Магия write в том, что write запускается от имени root с группой tty (потому что SETUID права на файле), поэтому он и может писать в чужие процессы. Чтобы писать через write, юзер должен быть в группе tty
Можете написать свою программу, сделать ее через SETUID от рута и делать что хотите.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
Хм ну заверните все в netcat
Ответ написан
@pfg21
ex-турист
вариант1, требуется доступ к root для того чтобы внести изменения в sudo
сделать скрипт с содержимым, к примеру
echo $1 > /proc/$2/fd/1
прописать его в sudo на беспарольный запуск (как это делается правильно лучше загуглить и прочитать)
%user% ALL=NOPASSWD:/path/to/script.sh
после чего запускать
$ sudo /path/to/script.sh 123 $PID
и sudo это скрипт будет выполнять от рута без запроса пароля.
а уж что послать и номер пида передаешь в скрипт через параметры.

вариант2:
создать именованный канал (fifo), подключить на прослушивание к нему прогамму в которую надо послать данные (пусть будет прога1). прога загрузится и будет ожидать поступления данных.
вывод проги2 направить в этот fifo. после отработки проги2 fifo закроется и прога1 закончит свою работу.
работает в пределах одной машины.
Ответ написан
@qid00000000 Автор вопроса
Мало что знаю, но информацию найду в гугле
Пока сделал таким образом: write $USER $PTS

Единственный минус, пишет, от кого пришло сообщение, чего не хотелось бы :(

Возможно, кто раскроет магию работы write?

(strace на системе отсутствует, буду благодарен даже за исходный код самой write)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы