Comment le système d'exploitation sait-il qu'une commande a besoin de sudo?

16
  1. Lorsque vous exécutez un exécutable, le système d'exploitation refuse parfois votre autorisation. Par exemple, l'exécution make installavec le préfixe étant un chemin d'accès système sera nécessaire sudo, tandis qu'avec le préfixe étant un chemin d'accès non système ne sera pas demandé sudo. Comment le système d'exploitation décide-t-il que l'exécution d'un exécutable nécessiterait plus de privilèges qu'un utilisateur, avant même que le programme ne fasse quelque chose?
  2. Parfois, l'exécution d'un programme ne se verra pas refuser l'autorisation, mais le programme pourra faire plus de choses s'il est exécuté avec sudo. Par exemple, lors de l'exécution dusur un répertoire système, seul sudocelui-ci pourra accéder à certains répertoires. Pourquoi le système d'exploitation ne refuse-t-il pas l'autorisation d'exécuter un tel programme, ou une notification amicale plus de privilèges est préférée, avant que le programme puisse s'exécuter?
  3. Est - il vrai que chaque fois que des sudoœuvres, sutravailleront aussi, et chaque fois que des sutravaux, sudotravaillera également? ou avec su, un utilisateur peut faire plus qu'avec sudo? Comment le système d'exploitation décide-t-il quand il sudofonctionne et quand suest nécessaire?
StackExchange pour tous
la source
A-t-on répondu à cette question ou souhaitez-vous plus d'informations?
ctrl-alt-delor

Réponses:

14
  1. Parfois, le message "Autorisation refusée" est dû à des autorisations de système de fichiers vous refusant l'accès en écriture, par exemple. L'exécutable / outil vérifie simplement si le système de fichiers vous accorde suffisamment d'autorisations pour faire ce que vous êtes sur le point de faire et génère une erreur si elle est refusée par le système de fichiers. D'autres fois, l'outil lui-même vérifiera votre ID utilisateur avant de vous permettre de continuer à l'utiliser.
  2. Lorsque vous exécutez un programme avec sudovous l'exécutez sous le nom d'un autre utilisateur. Si cet utilisateur est «capable de faire plus de choses» que votre utilisateur et que la sudoconfiguration vous permet de faire ces choses au nom de l'autre utilisateur, alors oui, sudovous permettra de faire plus de choses. Ce n'est cependant pas nécessaire. Si vous vous contentez de vous accrocher sudoau début de la ligne de commande, vous êtes en fait sudocomme root, donc vous êtes généralement capable de faire plus de choses qu'un simple mortel.
  3. Certainement pas. Pour l'utiliser, sudovous devez fournir votre propre mot de passe utilisateur, puis vous êtes autorisé à faire certaines choses au nom de l'utilisateur cible. Pour l'utiliser su, vous avez besoin du mot de passe de l'utilisateur cible et si vous l'avez, vous devenez cet utilisateur cible en ce qui concerne le système et pouvez faire tout ce que l'utilisateur peut faire.

Voir également

Joseph R.
la source
Merci. Est-ce que "les autorisations du système de fichiers vous refusent l'accès en écriture" = "le mode d'accès du fichier n'a pas de bit d'exécution défini pour l'utilisateur, qui peut être défini par chmod"?
StackExchange for All
1
@Tim En fait, il = "le mode d'accès au fichier n'a pas de bit d' écriture défini pour l'utilisateur". Et oui, cela peut bien sûr être résolu à chmodcondition que vous soyez le propriétaire du fichier ou root.
Joseph R.
Est-ce que sudo est nécessaire, dépend entièrement et uniquement si le bit d'exécution n'est pas défini pour l'utilisateur? Voir unix.stackexchange.com/q/147052/674
StackExchange for All
@Tim De toute évidence, vous avez besoin du bit d'exécution pour pouvoir exécuter l'exécutable en premier lieu.
Joseph R.
1
@JosephR. Pas évident. chmod 400 hello && /lib64/ld-linux-x86-64.so.2 ./helloproduit un joli "Hello, World!" production.
doneal24
24

