Назад | Перейти на главную страницу

«Невозможно установить группу процессов терминала» во время su другому пользователю в качестве оболочки входа

Примечание: пожалуйста, прочтите обновленную информацию, начинающуюся с "EDIT" около середины этого сообщения - среда и предыстория этой проблемы изменились.

У меня есть стандартная установка Debian 6.0, которую я решил перенести в репозитории Debian Testing. Я сделал это, заменив ссылки на репозитории Squeeze в моем sources.list, чтобы вместо этого использовать репозитории Testing.

После установки пакета и перезагрузки я получаю следующую ошибку при попытке su - другому пользователю:

root@skaia:~# su joebloggs -
bash: cannot set terminal process group (-1): Inappropriate ioctl for device
bash: no job control in this shell

Если я опущу -, этого не произойдет.

Обратите внимание, что пользователи могут стать пользователем root правильно, это происходит только при переключении с root на кого-то еще и использовании - для получения среды этого пользователя.

Google здесь в основном бесполезен. Единственное, что я могу найти, это ссылки с 2011 года в отношении sux пакет, которые, похоже, были исправлены за это время.

Это выглядит и пахнет очень похоже на ошибку обновления, которую можно исправить, настроив правильный пакет правильным образом. Я просто не знаю, с чего начать - кроме этого, моя система работает полностью нормально и, как и ожидалось.

РЕДАКТИРОВАТЬ

Сейчас это происходит со мной на Debian стабильный машина как описано выше. На этот раз никаких обновлений или чего-то еще, просто стабильно.

Ага, год спустя. До сих пор не знаю, в чем проблема.

Вот как это выглядит сейчас (мало что изменилось):

bash: cannot set terminal process group (-1): Inappropriate ioctl for device
bash: no job control in this shell
terraria@skaianet:~$ tty
/dev/pts/0
terraria@skaianet:~$ ls -l /dev/pts/0
crw--w---- 1 root root 136, 0 Oct 10 19:21 /dev/pts/0
terraria@skaianet:~$ ls -l /dev/pts/
crw--w---- 1 root root 136, 0 Oct 10 19:21 0
crw--w---- 1 root root 136, 2 Sep 22 17:47 2
crw--w---- 1 root root 136, 3 Sep 26 19:30 3
c--------- 1 root root   5, 2 Sep  7 10:50 ptmx

Strace сгенерирован так:

root@skaianet:~$ strace -f -o tracelog su terraria -

..также проявляется некое сбивающее с толку поведение. Эти сообщения довольно сбивают с толку. Некоторые избранные строки:

readlink("/proc/self/fd/0", "/dev/pts/0", 4095) = 10
#Error code 10? 
15503 open("/dev/tty", O_RDWR|O_NONBLOCK) = -1 ENXIO (No such device or address)
#Yes there is, and I can interact with it normally
15503 ioctl(255, TIOCGPGRP, [32561])    = -1 ENOTTY (Inappropriate ioctl for device)

Я связал полный вывод этого сеанса strace - все, что я сделал, это запустил команду su, а затем сразу же ctrl + d из терминала.

  • su - username интерпретируется вашим su означать "беги" имя пользователяоболочка как интерактивная оболочка входа "
  • su username - интерпретируется вашим su означать "выполнить следующее не интерактивный команда (-) так как имя пользователя"
  • последний работал только потому, что:
    • ваш su передает конечные аргументы sh для разбора
    • sh берет - чтобы означать "запускать как оболочку входа в систему (прочтите /etc/profile, ...) "

Но что вас действительно интересует: почему не интерактивный? Совместное использование управляющего терминала между привилегированным родителем и непривилегированным потомком делает вас уязвимым для "Повышение привилегий отклика TTY", иначе TIOCSTI ошибка, так что если она вам действительно не нужна su отделяется от него. Когда вы использовали su username - форма su сделал вывод, что вам не нужен управляющий терминал.

Только процессы с управляющим терминалом могут иметь руководителей сеансов, которые манипулируют группами процессов (выполняют управление заданиями); ваш след bash обнаруживая, что он не может быть лидером сеанса.

Вы упоминаете:

Странно то, что обе формы отлично работают в Ubuntu и CentOS 6, однако в ванильном Debian только первая форма работает без ошибок.

Игнорирование вариантов вроде sux и sudo, есть как минимум три[1] версии su в Linux: coreutils, util-linux и shadow-utils откуда происходит Debian. На странице руководства последнего указано:

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

а у Debian есть флаг old_debian_behavior; другие версии могут иметь аналогичные параметры времени компиляции / выполнения. Другой причиной изменчивости может быть то, что дебаты[2] относительно того su должен когда-либо использоваться для отказа от привилегий таким образом, и будет ли TIOCSTI поэтому ошибка вообще является ошибкой (изначально Redhat закрыл "WONTFIX").

[1]: Изменить: добавить SimplePAMApps и hardened-shadow к этому.

[2]: Solar Designer имеет некоторые (старые) мнения там которые, я думаю, стоит прочитать.

Я бы проверил право собственности и разрешения на / dev / pts * или на наличие новой конфигурации для udev, связанной с устройствами / dev / pts, которая не была заменена в процессе обновления.

Вы также можете попытаться выяснить, какой syscal вызывает ошибку, запустив его от имени пользователя root:

strace -f su - username 2>stderr.log