2 votes

Accorder le privilège sudo à un non-administrateur, mais avec `~` étant sa propre maison~~.

J'ai entendu dire qu'il était conseillé, dans l'idée générale du moindre privilège, que les utilisateurs de type Unix créent un autre compte sans le privilège sudo, en plus du compte intégré avec le privilège sudo. En Mac, cela se traduit par : il faut créer un compte personnel pour un usage quotidien, en plus du compte administrateur fourni avec l'ordinateur, réservé uniquement en cas de nécessité.

Pour être plus concret, disons bruce est un bâton, que j'utilise quotidiennement, et batman est un administrateur, que je n'utilise que lorsque cela est nécessaire. Mais comment puis-je, en me connectant batman effectuer des tâches sudo, au nom de bruce c'est-à-dire avec bruce de l'entreprise ~ y $(whoami) comme si je me connectais en tant que bruce avec des privilèges ?

Pour illustrer cela, définissez /User/bruce/test.sh :

#!/usr/bin/env bash

whoami
cd ~ && pwd
ls ~/Library/Preferences/Preferences/

(Oui, j'ai fait chmod 744 test.sh ) J'ai choisi la dernière ligne à des fins d'illustration artificielle que, normalement, il semble, ~/Library/Preferences/Preferences/ n'est pas accessible à un membre du personnel (c'est-à-dire un non-administrateur).

Ce que j'ai l'intention de recevoir, c'est bruce , /Users/bruce et réussi ls sortie.


La première tentative est que, en effet, si j'ouvre bruce Le terminal de l'entreprise, mais login la fête de batman (afin d'obtenir le privilège sudo), et exécutez

sudo /Users/bruce/test.sh

Je reçois root , /Users/batman et réussi ls sortie de ~/Library/Preferences/Preferences/ montrant que la maison est celle de Batman, ce qui n'est pas étonnant.

Ou, un duplicata possible (a) affirme que sudo -i -u bruce me permet d'exécuter des commandes comme bruce . Mais non ! Si j'ouvre (comme ci-dessus) bruce Le terminal de l'entreprise, login la fête de batman et exécutez

sudo -i -u bruce /Users/bruce/test.sh

Je reçois bruce , /Users/bruce et ls: : Permission denied .

Encore un autre duplicata possible (b) déclare que sudo -H -u bruce utilise la maison de Bruce. Eh bien, encore une fois, quand j'ouvre bruce Le terminal de l'entreprise, login la fête de batman et exécutez

sudo -H -u bruce bash /Users/bruce/test.sh

Moi aussi, j'ai bruce , /Users/bruce et ls: : Permission denied .


Le lecteur pourrait penser que ma demande est déraisonnable ; mais je veux juste savoir s'il est possible d'accorder temporairement le privilège sudo à un personnel -- ce qui peut être pratique à certains moments. Par exemple, si cela peut être fait, lorsque je fais un court script je n'ai plus besoin d'éviter $(whoami) o ~ ce qui le rend plus flexible. Ou encore, lorsque j'exécute un court script ce que le site que j'ai googlé suggère, je n'ai pas non plus à remplacer $(whoami) par bruce et/ou ~ par /Users/bruce .

La dernière fois, autant que je m'en souvienne, que j'ai été irrité par la restriction de privilège, c'est probablement lorsque j'ai exécuté un script fait par un profane, que j'ai googlé, afin d'installer une police LaTeX.

Cependant, pour l'instant, je ne me souviens que d'un seul cas. C'est-à-dire, après que j'ai, en me connectant à Batman, brew - quelque chose en utilisant homebrew (car il requiert le privilège sudo), et logout - en tant que Bruce et brew - quelque chose d'autre. Homebrew se plaignait d'un grand nombre de permissions incorrectes de certains dossiers sous /usr/local et m'a poussé à me présenter sudo chown -R $(whoami) blablabla . Il me semblait que brew avait fixé une certaine permission à batman et ça me rendait folle de les réparer un par un.

Que faites-vous pour contourner le moment, par exemple, que brew nécessite sudo, tout en utilisant un compte personnel ? Ou, après tout, la pratique selon laquelle le compte utilisé quotidiennement doit contenir le moindre privilège est-elle simplement irréaliste ?

1voto

klanomath Points 63400

Il y a une faille dans le dossier personnel de bruce probablement : les permissions de ~/Library/Preferences/Preferences sont fausses. Par conséquent, le script ne fonctionne pas comme prévu.

Vérifiez la sortie suivante dans mon environnement en exécutant le script connecté en tant qu'administrateur. J'ai légèrement modifié le script en remplaçant ls ~/Library/Preferences/Preferences par ls -la ~/Library/Preferences | grep "loginwindow"

/Users/bruce/bin/sh/test-env.sh
batman
/Users/batman
-rw-------    1 batman  staff     192 27 Nov 13:42 com.apple.loginwindow.plist
-rw-------    1 batman  staff     198 24 Okt 21:43 loginwindow.plist

sudo /Users/bruce/bin/sh/test-env.sh
root
/Users/batman
-rw-------    1 batman  staff     192 27 Nov 13:42 com.apple.loginwindow.plist
-rw-------    1 batman  staff     198 24 Okt 21:43 loginwindow.plist

sudo -i -u bruce /Users/bruce/bin/sh/test-env.sh
bruce
/Users/bruce
-rw-------    1 bruce  staff      95 27 Nov 13:40 com.apple.loginwindow.plist
-rw-------    1 bruce  staff     198 27 Nov 13:36 loginwindow.plist

sudo su bruce
/Users/bruce/bin/sh/test-env.sh
bruce
/Users/bruce
-rw-------    1 bruce  staff      95 27 Nov 13:40 com.apple.loginwindow.plist
-rw-------    1 bruce  staff     198 27 Nov 13:36 loginwindow.plist
$USERNAME = root #check this by entering `env` in the shell additionally

sudo su -l bruce
/Users/bruce/bin/sh/test-env.sh
bruce
/Users/bruce
-rw-------    1 bruce  staff      95 27 Nov 13:40 com.apple.loginwindow.plist
-rw-------    1 bruce  staff     198 27 Nov 13:36 loginwindow.plist
$USERNAME = <empty>

De plus, il y a un grand malentendu sur la façon dont sudo/su fonctionne réellement. Votre admin batman jamais exécute une commande "au nom" d'un autre utilisateur. Si vous entrez "sudo some_command" ou "sudo -i -u user some_command", c'est toujours la position élevée du super utilisateur (et le privilège d'un administrateur d'exécuter sudo comme déterminé par le fichier sudoers et de "se faire super utilisateur" temporairement) qui "exécute la commande avec succès au nom d'un autre utilisateur".

Si vous devez exécuter quotidiennement des commandes avec des privilèges élevés avec votre utilisateur non administrateur, ajoutez-le au fichier sudoers et n'ajoutez qu'un nombre restreint de commandes.

Exemple (contrôle du serveur web Apache) :

bruce ALL=(ALL) /usr/sbin/apachectl

ou sans l'obligation d'entrer un mot de passe après avoir exécuté sudo apachectl comme Bruce :

bruce ALL=(ALL) NOPASSWD: /usr/sbin/apachectl

Ou modifiez les scripts de manière appropriée pour rester dans le domaine de Bruce.

Cela dit, le conseil/pratique selon lequel "l'utilisateur quotidien ne devrait pas être un sudoer" est toujours valable.


Homebrew est une bête différente : il est conçu pour être installé par un seul utilisateur - un utilisateur administrateur. La plupart des applications/exécutables fournis par l'environnement homebrew peuvent être lancés par un utilisateur standard après avoir modifié le $PATH de l'utilisateur ou utilisé le chemin complet.

Plusieurs guides existent sur la façon de configurer homebrew en tant qu'environnement multi-utilisateurs (par exemple Ma configuration multi-utilisateurs Homebrew ). Je ne sais pas si cela s'applique toujours aux systèmes OS X/versions de brew plus récents.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X