web-dev-qa-db-fra.com

Comment exécuter une commande avec les privilèges d'administrateur et l'accès aux fichiers de l'utilisateur connecté?

J'ai quelques problèmes pour comprendre Sudo. Je suis connecté à un terminal en tant qu'utilisateur non administrateur/non root. Cet utilisateur "normal" ne se trouve pas dans le fichier sudoers (et ne devrait pas l'être, à mon avis).

Maintenant, j'essaie d'exécuter une commande nécessitant les privilèges administrateur/racine et l'accès aux répertoires de mon utilisateur normal. Par conséquent, je ne parviens pas simplement à su dans un utilisateur administrateur ou root.

D'après ma compréhension, Sudo -u root devrait faire l'affaire, mais il n'accepte pas le mot de passe pour root (ou admin si j'essaie avec mon utilisateur admin habituel). Il accepte uniquement le mot de passe de l'utilisateur "normal", ce qui semble indiquer que l'option -u username ne fonctionne pas comme prévu.

Mon attente est que Sudo -u root some_command exécute some_command avec les privilèges de root et demande donc le mot de passe de root. Évidemment pas.

TL; DR: Comment exécuter une commande nécessitant des privilèges administrateur ET ayant accès aux fichiers de "l'utilisateur connecté (normal)" sans ajouter l'utilisateur normal au fichier sudoers?

J'ai activé l'utilisateur root sous Mac OS X 10.7.

7
robertj

Sudoa toujours besoin du mot de passe de l'utilisateur qui l'exécute (et vous devez disposer d'autorisations spécifiques pour le faire, c'est-à-dire l'un des sudoersname__).

surequiert le mot de passe du compte cible (rootpar défaut, mais le compte root n'a pas de mot de passe sous OS X par défaut). Si vous utilisez plutôt suname__, vous pouvez entrer le mot de passe du compte de destination et exécuter une commande en utilisant les privilèges de cet utilisateur.

su -c some_cmd # as root
su username -c some_cmd # as username

Cela fonctionne en transmettant tous les arguments après le nom d'utilisateur au shell de connexion du compte de destination. Les shells supportent généralement les arguments -c <commands>. Dans GNU coreutils suname__, il existe un argument réel -c command à suqui peut être placé avant le nom d'utilisateur.


Vous pouvez susur un autre compte d'utilisateur (en utilisant le mot de passe de l'autre compte d'utilisateur), et Sudoà partir de là, à condition que l'autre compte soit un sudoername__.

Si vous ne souhaitez ni saisir le mot de passe d'un autre compte, ni donner à votre compte habituel les autorisations sudoersname__, vous êtes quasiment à court d'options, sauf si vous envisagez SSH avec une authentification par clé ou quelque chose du genre.

13
Daniel Beck

Sauf si vous avez réellement "besoin" de maintenir un utilisateur root séparé sur Mac OS X, il est souvent beaucoup plus facile d'obtenir un shell racine à l'aide de Sudo -s

Dans votre cas, les utilisateurs non-administrateurs ne sont pas inclus dans/etc/sudoers - vous devez donc ajouter manuellement les utilisateurs/groupes que vous souhaitez faire accepter à Sudo.

# User privilege specification
root    ALL=(ALL) ALL
%admin  ALL=(ALL) ALL

Une fois que ce sera fait, Sudo héritera de la quasi-totalité des jolies choses de votre shell, telles que PATH et d’autres variables, mais élèvera instantanément votre utilisateur non-administrateur à la racine. L'inconvénient de l'activation de root est le temps et le risque de sécurité d'une personne qui se connecte réellement localement ou à distance en tant que root.

N'oubliez pas que Sudo demande le mot de passe de l'utilisateur qui s'est connecté à l'écran loginwindow. su - veut le mot de passe du compte racine, Sudo -s utilise l'élévation de privilèges pour utiliser le mot de passe de l'utilisateur actuel pour devenir root sans avoir besoin de mot de passe root (ou dans votre cas le réel).

5
bmike

Si vous utilisez un compte standard (généralement pour des raisons de sécurité) et que vous connaissez un nom d'utilisateur et un mot de passe d'administrateur, vous pouvez utiliser su -l admin_user. Après avoir saisi le mot de passe, vous agissez maintenant, pour tous les effets, en tant qu’administrateur. Ensuite, vous pouvez Sudo au contenu de votre coeur. Maintenant, juste logout pour revenir à votre compte ordinaire d'origine.

2
Erik Neves

mon terminal exécutable ne peut pas réaliser ce qu'il veut, mais en faisant cette opération ennuyeuse:

Ouvrez App> Utilitaire> Terminal.app;

~ utilisateur $ Sudo/PATH_TO_TERMINAL_EXEC

Obtenir des privilèges d'administrateur;

Terminé.

... c'est ce qu'il y a dans terminal_executable

#!/bin/bash

echo PATCHING HOSTS FILE...!
echo  >> /etc/hosts
echo \# IsPatched >> /etc/hosts
echo 127.0.0.1 somewebsite.com >> /etc/hosts

... Ce que j'ai déjà essayé, c'est

#!/bin/bash

tmpvar=$(whoami)
echo TRYING!
su $tmpvar echo 127.0.0.1 somesite.com >> /etc/hosts

ou

su cuskus -c Sudo -s echo 127.0.0.1 somesite.com >> /etc/hosts

vient de recevoir la fenêtre #!/bin/bash après avoir demandé le mot de passe, mais ne peut exécuter aucun code en raison de privilèges.

0
cuskus