Comment passer d'un utilisateur à un autre?

481

Je souhaite me connecter en tant qu'utilisateur différent sans me déconnecter du compte actuel (sur le même terminal). Comment je fais ça?

Tshepang
la source
1
J'ai posé une question similaire, car j'avais des problèmes avec les variables d'environnement XDG ( $XDG_RUNTIME_DIRen particulier) qui me rendaient dingue. -> unix.stackexchange.com/questions/354826/…
Jonathan Komar

Réponses:

562

Que diriez-vous d'utiliser la sucommande?

$ whoami
user1
$ su - user2
Password:
$ whoami
user2
$ exit
logout

Si vous souhaitez vous connecter en tant que root, il n'est pas nécessaire de spécifier un nom d'utilisateur:

$ whoami
user1
$ su -
Password:
$ whoami
root
$ exit
logout

Généralement, vous pouvez sudolancer un nouveau shell en tant qu’utilisateur de votre choix. le -udrapeau vous permet de spécifier le nom d'utilisateur que vous voulez:

$ whoami
user1
$ sudo -u user2 zsh
$ whoami
user2

Si vous n'avez pas accès à sudo, il existe d'autres méthodes plus détournées, comme ssh nom_utilisateur @ localhost, mais sudoest probablement plus simple, à condition qu'il soit installé et que vous ayez la permission de l'utiliser.