Aux fins que vous avez décrites, le système d'exploitation ne décide pas si vous avez besoin de sudo pour exécuter initialement le programme. Au lieu de cela, une fois que le programme a commencé à s'exécuter et essaie ensuite de faire quelque chose qui n'est pas autorisé par l'utilisateur actuel (comme écrire un fichier /usr/binpour installer une nouvelle commande), le système d'exploitation empêche l'accès au fichier. L'action à entreprendre dans cette condition appartient au programme; makearrête de fonctionner mais dupasse au fichier / répertoire suivant après avoir imprimé un message.

Les commandes suet sudosont deux manières différentes d'exécuter un programme avec des privilèges root. Ils peuvent différer dans des détails mineurs tels que le contenu de l'environnement au démarrage du nouveau programme, selon les options utilisées. L'OS n'a pas besoin de décider quand l'un ou l'autre pourrait fonctionner.

Greg Hewgill
la source
6

suet sudosont des programmes privilégiés. suchange (après une authentification réussie) l'identifiant réel et effectif de l'utilisateur et du groupe en celui de l'utilisateur auquel vous vous suadressez. Ainsi, suest similaire à login. Notez que cela supeut être utilisé pour passer à n'importe quel utilisateur, pas seulement root. sudomodifie également les identifiants d'utilisateur et de groupe réels et efficaces. Jusqu'à ce point suet sudosont similaires (mais sans rapport), au-delà, ils sont très différents.

Avec su, vous devez connaître le mot de passe de la cible et une fois authentifié, vous pouvez faire ce que vous voulez en tant qu'utilisateur. L'utilisation de supeut être limitée par la mise SU_WHEEL_ONLYen /etc/login.defs. S'il est défini, seuls les utilisateurs du groupe wheelpeuvent utiliser su, sinon il n'est pas restreint. En dehors de cela, suc'est tout ou rien.

