Hinweis: Bitte lesen Sie die aktualisierten Informationen ab "BEARBEITEN" in der Mitte dieses Beitrags - die Umgebung und der Hintergrund dieses Problems haben sich geändert
Ich habe hier eine Moor-Standard-Debian 6.0-Installation, die ich beschlossen habe, mich von den Debian Testing-Repositorys abzuwenden. Dazu habe ich die Verweise auf die Squeeze-Repos in meiner sources.list ausgetauscht, um stattdessen die Testing-Repos zu verwenden.
Nach der Paketinstallation und einem Neustart erhalte ich die folgende Fehlermeldung, wenn ich versuche, einen anderen Benutzer anzusprechen:
root@skaia:~# su joebloggs -
bash: cannot set terminal process group (-1): Inappropriate ioctl for device
bash: no job control in this shell
Wenn ich das - weglasse, tritt dies nicht auf.
Beachten Sie, dass Benutzer korrekt root werden können. Dies scheint nur zu passieren, wenn Sie von root zu einer anderen Person wechseln und das - verwenden, um die Umgebung dieses Benutzers abzurufen.
Google ist hier meistens nutzlos. Das einzige, was ich finden kann, sind Hinweise aus dem Jahr 2011 in Bezug auf das sux
Paket, die in der Zwischenzeit behoben zu sein scheinen.
Dies sieht aus und riecht sehr nach einem Upgrade-Fehler, der behoben werden kann, indem das richtige Paket auf die richtige Weise angepasst wird. Ich habe keine Ahnung, wo ich anfangen soll - ansonsten funktioniert mein System ganz normal und wie erwartet.
BEARBEITEN
Das passiert mir jetzt auf einer Debian- Stable- Maschine, wie oben beschrieben. Dieses Mal gibt es kein Upgrade oder ähnliches, nur einen stabilen Aufstieg.
Ja, ein Jahr später. Immer noch keine Ahnung, was zum Teufel das Problem ist.
So sieht es jetzt aus (es hat sich nicht viel geändert):
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
Eine so erzeugte Strace:
root@skaianet:~$ strace -f -o tracelog su terraria -
..also taucht ein verwirrendes Verhalten auf. Diese Nachrichten sind ziemlich verwirrend. Einige ausgewählte Zeilen:
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)
Ich habe die gesamte Ausgabe dieser Strace-Sitzung verknüpft - alles, was ich getan habe, war, den Befehl su auszuführen und dann sofort Strg + D aus dem Terminal zu entfernen.
Antworten:
su - username
wird von Ihrem so interpretiertsu
, dass es "die Shell des Benutzernamens als interaktive Anmeldeshell ausführen " bedeutet.su username -
wird von Ihrem so interpretiertsu
, dass es "folgenden nicht interaktiven Befehl (-
) als Benutzernamen ausführen " bedeutetsu
übergibt nachgestellte Argumente ansh
zum Parsensh
nimmt-
zu bedeuten "run als Login - Shell (lesen/etc/profile
, ...)"Aber was Sie wirklich interessiert, ist: Warum nicht interaktiv ? Gemeinsame Nutzung der Steueranschluss zwischen der privilegierten Eltern und den nicht privilegierten Kind lässt Sie anfällig für „ TTY Push - Back - privilege escalation “, auch bekannt als die
TIOCSTI
Fehler, so dass , wenn Sie es wirklich brauchensu
löst sich von ihm . Wenn Sie dassu username -
Formular verwendet haben, haben Siesu
festgestellt, dass Sie kein Controlling-Terminal benötigen .Nur Prozesse mit einem steuernden Terminal können Sitzungsleiter haben, die Prozessgruppen manipulieren (Jobsteuerung durchführen). die Spur Sie gab ist
bash
Erkennen , dass es nicht Gruppen-Führer sein kann.Du erwähnst:
Ignorieren Varianten mögen
sux
undsudo
gibt es mindestens drei [1] Versionensu
auf Linux:coreutils
,util-linux
undshadow-utils
aus dem Debian kommt. Die Manpage des letzteren weist darauf hin:und Debian kommt mit der Flagge
old_debian_behavior
; Andere Versionen haben möglicherweise ähnliche Optionen für die Kompilierungszeit / Laufzeit. Ein weiterer Grund für die Variabilität könnte sein, dass es einige Debatten [2] darüber gab, obsu
Privilegien jemals auf diese Weise gelöscht werden sollten und ob derTIOCSTI
Fehler daher überhaupt ein Fehler ist (Redhat hat ihn ursprünglich mit "WONTFIX" geschlossen ).[1]: Bearbeiten: hinzufügen
SimplePAMApps
undhardened-shadow
dazu.[2]: Solar Designer hat dort einige (alte) Meinungen, die meiner Meinung nach eine Lektüre wert sind.
quelle
Ich würde den Besitz und die Berechtigungen auf / dev / pts * überprüfen oder nach einer neuen Konfiguration für udev in Bezug auf / dev / pts-Geräte suchen, die während des Aktualisierungsprozesses nicht ersetzt wurde.
Sie können auch versuchen, herauszufinden, welches System den Fehler generiert, indem Sie es als root ausführen:
quelle
-f
, falls su beschließt, die Shell als Unterprozess auszuführen, was jetzt üblich zu sein scheint. Der Systemaufruf zum Festlegen der Vordergrund-Prozessgruppe eines Terminals istioctl(..., TIOCSPGRP, ...)
und wir wissen bereits, dass es mit ENOTTY (Unangemessenes Ioctl für Gerät) fehlgeschlagen ist, sodass ein Teil der Strace nicht viel hilft. Es kann jedoch eine Reihe beider Versionen des Befehls (mit und ohne-
) verglichen werden, um herauszufinden, warum das TIOCSPGRP fehlschlägt.ptmx
Berechtigung, die root gehört, mit null Berechtigungen.No job control
Meldung die Shell-Eingabeaufforderung erhalten , führen Sie den Befehl austty
und Sie erfahren, auf welchem Tty Sie sich befinden. Dann istls -l
es.-f
. Vielen Dank!