Uwaga: przeczytaj zaktualizowane informacje zaczynające się od „EDYTUJ” w pobliżu połowy tego postu - środowisko i tło tego problemu uległy zmianie
Mam tutaj standardową instalację Debiana 6.0, którą postanowiłem przenieść do repozytoriów testujących Debiana. Zrobiłem to, wymieniając odniesienia do repozytoriów Squeeze w mojej pliku sources.list, aby zamiast tego korzystać z repozytoriów Testowanie.
Po zainstalowaniu pakietu i ponownym uruchomieniu komputera pojawia się następujący błąd podczas próby su - innemu użytkownikowi:
root@skaia:~# su joebloggs -
bash: cannot set terminal process group (-1): Inappropriate ioctl for device
bash: no job control in this shell
Jeśli pominę -, to nie nastąpi.
Zauważ, że użytkownicy mogą zostać rootem poprawnie, wydaje się, że dzieje się to tylko podczas przełączania z roota na kogoś innego i używania - w celu uzyskania środowiska tego użytkownika.
Google jest tu w większości bezużyteczny. Jedyne, co mogę znaleźć, to odniesienia z 2011 roku dotyczące sux
pakietu, które wydają się być naprawione w międzyczasie.
Wygląda i pachnie bardzo podobnie do błędu aktualizacji, który można naprawić, poprawiając odpowiedni pakiet we właściwy sposób. Po prostu nie mam pojęcia, od czego zacząć - poza tym mój system działa całkowicie normalnie i zgodnie z oczekiwaniami.
EDYTOWAĆ
To się teraz dzieje na stabilnej maszynie Debiana , jak opisano powyżej. Tym razem nie ma aktualizacji ani nic, po prostu stabilny.
Tak, rok później. Nadal nie mam pojęcia, na czym polega problem.
Oto jak teraz wygląda (niewiele się zmieniło):
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
Wygenerowano tak:
root@skaianet:~$ strace -f -o tracelog su terraria -
.. również pojawia się pewne mylące zachowanie. Te wiadomości są dość mylące. Niektóre wybrane linie:
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)
Połączyłem pełny wynik tej sesji strace - wszystko, co zrobiłem, to uruchomiłem polecenie su, a następnie natychmiast ctrl + d z terminalu.
Odpowiedzi:
su - username
jest interpretowany przez użytkownikasu
jako „uruchamianie powłoki nazwy użytkownika jako interaktywnej powłoki logowania”su username -
jest interpretowany przez użytkownikasu
jako „uruchom następujące nieinteraktywne polecenie (-
) jako nazwę użytkownika ”su
przechodzi końcowe argumentysh
do parsowaniash
odbywa-
się na myśli „Uruchom jako powłoki logowania (czytaj/etc/profile
...)”Ale tak naprawdę interesuje Cię: dlaczego nieinteraktywny ? Udostępnianie terminalu sterującego między uprzywilejowanym rodzicem a nieuprzywilejowanym dzieckiem pozostawia cię podatnym na „ eskalację uprawnień TTY pushback ”, czyli
TIOCSTI
błąd, więc chyba, że naprawdę go potrzebujesz, to sięsu
od niego odłączy . Kiedy używałeśsu username -
formularza,su
wywnioskowałeś, że nie potrzebujesz terminalu sterującego .Tylko procesy z terminalem sterującym mogą mieć liderów sesji, które manipulują grupami procesów (wykonują kontrolę zadań); ślad, który podałeś,
bash
wykrywa, że nie może to być lider sesji.Wspominasz:
Warianty ignorując jak
sux
isudo
istnieją co najmniej trzy [1] wersjesu
na Linuksa:coreutils
,util-linux
ishadow-utils
od którego pochodzi Debian. Ta ostatnia strona wskazuje:a Debian pochodzi z flagą
old_debian_behavior
; inne wersje mogą mieć podobne opcje czasu kompilacji / środowiska wykonawczego. Innym powodem zmienności może być dyskusja [2] na temat tego, czysu
należy kiedykolwiek użyć upuszczenia uprawnień w ten sposób i czyTIOCSTI
błąd jest w ogóle błędem (Redhat pierwotnie zamknął go „WONTFIX” ).[1]: Edycja: dodaj
SimplePAMApps
ihardened-shadow
do tego.[2]: Solar Designer ma tam kilka (starych) opinii, które moim zdaniem są warte przeczytania.
źródło
Sprawdziłbym własność i uprawnienia na / dev / pts * lub nową konfigurację udev związaną z urządzeniami / dev / pts, która nie została zastąpiona podczas procesu aktualizacji.
Możesz także spróbować dowiedzieć się, co syscal generuje błąd, uruchamiając jako root:
źródło
-f
tę ścieżkę, na wypadek, gdyby su zdecydowała się uruchomić powłokę jako podproces, co wydaje się teraz powszechne. Syscall do ustawiania grupy procesów na pierwszym planie terminala jestioctl(..., TIOCSPGRP, ...)
i wiemy już, że nie powiódł się z ENOTTY (nieodpowiedni ioctl dla urządzenia), więc część śledzenia niewiele pomoże.-
Można jednak porównać ciąg obu wersji polecenia ( zi bez ), aby dowiedzieć się, dlaczego TIOCSPGRP zawodzi.ptmx
root i posiadające uprawnienia zerowe.No job control
wiadomości, uruchom polecenie,tty
a powie ci, na którym tty jesteś. Więcls -l
to.-f
. Dziękuję Ci!