"Impossibile impostare il gruppo di processi terminali" durante su su un altro utente come shell di accesso


16

Nota: leggere le informazioni aggiornate che iniziano con "EDIT" vicino alla metà di questo post - l'ambiente e lo sfondo di questo problema sono cambiati

Qui ho un'installazione standard di Debian 6.0 che ho deciso di eseguire il sidegrade nei repository Debian Testing. L'ho fatto scambiando i riferimenti ai repository Squeeze nel mio sources.list per utilizzare invece i repository Test.

Dopo l'installazione del pacchetto e il riavvio, viene visualizzato il seguente errore durante il tentativo di eseguire il su - a un altro utente:

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

Se ometto il -, questo non si verifica.

Si noti che gli utenti possono diventare correttamente root, questo sembra accadere solo quando si passa da root a qualcun altro e si utilizza il - per ottenere l'ambiente dell'utente.

Google è per lo più inutile qui. Le uniche cose che posso trovare sono i riferimenti del 2011 per quanto riguarda il suxpacchetto, che sembrano essere stati corretti nel frattempo.

Questo sembra e ha un odore molto simile a un errore di aggiornamento, risolvibile modificando il pacchetto giusto nel modo giusto. Non ho idea di dove iniziare - a parte questo, il mio sistema funziona completamente normalmente e come previsto.

MODIFICARE

Questo ora mi sta accadendo su una macchina stabile Debian come descritto sopra. Nessun aggiornamento o niente questa volta, semplicemente stabile.

Sì, un anno dopo. Ancora non ho idea di cosa diavolo sia il problema.

Ecco come appare ora (non è cambiato molto):

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

Una striscia generata in questo modo:

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

..anche rivela un comportamento confuso. Questi messaggi sono piuttosto confusi. Alcune linee scelte:

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)

Ho collegato l'output completo di questa sessione di strace - tutto ciò che ho fatto è stato eseguire il comando su, quindi immediatamente ctrl + d dal terminale.


1
Ciao Mike. Hai trovato il problema?
Mircea Vutcovici,

Risposte:


33
  • su - usernameviene interpretato dal tuo suintendo "eseguire la shell del nome utente come shell di login interattiva"
  • su username -è interpretato da tuo sunel senso che "esegui il seguente comando non interattivo ( -) come nome utente "
  • quest'ultimo ha funzionato solo perché:
    • i tuoi supassi trascinano gli argomenti shper l'analisi
    • shprende -a significare "Esegui come una shell di login (leggi /etc/profile, ...)"

Ma quello che ti interessa veramente è: perché non interattivo ? La condivisione del terminale di controllo tra il genitore privilegiato e il figlio non privilegiato ti rende vulnerabile a " escalation di privilegi di pushback TTY ", noto anche come TIOCSTIbug, quindi a meno che tu non ne abbia realmente bisogno si su stacca da esso . Quando hai usato il su username -modulo, su hai dedotto che non avevi bisogno di un terminale di controllo .

Solo i processi con un terminale di controllo possono avere leader di sessione che manipolano i gruppi di processi (eseguono il controllo del lavoro); la traccia che hai dato sta bashrilevando che non può essere un leader di sessione.

Tu citi:

La cosa più strana è che entrambe le forme funzionano bene su Ubuntu e CentOS 6, tuttavia su Debian vaniglia, solo la prima forma funziona senza errori.

Ignorare varianti piace suxe sudo, ci sono almeno tre [1] versioni di suLinux: coreutils, util-linuxe shadow-utilsda cui Debian viene. La manpage di quest'ultimo sottolinea:

Questa versione di su ha molte opzioni di compilazione, solo alcune delle quali potrebbero essere in uso in un determinato sito.

e Debian arriva con la bandiera old_debian_behavior; altre versioni potrebbero avere opzioni di tempo di compilazione / runtime simili. Un altro motivo di variabilità potrebbe essere il fatto che ci sia stato un dibattito [2] sull'opportunità sudi abbandonare il privilegio in questo modo e se il TIOCSTIbug è quindi un bug (Redhat inizialmente lo ha chiuso "WONTFIX" ).

[1]: Modifica: aggiungi SimplePAMAppse hardened-shadowa quello.

[2]: Solar Designer ha alcune (vecchie) opinioni lì che penso valga la pena leggere.


2
Questa è una risposta eccellente e soprattutto spiega esattamente perché. Vorrei che fossi stato qui un anno fa :)
Mikey TK,

1

Verificherei la proprietà e le autorizzazioni su / dev / pts * o per una nuova configurazione per udev relativa ai dispositivi / dev / pts, che non è stata sostituita durante il processo di aggiornamento.

Puoi anche provare a scoprire quale syscal sta generando l'errore eseguendolo come root:

strace -f su - username 2>stderr.log

2
Meglio aggiungere -fa quella stringa, nel caso in cui su decida di eseguire la shell come sottoprocesso, che ora sembra essere comune. Il syscall per impostare un gruppo di processi in primo piano di un terminale è ioctl(..., TIOCSPGRP, ...)e sappiamo già che non è riuscito con ENOTTY (ioctl inappropriato per il dispositivo) in modo che parte dello strace non sia di grande aiuto. Ma una serie di entrambe le versioni del comando (con e senza -) potrebbe essere confrontata per scoprire perché TIOCSPGRP non funziona.
Alan Curry,

Sembra un vantaggio promettente. Guardando nella mia cartella / dev / pts, ci sono esattamente due elementi, vale a dire 0, autorizzazioni impostate su 600 di proprietà dell'utente con cui ho effettuato l'accesso e una ptmxproprietà di root con zero autorizzazioni.
Mikey TK,

1
Quando ricevi il prompt della shell dopo il No job controlmessaggio, esegui il comando ttye ti dirà su quale tty sei. Poi ls -lesso.
Alan Curry,

@AlanCurry, hai ragione, aggiungerò -f. Grazie!
Mircea Vutcovici,

@AlanCurry - è tornato. Ho aggiornato la domanda originale con le informazioni suggerite da Mircea.
Mikey TK,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.