LINUX.ORG.RU

/dev/tty + su - странное поведение.

 , , ,


0

2

Возился я с установщиком Laravel на Debian 8, да приметил одну интересную вещь:

su -c "php testTTY.php" - laravel.test
PHP Warning:  proc_open(/dev/tty): failed to open stream: No such device or address
Warning: proc_open(/dev/tty): failed to open stream: No such device or address

а вот если именно залогиниться в пользователя, и выполнить скрипт, этот бедный /dev/tty отвечает нормально, и в него можно писать.

Эта проблема в их эксепшене выглядит вот так:

TTY mode requires /dev/tty to be read/writable.

и нигде никто не ответил о самой причине такого поведения. Так же, такая же проблема возникает у кого-то на каком-то гитлабе с какой-то фигнёй для тестирования.

Чтобы сделать историю короче:

su -c "echo 1 > /dev/tty" - not_root_user
-su: /dev/tty: No such device or address

почему так?



Последнее исправление: alexmaru (всего исправлений: 1)

В Debian 8 systemd, поэтому тут нужен комментарий кого-нибудь более в теме, например intelfx.

Но в общем случае это и не должно работать - у многих пользователей(особенно системных) в качестве shell-а проставлен /sbin/nologin а то и вовсе /bin/false, так что многие команды, рассчитывающие на нормальный шелл могут быть мягко говоря в недоумении.

Попробуй сначала

su -s /bin/bash -c "echo 1 > /dev/tty" - not_root_user

Или даже просто

su -s /bin/bash - non_root_user

И уже из шелла исследую куда у тебя нет прав на запись и почему

Pinkbyte ★★★★★
()
Ответ на: комментарий от Pinkbyte

Ну собственно, я это и дописал в дополнении.

su -s /bin/bash - non_root_user
$ echo 1 > /dev/tty
1

и всё хорошо, поэтому я даже не знаю, куда тут смотреть, потому что всё хорошо.

su -s /bin/bash -c "echo 1 > /dev/tty" - non_root_user
-su: /dev/tty: No such device or address

сам шелл я указываю, при создании юзера, bash.

alexmaru
() автор топика
Ответ на: комментарий от alexmaru

Так, это я знатно протупил. man su как бы намекает:

-c, --command КОМАНДА
           Указать команду, которая будет запущена оболочкой в виде параметра для -c.

           Запускаемая программа не будет иметь управляющего терминала. Этот параметр не может быть использован для запуска интерактивных программ, которым требуется управляющий TTY.

Pinkbyte ★★★★★
()
Ответ на: комментарий от Pinkbyte

ох же... это неожиданное исключение.

alexmaru
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.