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

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

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

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

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

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

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

П.С.3 (обоснование важности) совсем не важно, но очень интересно так сделать :))
  • Вопрос задан
  • 164 просмотра
Подписаться 1 Средний Комментировать
Решения вопроса 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)
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы