"Невозможно установить группу процессов терминала" во время su другому пользователю в качестве оболочки входа
Примечание. Пожалуйста, прочитайте обновленную информацию, начиная с "РЕДАКТИРОВАТЬ", около середины этого поста - среда и фон этой проблемы изменились
У меня установлена стандартная версия 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 на кого-то другого и использовании -, чтобы получить среду этого пользователя.
Гугл здесь в основном бесполезен. Единственное, что я могу найти, это ссылки с 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 из терминала.
3 ответа
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
; другие версии могут иметь аналогичные параметры времени компиляции / выполнения. Другая причина изменчивости может заключаться в том, что были некоторые споры о том, su
должен когда-либо использоваться, чтобы отбросить привилегию таким образом и будет ли TIOCSTI
Таким образом, ошибка - это вообще ошибка (Redhat изначально закрыл ее "WONTFIX").
[1]: Изменить: добавить SimplePAMApps
а также hardened-shadow
к этому.
[2]: у Solar Designer есть (старые) мнения, которые, я думаю, стоит прочитать.
Дополнительное объяснение: я столкнулся с той же проблемой, но с разными решениями.
Использоватьsu -l $USER -P
предоставить псевдотерминал.
Я бы проверил владение и разрешения для /dev/pts* или для новой конфигурации для udev, связанной с устройствами / dev / pts, которая не была заменена во время процесса обновления.
Вы также можете попытаться выяснить, что syscal генерирует ошибку, запустив от имени пользователя root:
strace -f su - username 2>stderr.log