Примечание: пожалуйста, прочтите обновленную информацию, начинающуюся с "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