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.
Sudo
a 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 sudoers
name__).
su
requiert le mot de passe du compte cible (root
par défaut, mais le compte root n'a pas de mot de passe sous OS X par défaut). Si vous utilisez plutôt su
name__, 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 su
name__, il existe un argument réel -c command
à su
qui peut être placé avant le nom d'utilisateur.
Vous pouvez su
sur 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 sudoer
name__.
Si vous ne souhaitez ni saisir le mot de passe d'un autre compte, ni donner à votre compte habituel les autorisations sudoers
name__, vous êtes quasiment à court d'options, sauf si vous envisagez SSH avec une authentification par clé ou quelque chose du genre.
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).
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.
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.