Question “Ne peut pas définir de groupe de processus de terminal” pendant le su à un autre utilisateur en tant que shell de connexion


Remarque: Veuillez lire les informations mises à jour commençant par "EDIT" à mi-chemin de cet article - l'environnement et l'arrière-plan de ce problème ont changé

J'ai une installation standard Debian 6.0 de bog ici que j'ai décidé de mettre à niveau aux référentiels des tests Debian. Pour ce faire, j'ai remplacé les références au dépôt Squeeze dans mon fichier sources.list afin d'utiliser le dépôt Testing.

Après l’installation du paquet et un redémarrage, j’obtiens l’erreur suivante lorsque je tente de passer à 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'omets le -, cela ne se produit pas.

Notez que les utilisateurs peuvent devenir root correctement, cela ne semble se produire que lorsque vous passez de la racine à une autre personne et que vous utilisez - 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 concernant le sux paquet, qui semble avoir été corrigé entre-temps.

Cela ressemble et ressemble beaucoup à une erreur de mise à jour, qui peut être corrigée en modifiant le bon paquet de la bonne manière. Je ne sais tout simplement pas par où commencer - à part cela, mon système fonctionne complètement normalement et comme prévu.

MODIFIER

Cela m’arrive maintenant sur une Debian stable machine comme décrit ci-dessus. Aucune mise à niveau ou quoi que ce soit cette fois-ci, juste stable.

Ouais, un an plus tard. Toujours pas la moindre idée du 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

Un strace généré comme ceci:

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

..aussi révèle un comportement déroutant. Ces messages sont plutôt 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.


16
2017-07-26 02:22


origine


Salut Mike. Avez-vous trouvé le problème? - Mircea Vutcovici


Réponses:


  • su - username est interprété par votre su signifier "courir" Nom d'utilisateurshell en tant que shell de connexion interactif "
  • su username - est interprété par votre su signifie "exécuter ce qui suit non interactif commande (-) comme Nom d'utilisateur"
  • ce dernier n'a fonctionné que parce que:
    • votre su passe les arguments de fin à sh pour l'analyse
    • sh prend - signifier "exécuter en tant que shell de connexion (lire /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 à "TTY pushback elévation de privilèges", alias le TIOCSTI bug, donc à moins d'en avoir vraiment besoin su  s'en détache. Quand vous avez utilisé le su username - forme, su  déduit que vous n'avez 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 des groupes de processus (contrôle du travail); la trace que vous avez donnée est bash détecter que cela ne peut pas être un chef de session.

Vous mentionnez:

Il devient plus étrange que les deux formulaires fonctionnent correctement sous Ubuntu et CentOS 6; cependant, sous Debian vanille, seul le premier formulaire fonctionne sans erreur.

Ignorer des variantes comme sux et sudo, il y a au moins trois[1] versions de su sous Linux: coreutils, util-linux et shadow-utils d'où provient Debian. La page de manuel de ce dernier indique:

Cette version de su comporte de nombreuses options de compilation, dont certaines peuvent être utilisées sur un site particulier.

et Debian vient avec le drapeau old_debian_behavior; d'autres versions peuvent avoir des options de compilation / exécution similaires. Une autre raison de la variabilité pourrait être qu’il existe certaines débat[2] quant à savoir si su devrait jamais être utilisé pour abandonner le privilège de cette façon et si le TIOCSTI bug est donc un bug (Redhat à l’origine fermé le "WONTFIX").

[1]: Modifier: ajouter SimplePAMApps et hardened-shadow pour que.

[2]: Solar Designer a quelques opinions (anciennes) que je pense méritent une lecture.


32
2018-06-16 13:29



C'est une excellente réponse et, mieux encore, cela explique exactement pourquoi. J'aurais aimé que vous soyez ici il y a un an :) - Mikey T.K.


Je vérifiais la propriété et les autorisations sur / dev / pts * ou une nouvelle configuration pour udev liée aux périphériques / dev / pts, qui n'a pas été remplacée lors du processus de mise à niveau.

Vous pouvez également essayer de savoir ce que syscal génère l’erreur en s’exécutant en tant que root:

strace -f su - username 2>stderr.log

1
2017-07-26 03:22



Mieux ajouter -f Si su décide de lancer le shell en tant que sous-processus, cela semble être courant maintenant. L’appel système permettant de définir le groupe de processus d’avant-plan d’un terminal est ioctl(..., TIOCSPGRP, ...) et nous savons déjà que cela a échoué avec ENOTTY (Inapproprié ioctl pour device), de sorte qu’une partie de la strace n’aidera pas beaucoup. Mais une strace des deux versions de la commande (avec et sans -) pourrait être comparé pour savoir Pourquoi le TIOCSPGRP échoue. - Alan Curry
Cela ressemble à une piste prometteuse. Dans mon dossier / dev / pts, il y a précisément deux éléments, à savoir 0, les autorisations définies en tant que 600 appartenant à l'utilisateur avec lequel je me suis connecté, et un ptmx appartenant à la racine, avec zéro autorisations. - Mikey T.K.
Lorsque vous recevez l’invite du shell après le No job control message, lancez la commande tty et il vous dira sur quel tty vous êtes. ensuite ls -l il. - Alan Curry
@AlanCurry, vous avez raison, je vais ajouter -f. Je vous remercie! - Mircea Vutcovici
@AlanCurry - il est revenu. J'ai mis à jour la question initiale avec les informations suggérées par Mircea. - Mikey T.K.