Pratt
la source
17
Aussi, su - [user]peut être utile - le tiret supplémentaire vous donne un shell de connexion.
éphémère
Je reçois le message d'erreur "-su: / dev / stderr: autorisation refusée" après l'exécution de cette commande echo >>/dev/stderrlors d'une connexion avec su --login ...un conseil quelconque? J'ai trouvé ce btw unix.stackexchange.com/questions/38538/…
Aquarius Power
Cela permet-il à chaque nouvel utilisateur d’avoir des valeurs différentes et prioritaires pour les variables d’environnement? Par exemple, Git config pour le travail, l'open source, etc.
Kevin Suttle
Une des constatations, lorsque j’ai énuméré le, enva permis de constater que tout était en ordre et qu’une inspection visuelle pouvait se dérouler; Et une chose est incorrecte: XAUTHORITY=/home/user1/.Xauthority'. Not sure _why_? So X-window doesn't work by default because the protection on fichier ~ / .Xauthority` est: -rw-------. J'ai fait une copie et cela m'a permis de lancer gedit à titre expérimental.
sera
1
si vous obtenez "Ce compte n'est pas disponible pour le moment": su -s / bin / bash - www-data
max4ever
46

Généralement, vous utilisez sudopour lancer un nouveau shell en tant qu’utilisateur de votre choix; le -udrapeau vous permet de spécifier le nom d'utilisateur que vous voulez:

[mrozekma@etudes-1 ~] % whoami
mrozekma
[mrozekma@etudes-1 ~] % sudo -u nobody zsh
[nobody@etudes-1 ~] % whoami
nobody

Il y a des manières plus détournées si vous n'avez pas d'accès sudo, par exemple ssh username@localhost, mais je pense que sudoc'est probablement plus simple si c'est installé et que vous avez la permission de l'utiliser.

Michael Mrozek
la source
Que se passe-t-il si mon système n'a ni serveur ssh ni sudo? Pouvez-vous mentionner cette partie de la réponse?
Tshepang
ok, Pratt a répondu à cette question
tshepang
4
sudo -svous donne un shell comme su, sudo -isimule la connexion comme su -. Peut être combiné avec -u $user, bien sûr.
éphémère
beaucoup plus efficace. pouvoir "se connecter" en tant qu'utilisateur qui ne peut pas se connecter normalement est un grand atout ..! m'a totalement permis d'exécuter une instance de base de données sans jouer avec les autorisations ni selinux
Félix Gagnon-Grenier
20
$ whoami 

Cette commande imprime l'utilisateur actuel. Pour changer d'utilisateur, nous devrons utiliser cette commande (suivie du mot de passe de l'utilisateur):

$ su secondUser
Password:

Après avoir entré le bon mot de passe, vous serez connecté en tant qu'utilisateur spécifié (que vous pourrez vérifier en le réexécutant) whoami.

Ashish Saini
la source
Utile si vous n'êtes pas sudoer.
Marco Sulla
15

Si vous utilisez Ubuntu et si l'utilisateur avec lequel vous souhaitez vous connecter n'a pas de mot de passe:

sudo su - username

Entrez votre propre mot de passe et vous devriez être défini. Bien entendu, cela nécessite que votre utilisateur dispose des droits lui permettant d’obtenir les privilèges root sudo.

Sundae
la source
8

Pour basculer la session de terminal vers un autre utilisateur, lorsque cet utilisateur ne peut pas revenir à l'utilisateur d'origine, utilisez exec:

$ | # exec su - [nom d'utilisateur]

Cela connectera techniquement le nouvel utilisateur dans un nouveau processus de terme et fermera celui en cours. Ainsi, lorsque l'utilisateur tente de quitter ou d'utiliser Ctrl-D, le terminal se ferme comme si c'était l'utilisateur qui l'avait instancié, c'est-à-dire qu'il ne pouvait pas revenir dans le terme d'origine. C'est un peu inutile, étant donné qu'ils peuvent toujours démarrer une nouvelle session de terminal et être automatiquement dans le nom d'utilisateur initial, mais c'est le cas.

EDIT: Pour ce que cela vaut, vous pouvez utiliser la commande linux vlock dans votre ~ / .bashrc pour verrouiller les sessions de terminal par défaut, ce qui nécessite le mot de passe du mot utilisateur de session pour le déverrouiller. Cela éviterait quelque peu le redémarrage du terme susmentionné dans le contexte utilisateur d'origine, étant donné que le terme n'est pas instancié à l'aide du fichier ~ / .bashrc non défini par défaut de l'utilisateur, tel que configuré.

SYANiDE
la source
3

sudo -iu <your_username> pour moi faire le tour

andilabs
la source
2

Une autre voie consiste à lancer un nouveau shell en tant qu'utilisateur différent (non root) pour exécuter des commandes en tant qu'utilisateur.

ubuntu@aws-ip:~$ sudo -u mongodb bash          #<-- or zsh, etc... 
mongodb@aws-ip:~$ mongod --configsvr --dbpath /data/configdb --fork

Un exemple de ceci est l' mongodbutilisateur. Lors du déploiement d'un cluster MongoDB partagé, tous les processus nécessaires doivent être exécutés avec mongodbet il n'est pas nécessaire (ou tout à fait pratique) de démoniser les processus à l'aide de scripts d'initialisation pour des dizaines de nœuds.

Azatar
la source
2

Laissez-nous obtenir ce droit: vous êtes connecté en tant que UserA et voulez "vous connecter" en tant que UserB pour exécuter certaines commandes, mais vous souhaitez revenir à UserA lorsque vous avez terminé. Par souci de simplicité, je suppose que vous voulez exécuter ls -l / tmp en tant que UserB. Si vous ne pas vouloir quitter le shell actuel de UserA mais exécuter une commande comme UtilisateurB et toujours rester connecté comme UserA, vous devriez faire ceci:

su - UserB -c "ls -l /tmp"   <-- Just an example

Cela suppose que vous connaissiez le mot de passe pour UserB. Toutefois, si vous ne connaissez pas le mot de passe de UserB, vous devez connaître le mot de passe root. Ensuite:

sudo su - UserB -c "ls -l /tmp"   <-- UserB's pw not needed here

Si vous préférez vous connecter temporairement en tant qu'utilisateur B pour exécuter de nombreuses commandes, il suffit de:

sudo su - UserB

Cela vous donnera un nouveau shell pour UserB (vérifiez cela en tapant id). Une fois terminé, vous pouvez faire ctrl-d et revenir à votre login.

Hopping Bunny
la source
1

Si vous n'avez besoin que d'une seule commande, vous pouvez utiliser sudo: sudo -u username command

Maksim Luzik
la source
-1
~$ sudo login

Ensuite, il vous demandera le mot de passe sudo (le mot de passe de l'utilisateur actuellement connecté).

Aussi: assurez-vous que l'utilisateur actuel est dans le fichier sudoers!

Tshepo
la source
2
La question portait sur la connexion en tant qu'utilisateur différent.
Minix