sudoest complètement différent à cet égard. Avec sudovous pouvez définir des politiques assez complexes /etc/sudoerssur ce que le sudoer (l'utilisateur qui appelle sudo) est autorisé à faire. Par exemple, vous pouvez définir des stratégies dans lesquelles certains utilisateurs peuvent exécuter uniquement certains programmes avec certains privilèges, tandis que d'autres utilisateurs peuvent exécuter d'autres programmes avec d'autres privilèges.

L'une des caractéristiques frappantes de sudoest que vous pouvez le configurer de telle sorte qu'un utilisateur doit s'authentifier avec son propre mot de passe (au lieu de celui de la cible). Ainsi, sudoest devenu très populaire parmi les administrateurs, car il permet d'autoriser les utilisateurs à effectuer uniquement des opérations privilégiées définies sans distribuer le mot de passe du superutilisateur, et vous obtenez un certain degré de responsabilité.

contre-mode
la source
2

tl; dr L'accès est déterminé par l'utilisateur qui exécute l'application et sudoexécute les applications en tant qu'utilisateur différent.

Version complète:

Comment le système d'exploitation sait-il qu'une commande a besoin de sudo?

Ça ne sait pas. UNIX gère les autorisations non pas au niveau de l'application mais au niveau du système de fichiers: des autorisations sont accordées aux utilisateurs pour accéder à des fichiers spécifiques. Les applications sont ensuite exécutées au nom de l'utilisateur - chaque processus en cours d'exécution est associé à un utilisateur. Cet utilisateur est utilisé pour déterminer les autorisations pour cette application. Sudo fonctionne en exécutant des applications pour le compte d'un autre utilisateur (avec les autorisations associées à cet autre utilisateur), à savoir rootle superutilisateur.

Quant à vos exemples:

  1. Si l'utilisateur a un accès en écriture à un répertoire particulier, il peut le faire make installdans ce répertoire. Sinon, ils peuvent l'avoir rootfait - en utilisant sudo.

  2. Si vous ne pouvez pas accéder aux fichiers d'un répertoire, l' duexécution pour vous ne peut pas non plus y accéder. rootpeut accéder à pratiquement tous les fichiers, donc sudo du( duexécuté au nom de root) peut également y accéder.

Est-il vrai que chaque fois que sudo fonctionnera, su fonctionnera également, et chaque fois que su fonctionnera, sudo fonctionnera également?

Oui et non. Oui, si le programme est réellement exécuté, il devrait se comporter de la même manière sous sudoet su. Cependant, sudofournit un contrôle plus précis de qui peut exécuter quoi par un ensemble de règles stockées dans un /etc/sudoersfichier. suest plus simple - si vous connaissez le mot de passe de l'utilisateur cible, vous pouvez exécuter des programmes au nom de cet utilisateur.

Dernière remarque: la façon dont l'application gère le refus d'accès (où elle abandonne, ignore ou avertit l'utilisateur) dépend de l'application.

el.pescado
la source
1

Personne n'a encore de ✓, alors j'ai préparé une réponse qui a tout ce à quoi je pouvais penser.

1 Lorsque vous exécutez un exécutable, le système d'exploitation refuse parfois votre autorisation. Par exemple, l'exécution de make install avec le préfixe étant un chemin d'accès système aura besoin de sudo, tandis que le préfixe étant un chemin d'accès non système, il ne sera pas demandé de sudo. Comment le système d'exploitation décide-t-il que l'exécution d'un exécutable nécessiterait plus de privilèges qu'un utilisateur, avant même que le programme ne fasse quelque chose?

Non, cela n'est pas fait lors du démarrage d'un exécutable. Cela se fait lorsque l'exécutable essaie de faire quelque chose.

Le système d'exploitation vérifiera les autorisations et les capacités du système de fichiers (celles-ci ne sont pas couvertes par les autorisations du système de fichiers, et comprendra la réduction du niveau agréable, mknode, certaines choses de réseau de bas niveau, la suppression des processus des autres, le redémarrage, la définition de l'heure, etc.). Si vous ne disposez pas des autorisations, vous ne pouvez pas le faire. Root a un ensemble complet de capacités, y compris CAP_DAC_OVERRIDE (ignorer l'autorisation de fichier).

2 Parfois, l'exécution d'un programme ne se verra pas refuser l'autorisation, mais le programme pourra faire plus de choses s'il est exécuté avec sudo. Par exemple, lors de l'exécution de du sur un répertoire système, uniquement avec sudo, il pourra accéder à certains répertoires. Pourquoi le système d'exploitation ne refuse-t-il pas l'autorisation d'exécuter un tel programme, ou une notification amicale plus de privilèges est préférée, avant que le programme puisse s'exécuter?

L'OS ne peut pas savoir ce que fera le programme. Il appartient donc au programme de vérifier les autorisations avant de commencer et de décider quoi faire. Il ne doit cependant pas le faire.

Remarque: sur Android, il y a un manifeste, dans ce dossier, l'application déclare les privilèges qu'elle peut utiliser. L'OS va tuer toute application qui essaie d'utiliser un privilège qu'il ne déclare pas, et l'OS ne garantit pas toujours qu'un privilège peut être honoré. par exemple, l'accès au réseau peut ne pas être disponible.

2 Est-il vrai que chaque fois que sudo fonctionne, su fonctionne également, et chaque fois que su fonctionne, sudo fonctionne également? ou avec su, un utilisateur peut faire plus qu'avec sudo? Comment le système d'exploitation décide-t-il quand sudo fonctionne et quand su est nécessaire?

sudoet sufaire à peu près le samething. Certaines différences concernent la gestion des variables d'environnement et d'autres évitements de problèmes de sécurité. Cependant, ce sont deux outils pour vous permettre de devenir un autre utilisateur, et tous deux ont un utilisateur root par défaut.

su était l'outil d'origine, il vous oblige à entrer le mot de passe de l'utilisateur / groupe que vous modifiez.

sudoest plus récent et requiert, par défaut, que vous saisissiez votre propre mot de passe, mais peut être configuré pour accepter le mot de passe de l'utilisateur / groupe vers lequel vous basculez, ou aucun mot de passe. Il permet également beaucoup de configuration, des commandes avec lesquelles il fonctionnera, pour qui et comment il s'authentifiera avec ce programme pour cet utilisateur sur cette machine. Il y a aussi sudoeditcela fait partie de sudoet peut être utilisé pour permettre la modification en tant qu'utilisateur différent et éviter le problème de sécurité de sous-décortiquer un éditeur (appeler exec à partir de l'éditeur pour exécuter un processus arbitraire avec des privilèges élevés).

ctrl-alt-delor
la source