J'ai un serveur racine sur lequel j'ai désactivé la connexion via l'utilisateur root et créé un autre utilisateur figurant dans la liste sudoer. Donc, quand je veux travailler sur le serveur, je le fais:
ssh myusername@IP_ADDRESS
Sur le serveur:
Sudo su
entrez mon mot de passe pour obtenir les droits root. Cela a bien fonctionné pendant 6 mois maintenant. Aujourd'hui, je reçois ce message en faisant Sudo su:
Sudo: no tty present and no askpass program specified
Qu'est-ce que le hack se passe? Qu'est-ce que cette erreur signifie et pourquoi je l'obtiens? Sans droits root, je ne peux pas en faire autant sur le serveur. Une idée comment résoudre ce problème?
Sudo
tente d'ouvrir /dev/tty
en lecture-écriture et imprime cette erreur en cas d'échec. Vous avez indiqué dans des commentaires que/dev/tty est manquant sur votre système.
Sudo a une option -S
pour lire le mot de passe depuis l'entrée standard au lieu de/dev/tty. Vous devriez pouvoir exécuter Sudo -S
pour devenir root.
En ce qui concerne la récupération de/dev/tty, il est possible que le redémarrage du serveur soit suffisant. le système peut recréer tous les périphériques dans/dev lors du démarrage. Vous pouvez également utiliser la commande mknod
pour créer un périphérique, mais vous devez connaître les nombres majeur et mineur corrects pour le périphérique tty. Sur un système Ubuntu dont je dispose, je vois ces entrées dans/dev:
crw------- 1 root root 5, 1 Apr 16 18:36 console
crw-rw-rw- 1 root tty 5, 2 Sep 24 15:35 ptmx
crw-rw-rw- 1 root tty 5, 0 Sep 24 14:25 tty
Dans ce cas, le numéro majeur est 5 et le numéro mineur est 0./dev/console et/dev/ptmx ont le même numéro majeur. Je vérifiais donc/dev/console ou/dev/ptmx pour trouver le bon numéro majeur, puis exécutais:
mknod /dev/tty c major 0
où "majeur" est le nombre majeur correct.
Après avoir recréé/dev/tty, assurez-vous que les autorisations sont correctes:
chmod 666 /dev/tty
Il échoue, car Sudo
tente d’inviter sur le mot de passe root et aucun pseudo-tty n’est alloué.
Vous devez soit vous connecter en tant que root, soit configurer les règles suivantes dans votre /etc/sudoers
(ou: Sudo visudo
):
# Members of the admin group may gain root privileges.
%admin ALL=(ALL) NOPASSWD:ALL
Assurez-vous ensuite que votre utilisateur appartient au groupe admin
(ou wheel
).
Idéalement (plus sûr), il serait de limiter les privilèges root uniquement à des commandes spécifiques pouvant être spécifiées en tant que %admin ALL=(ALL) NOPASSWD:/path/to/program
Une chose à vérifier est de savoir si le système d'exploitation pense que les différents processus "ont un tty". Si vous rencontrez toujours des problèmes, cela vaut probablement la peine, à la fois dans le shell dans lequel vous exécutez ssh et dans le shell dans lequel vous exécutez Sudo. Le moyen le plus simple de vérifier est la commande "tty" - si elle renvoie "pas un tty", Shell n'a pas de "tty de contrôle" et ne peut pas ouvrir/dev/tty même s'il existe dans le système de fichiers.
Plusieurs circonstances peuvent empêcher un shell d’exécuter avec un terminal de contrôle et certaines d’entre elles ne fournissent aucun avertissement visible. Par exemple, j'ai récemment rencontré un problème sur High Sierra avec les fenêtres Emacs Shell ( Impossible d'ouvrir pty sous Mac OS High Sierra ) - High Sierra utilise un mécanisme différent pour l'allocation de pty's par rapport aux versions antérieures de Mac OS X. le code n'est pas reconfiguré pour cela, il ne pourra pas allouer un pty.