Comment puis-je sudo su et changer de répertoire juste après?


13

Je voudrais créer un alias qui fait quelque chose comme ceci:

alias userYYY='sudo su userYYY; cd /a/path/that/only/userYYY/has/access'

Donc, depuis ma ligne de commande, je suis connecté avec un utilisateur sudo, et je voudrais taper l'alias userYYYpour que mon shell soit maintenant connecté avec userYYYet l' pwdest /a/path/that/only/userYYY/has/access.

Comment puis je faire ça? C'est userYYYpour exécuter certains processus, et il doit y avoir quelque chose dans sa maison. Par conséquent, j'ai essayé de changer son $ HOME en utilisant:

sudo usermod -m -d /a/path/that/only/userYYY/has/access userYYY 

Et puis à partir de mon shell avec mon fichier sudoer je l'ai fait sudo su userYYY. Mais cela n'a pas fonctionné. Le seul qui a fonctionné a été, sudo su -l userYYYYmais cela a ouvert une nouvelle bash à l'intérieur de mon shell d'origine ( -bash-4.1$ ....).

En résumé, ce que je veux, c'est simplement éviter d'avoir à écrire 2 lignes dans mon shell:

sudo su userYYY
cd /a/path/that/only/userYYY/has/access

Des idées?

Réponses:


10
alias userYYY='sudo su userYYY -c "cd /a/path/that/only/userYYY/has/access; /bin/bash"'

semble fonctionner correctement, mais vous ne savez pas comment supprimer cette erreur ou si c'est un problème. en utilisant ubuntu 14.04LTS, j'ai remarqué qu'il y avait un problème avec sur debian ...bash: cannot set terminal process group (13964): Inappropriate ioctl for device\nbash: no job control in this shell
sonjz

1
en fait, après l'avoir utilisé pendant un certain temps, j'ai remarqué que le terminal est tué assez fréquemment en utilisant cette méthode (déconnecter environ 15-30 minutes, régulièrement, mon terminal dure environ 6 heures avant de se déconnecter)
sonjz

Je viens de creuser cela, ce comportement est dû à un correctif de sécurité: unix.stackexchange.com/questions/65843/…
sonjz

cela m'a aidé à éditer mon .bashrcfichier à ce sudomoment cdlà où le fait d'avoir 2 lignes séparées ne fonctionnait pas
RozzA

2

Une option serait de modifier ~/.bashrcl'utilisateur cible et d' cdy ajouter :

cd /a/path/that/only/userYYY/has/access

0

Réponse courte - vous ne pouvez pas. Le sudo sudémarre un nouveau shell qui doit quitter avant d'arriver à la cdcommande.


0

Pour moi, une combinaison de sudoet screentravaillé:

sudo -iu vagrant screen -mS npm_install bash -c 'cd /vagrant && npm install'

Cette commande passe d'abord à l' vagrantutilisateur. Puis comme vagrantchange le répertoire /vagrantet s'exécute npm install.


0

Je sais que cela est légèrement différent de la question d'origine, mais l'idée est d'exécuter la commande en tant qu'utilisateur différent sans taper de mot de passe lorsque la stratégie l'interdit sudo su <user> -c.

sudo -u userYYY -- sh -c "cd /a/path/that/only/userYYY/has/access; /bin/bash"
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.