Existe-t-il un moyen d'identifier si, en tant qu'utilisateur ordinaire, j'ai le droit d'émettre une commande.
Par exemple; Je veux vérifier si j'ai le droit d'émettre la commande d' arrêt avant de la lancer.
Quelque chose comme les commandes suivantes
-> doIhaveRightToIssue shutdown
-> Yes/No
command-line
permissions
Bernhard Colby
la source
la source
sudo
) et de découvrir. Les commandes en mode texte peuvent avoir besoinsudo
et les commandes graphiques peuvent avoir besoingksudo
. Vous pouvez également vérifier où la commande est installéewhich command
. Si dans/sbin
ou/usr/sbin
- vous pouvez vous attendre à ce que la commande ait besoin desudo
ougksudo
.Réponses:
Le cas le plus simple est celui d'un exécutable binaire comme
gzip
. Tout d'abord, nous localisons l'exécutable:Ensuite, nous regardons les attributs de ce fichier:
Les trois x nous indiquent que le fichier peut être exécuté par le propriétaire (le premier
root
), ou n'importe qui dans le grouperoot
(le deuxièmeroot
) et n'importe qui d'autre, respectivement. Votre utilisateur est donc autorisé à exécuter le programme.Cependant, votre exécutable peut être un fichier de script qui appelle d'autres exécutables à l'intérieur. Vous pourrez peut-être exécuter le script mais pas les programmes appelés à l'intérieur. Il n'y a aucun moyen de déterminer si votre utilisateur est autorisé à le faire, à part l'essayer.
Ensuite, il y a des cas spéciaux comme
shutdown
- c'est vraiment un lien symbolique vers un utilitaire de base appelésystemctl
, qui a ses propres mécanismes pour déterminer si vous êtes autorisé à l'appeler, et pour vous demander votre mot de passe sudo si vous ne le faites pas, par exemple .(À propos de la
which
commande: cela localise les exécutables dans votre $ PATH que vous êtes autorisé à exécuter et vous indique celui que vous utilisez si vous en avez plusieurs avec le même nom dans $ PATH. Il ne localise pas n'importe quel exécutable. I utilisez-le ici comme exemple de recherche de l'autorisation. Le fait dewhich
trouver l'exécutable indique déjà que vous êtes autorisé à l'exécuter.)la source
which
La commande doit être suffisante pour les fichiers qui résident dans l'un des répertoires ajoutés à la$PATH
variable. Par exemple, fairesudo chmod 700 /bin/nano
ou lessudo chmod 744 nano
causeswhich
pour produire aucune sortie. Pour les scripts locaux, qui résident ailleurs que dans l'un desPATH
répertoires,ls -l
ou lesstat
appels feront l'affaire. Bonne réponse, mais veuillez ajouter cette information à votre messagestat -c '%a' /bin/gzip
pour obtenir755
par exemple.Avec
sudo
:Si je n'ai pas eu l'autorisation,
sudo
je me plaindrai au lieu de montrer la commande.Avec polkit, vous vérifiez l'action que vous souhaitez exécuter:
Trouver l'action pertinente est une question différente.
la source
sudo -l
même si vous n'êtes pas un sudoer - c'est tout l'intérêt de-l
- pour vous dire si vous pouvez exécuter une commande avec sudo.Vous pouvez utiliser:
command -v shutdown
renvoie le chemin d'accès à lashutdown
commande.test -x
vérifie si ce chemin vous est exécutable.Notez que bien que vous puissiez exécuter la commande, la commande peut toujours échouer car elle ne dispose pas des autorisations suffisantes pour exécuter la tâche. C'est le cas commun sur les systèmes de type Unix qui, plutôt que de restreindre l'accès pour exécuter une commande, restreignent l'accès aux opérations que les programmes peuvent réellement faire.
la source
alias shutdown="shutdown now"
?$(which shutdown)
ou$(shopt -u expand_aliases && command -v shutdown)
. Ce problème n'apparaît cependant qu'en mode interactif.Ça peut être parfois un peu difficile ...
Tout d'abord, regardez les autorisations avec
ls -l
...Si le dernier / troisième triplet contient un x ("peut s'exécuter"), alors d' autres - et cela signifie que vous - pouvez l'exécuter ... Si c'est un script shell ou quelque chose comme ça, alors d' autres auraient besoin de r (" peut également lire ").
Si d' autres n'ont pas la permission d'exécution mais que le groupe (le deuxième triplet) le fait, vous pouvez l'exécuter si vous êtes membre du groupe - dans l'exemple ci-dessus, bin . Par exemple, le groupe de roues est souvent utilisé pour limiter les personnes pouvant s'exécuter
su
, de sorte que seuls les utilisateurs appartenant à ce groupe pourraient l'exécuter. Un autre exemple consiste à créer un groupe pour les développeurs et à limiter l'exécution du compilateur C et de ces outils à ce groupe.S'il y a un signe de fin + après le dernier triplet, cela signifie que AccessControllLists est utilisé - cela peut ajouter des droits d'exécution à des utilisateurs et des groupes supplémentaires.
+++
Même si vous êtes en mesure d'exécuter la commande, la commande peut dépendre de l'accès aux fichiers, répertoires et / ou périphériques auxquels vous n'avez pas accès - cela peut limiter ce que vous pourrez faire (vous ne pourrez peut-être pas faire n'importe quoi).
Enfin, bien que vous puissiez être autorisé à exécuter une commande, la commande elle-même peut vérifier votre identité et refuser de vous laisser l'utiliser sauf si vous êtes répertorié dans un fichier de configuration ou si vous êtes certains utilisateurs (par exemple, root ). Par exemple, la
mount
commande n'autorisera que root à monter n'importe quel périphérique - les utilisateurs normaux ne sont autorisés qu'à monter des périphériques répertoriés comme tels dans / etc / fstab ... qui peuvent ne pas en être. Si vous n'êtes pas root et essayez de monter quelque chose, vous vousmount
plaindrez et refuserez de monter l'appareil. Un autre exemple estsudo
, qui s'exécutera pour n'importe qui, mais seuls les utilisateurs répertoriés dans / etc / sudoers seront réellement autorisés à exécuter les choses en tant que root .la source
L' utilisation
which
,type
,command
etc. , est une solution pratique qui fonctionne dans 99% des cas, mais pour être 100% sûr vous devrez inspecter manuellement chaque répertoire exécutable répertorié dans votre$PATH
. De nombreux shells (y comprisbash
) préfixeront votre commande avec entres from$PATH
et tenteront d'exécuter ces fichiers à plusieurs reprises jusqu'à ce qu'ils réussissent. Puisqu'ilwhich
ne peut pas vraiment exécuter la commande, il lui est impossible de prédire quel fichier votre shell va vraiment choisir.Par exemple, imaginez que j'ai
PATH=/opt/arm/bin:/bin
, les deux répertoires contenant des fichiers exécutables, mais pour des architectures différentes. L'exécutionwhich dd
reviendra/opt/arm/bin/dd
(en supposant que j'ai les autorisations pour l'exécuter), car cette entrée vient en premier. Cependant, lorsque je lancedd
dans mon shell,/bin/dd
sera exécuté, car/opt/arm/bin/dd
ne fonctionnera pas. La même situation peut se produire en cas de binaires corrompus, de bibliothèques manquantes, etc. En fin de compte, il n'y a aucun moyen sûr de savoir si vous pourrez exécuter une commande ou non, à part essayer.Un autre aspect est ce que vous considérez comme "avoir des autorisations". En tant qu'utilisateur, j'ai des autorisations pour exécuter
rm ~/file
mais pasrm /root/file
. Encore une fois, il n'y a aucun moyen général de savoir cela sans inspection manuelle, ou émission de la commande et observation des résultats.la source