Comment puis-je autoriser un utilisateur à passer à un autre sans autoriser l'accès root?

53

J'aimerais autoriser certains utilisateurs à accéder à un autre compte sans avoir à connaître le mot de passe de ce compte, mais ne pas autoriser l'accès à un autre compte d'utilisateur (par exemple, root).
Par exemple, j'aimerais autoriser Tom l'administrateur de la base de données à utiliser l'utilisateur oracle, mais pas l'utilisateur tomcat ou root.

J'imagine que cela pourrait être fait avec le fichier / etc / sudoers - est-ce possible? Si c'est le cas, comment?

gharper
la source

Réponses:

44

Oui, c'est possible

Dans / etc / sudoers, l’élément qui suit immédiatement l’ équivalent est l’utilisateur que la commande sera autorisée à exécuter en tant que.

tom  ALL=(oracle) /bin/chown tom *

L'utilisateur (tom) peut taper sudo -u oracle / bin / chown tom / home / oracle / oraclefile

Brent
la source
5
Cela permettrait à Tom d'exécuter des commandes en tant qu'oracle, mais de ne pas devenir l'utilisateur d'oracle
gharper le
11
Qu'en est-il sudo -u oracle su -? Cela lui donnerait un shell ouvert en tant qu'utilisateur d'Oracle. Est-ce que c'est ce que tu veux?
Brent
+1 pour ce dernier commentaire, Brent. Ce serait ma réponse.
Annika Backstrom
3
Quelque chose comme ce qui suit pourrait fonctionner: sudo -u oracle -s ou sudo -u oracle -i (-s pour shell, -i pour la connexion - crée un shell de connexion). Malheureusement, je ne sais pas ce que vous utiliseriez dans / etc / sudoers pour limiter les utilisateurs, mais étant donné que vous leur accordez un accès au shell, vous ne voulez probablement que faire ALL = (oracle) ALL comme quelqu'un d'autre l'a mentionné. S'ils peuvent exécuter un shell, vous ne vous souciez probablement pas de restreindre les commandes qu'ils peuvent exécuter.
Mark
1
Idéalement, ne voudriez-vous pas que Tom exécute des commandes en tant qu'utilisateur Oracle, au lieu de devenir l'utilisateur Oracle? La distinction est légère, mais elle fournit un excellent journal d’audit sans avoir à utiliser un shell d’audit.
Scott Pack
40

Ajoutez à votre / etc / sudoers quelque chose comme

tom ALL=(oracle) ALL

Ensuite, l'utilisateur tom devrait pouvoir utiliser sudo pour exécuter des tâches en tant qu'utilisateur oracle avec l'option -u, sans laisser tom

Par exemple, obtenir un shell en tant qu'utilisateur oracle (enfin, étant donné que votre sudo est suffisamment nouveau pour avoir l'option -i).

sudo -u oracle -i
Kjetil Joergensen
la source
5
J'ai dû utiliser la syntaxe tom ALL=(oracle)NOPASSWD:ALLpour que sudo ne demande pas de mot de passe
snowindy
9

Pour fournir UNIQUEMENT les capacités de la question, ajoutez ce qui suit à / etc / sudoers:

tom            ALL=(oracle)    /bin/bash

Alors tom peut:

sudo -u oracle bash -i
Karimofthecrop
la source
0

Par exemple, j'aimerais autoriser Tom l'administrateur de la base de données à utiliser l'utilisateur oracle, mais pas l'utilisateur tomcat ou root.

J'avais besoin de faire cela récemment sur un système et j'avais du mal à trouver mes notes sur la configuration alternative que j'avais utilisée il y a des années et qui permettait également la syntaxe su <user>. Dans ma situation, je devais autoriser plusieurs utilisateurs suà un utilisateur spécifique.

Créez un groupe en utilisant ce addgroup <groupName>que d'autres utilisateurs pourront faire susans mot de passe. Ajoutez ensuite ce groupe à chaque utilisateur que vous souhaitez pouvoir suutiliser sans mot de passe: usermod -a -G <groupName> <userName>(ou usermod -a -G oracle tom). Les changements de groupe pourraient ne pas entrer en vigueur avant la prochaine connexion.

Remarque: Dans votre cas, vous avez déjà le groupe car celui- oracleci aurait été créé lorsque vous avez créé l'utilisateur oracle avec adduser oracle.

Maintenant, éditez /etc/pam.d/suet sous ce qui suit:

# This allows root to su without passwords (normal operation)
auth       sufficient pam_rootok.so

..add lignes de règles d'authentification de sorte que la section ressemble à ceci:

# This allows root to su without passwords (normal operation)
auth       sufficient pam_rootok.so
auth       [success=ignore default=1] pam_succeed_if.so user = <groupName>
auth       sufficient   pam_succeed_if.so use_uid user ingroup <groupName>

Remplacer <groupName>par oracledans ce cas. Cela permettra à tout utilisateur qui fait partie du <groupName>àsu <groupName>

Vous tompouvez maintenant su oracleet si vous devez donner le même accès à d'autres utilisateurs, ajoutez-les à un oraclegroupe.

question similaire ici

jlindsey
la source