Remarque: veuillez lire les informations mises à jour commençant par "MODIFIER" à mi-chemin de ce message - l'environnement et l'arrière-plan de ce problème ont changé
J'ai ici une installation standard de Debian 6.0, que j'ai décidé de passer aux référentiels de test Debian. J'ai fait cela en échangeant les références aux référentiels Squeeze dans ma sources.list pour utiliser les référentiels de test à la place.
Après l'installation du package et un redémarrage, j'obtiens l'erreur suivante lorsque j'essaie de faire appel à un autre utilisateur:
root@skaia:~# su joebloggs -
bash: cannot set terminal process group (-1): Inappropriate ioctl for device
bash: no job control in this shell
Si j'omet le -, cela ne se produit pas.
Notez que les utilisateurs peuvent devenir root correctement, cela ne semble se produire qu'en passant de root à quelqu'un d'autre et en utilisant le - pour obtenir l'environnement de cet utilisateur.
Google est surtout inutile ici. Les seules choses que je peux trouver sont des références de 2011 en ce qui concerne le sux
paquet, qui semblent avoir été corrigées entre-temps.
Cela ressemble et sent très bien comme une erreur de mise à niveau, réparable en modifiant le bon package de la bonne manière. Je n'ai juste aucune idée par où commencer - à part cela, mon système fonctionne complètement normalement et comme prévu.
ÉDITER
Cela m'arrive maintenant sur une machine stable Debian comme décrit ci-dessus. Aucune mise à niveau ou quoi que ce soit cette fois, juste stable.
Oui, un an plus tard. Je ne sais toujours pas quel est le problème.
Voici à quoi cela ressemble maintenant (peu de choses ont changé):
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
Une strace générée comme ceci:
root@skaianet:~$ strace -f -o tracelog su terraria -
..aussi révèle un comportement déroutant. Ces messages sont assez déroutants. Quelques lignes choisies:
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)
J'ai lié la sortie complète de cette session strace - tout ce que j'ai fait a été d'exécuter la commande su, puis immédiatement ctrl + d hors du terminal.
Réponses:
su - username
est interprété par votresu
comme signifiant «exécuter le shell du nom d' utilisateur comme un shell de connexion interactif»su username -
est interprété par votresu
comme signifiant "exécutez la commande non interactive suivante (-
) en tant que nom d' utilisateur "su
passes à la fin des argumentssh
pour l'analysesh
prend le-
sens de « courir comme un shell de connexion (lecture/etc/profile
, ...) »Mais ce qui vous intéresse vraiment, c'est: pourquoi non interactif ? Le partage du terminal de contrôle entre le parent privilégié et l'enfant non privilégié vous rend vulnérable à "l' escalade des privilèges de repoussage ATS ", alias le
TIOCSTI
bogue, donc à moins que vous n'en ayez vraiment besoin, il s'ensu
détache . Lorsque vous avez utilisé lesu username -
formulaire,su
vous avez déduit que vous n'aviez pas besoin d'un terminal de contrôle .Seuls les processus avec un terminal de contrôle peuvent avoir des chefs de session qui manipulent les groupes de processus (font le contrôle des tâches); la trace que vous avez donnée
bash
détecte qu'il ne peut pas s'agir d'un chef de session.Vous mentionnez:
Variantes Ignorant les aiment
sux
etsudo
, il y a au moins trois [1] versions desu
Linux:coreutils
,util-linux
et àshadow-utils
partir de laquelle Debian de VIENT. La page de manuel de ce dernier souligne:et Debian est livré avec le drapeau
old_debian_behavior
; d'autres versions peuvent avoir des options de compilation / d'exécution similaires. Une autre raison de la variabilité pourrait être qu'il y a eu un débat [2] sur la question de savoir s'ilsu
ne devrait jamais être utilisé pour supprimer des privilèges de cette façon et si leTIOCSTI
bogue est donc un bogue du tout (Redhat l'a fermé à l' origine "WONTFIX" ).[1]: Modifier: ajoutez
SimplePAMApps
ethardened-shadow
à cela.[2]: Solar Designer y a quelques (anciennes) opinions qui, je pense, valent la peine d'être lues.
la source
Je vérifierais la propriété et les autorisations sur / dev / pts * ou pour une nouvelle configuration pour udev liée aux périphériques / dev / pts, qui n'a pas été remplacée pendant le processus de mise à niveau.
Vous pouvez également essayer de savoir quel syscal génère l'erreur en exécutant en tant que root:
la source
-f
à cette strace, au cas où su décide d'exécuter le shell en tant que sous-processus, ce qui semble être courant maintenant. L'appel système pour définir le groupe de processus de premier plan d'un terminal estioctl(..., TIOCSPGRP, ...)
et nous savons déjà qu'il a échoué avec ENOTTY (ioctl inapproprié pour le périphérique), de sorte qu'une partie de la strace n'aidera pas beaucoup. Mais une série des deux versions de la commande (avec et sans-
) pourrait être comparée pour savoir pourquoi le TIOCSPGRP échoue.ptmx
détenues par root, sans aucune autorisation.No job control
message, exécutez la commandetty
et elle vous indiquera sur quel terminal vous êtes. Alorsls -l
ça.-f
. Je vous remercie!