Mot de passe SSH / de connexion différent du mot de passe SUDO


9

Je voudrais utiliser un mot de passe différent pour élever mon utilisateur au statut sudo que le mot de passe que j'utilise pour me connecter (via GUI, shell ou SSH) à mon compte. Est-ce possible?

EDIT: Étant donné que la définition du mot de passe root autoriserait la connexion en tant que root, ce n'est pas une bonne façon de procéder. Je préfère un mot de passe sudo spécifique à l'utilisateur plutôt qu'un mot de passe root à l'échelle du système.


1
Pouvez-vous développer cela - pourquoi voulez-vous faire cela?
Doug Harris

1
Je pense que la question s'explique assez bien, mais le but est de sécuriser la connexion via des mots de passe longs et difficiles, puis d'utiliser un mot de passe différent pour l'accès sudo, de sorte que la compromission du compte d'un utilisateur ne fournisse pas automatiquement l'accès sudo.
Richard

J'ai entendu dire qu'il était possible de faire sudo via les clés rsa / dsa, qui peuvent avoir la phrase secrète que vous voulez.
Rob

Réponses:


2

de man sudoers:

rootpw          If set, sudo will prompt for the root password instead of the
                password of the invoking user.  This flag is off by default.

runaspw         If set, sudo will prompt for the password of the user defined
                by the runas_default option (defaults to root) instead of the
                password of the invoking user.  This flag is off by default.

Ou vous pouvez simplement interdire complètement les connexions par mot de passe via ssh. Exiger une clé chiffrée par mot de passe pour la connexion à distance. Ensuite, vous êtes libre d'utiliser le mot de passe pour sudo. L'option pertinente est

de man sshd_config

 PasswordAuthentication
         Specifies whether password authentication is allowed.  The default
         is “yes”.

Merci pour votre aide, Chas. Owens. Je crains qu'un effet secondaire de votre solution soit que le compte root ait un mot de passe et qu'il soit donc possible de se connecter en tant que root, ce qui n'est pas une porte que je souhaite laisser ouverte. Je préfère un mot de passe sudo spécifique à l'utilisateur plutôt qu'un mot de passe root à l'échelle du système.
Richard

Vous pouvez également désactiver la connexion root à partir de sshd_config
Rob

1

cherchez-vous cela à la place chez sudoers man?

   targetpw        If set, sudo will prompt for the password of the user
                   specified by the -u option (defaults to root) instead of the
                   password of the invoking user. 

Merci pour votre aide, johnshen64. Je crains qu'un effet secondaire de votre solution soit que le compte root ait un mot de passe et qu'il soit donc possible de se connecter en tant que root, ce qui n'est pas une porte que je souhaite laisser ouverte. Je préfère un mot de passe sudo spécifique à l'utilisateur plutôt qu'un mot de passe root à l'échelle du système.
Richard

cet utilisateur n'a pas besoin d'être root, il est juste par défaut root si vous ne le spécifiez pas. vous pouvez l'expérimenter pour voir si ce serait pour vous. unix est assez ouvert et si ceux-ci ne fonctionnent toujours pas pour vous, vous pouvez même écrire un script wrapper ou même modifier sudo (si vous connaissez c) pour faire exactement ce que vous voulez.
johnshen64

@ johnshen64 Je pense qu'il s'oppose au fait que le même mot de passe serait utilisé pour tous les utilisateurs.
Chas. Owens

Je vois, mais un utilisateur administrateur peut être créé pour chaque utilisateur, par exemple $ {USER} foradmin, de sorte qu'un utilisateur spécifie toujours -u $ {USER} foradmin, mais pour appliquer ce sudo, il doit toujours être remplacé par un script personnalisé.
johnshen64

1

Que diriez-vous de désactiver la connexion par mot de passe via SSH et d'autoriser la connexion par clé publique où vous pouvez définir votre mot de passe difficile à deviner. Le mot de passe local peut alors être plus court et utilisé par sudo.

En dehors de cela, vous devrez configurer /etc/pam.d/sudopour utiliser un module différent (ou supplémentaire), à ​​première vue, cela pam_dialpasspourrait permettre ce dont vous avez besoin.

Vous pouvez également configurer la configuration LDAP pour l'un et les mots de passe locaux pour l'autre. Tout dépendra de la quantité de changements que vous êtes capable et désireux d'apporter, des modules disponibles, etc.


Merci pour votre aide, Bram. Votre première suggestion fonctionnerait, sauf que l'authentification par clé publique peut être prohibitive, à moins que vous ne soyez prêt à transférer des fichiers de clé.
Richard

1

SOLUTION 1: newgrp

Un moyen simple de traiter votre cas d'utilisation serait d'utiliser :NOPASSWDen combinaison avec un groupe et un mot de passe de groupe:

Ajoutez une ligne aux sudoers:

%rudo   ALL=(ALL:ALL) NOPASSWD:ALL

Créez un groupe protégé par mot de passe:

groupadd rudo
gpasswd  rudo # Enter passwd

Maintenant, lorsque vous vous connectez en tant qu'utilisateur non privilégié (en supposant que vous n'êtes pas déjà dans le rudogroupe), connectez-vous au rudogroupe, auquel cas vous serez invité à entrer le mot de passe.

login user
newgrp rudo

Vous pouvez maintenant exécuter sans sudomot de passe, tant que vous restez connecté au groupe.


SOLUTION 2: runaspw

Un meilleur moyen, peut-être plus sûr, de faire ces utilisations runaspw. runaspwest associée à l' runas_defaultoption de sorte que vous devez ajouter cette option aussi.

En supposant que vous disposez déjà de l' %sudoentrée de groupe par défaut :

%sudo   ALL=(ALL:ALL) ALL

ajoutez ces lignes au fichier sudoers:

Defaults:%sudo  runas_default=sudo
Defaults:%sudo  runaspw

Ajoutez maintenant un nouvel sudoutilisateur avec un mot de passe:

useradd sudo -d /nonexistent -s /usr/sbin/nologin -MNr
passwd sudo

Désormais, les utilisateurs du groupe sudo seront invités à saisir le mot de passe de l'utilisateur sudo, mais seuls les utilisateurs du groupe sudo pourront le faire (contrairement à la solution de groupe ci-dessus, où n'importe qui dans le groupe ou avec le groupe passwd pourrait sudo).

Un problème mineur est que l'utilisateur runas par défaut est maintenant sudodonc pour sudo en tant que root, vous devez spécifier explicitement root:

sudo -u root <cmd>

Mais assez simple pour définir une commande alias ( alias sudo='sudo -u root') ou sudo indirecte.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.