Qu'est-ce qui détermine quelles commandes Linux nécessitent un accès root?

23

Qu'est-ce qui détermine quelles commandes Linux nécessitent un accès root? Je comprends les raisons pour lesquelles il est souhaitable, disons, de apt-getdemander un rootprivilège; mais qu'est-ce qui distingue ces commandes des autres? S'agit-il simplement de la propriété et des autorisations d'exécution de l'exécutable?

Brian Dobby
la source
2
C'est principalement une fonction du fichier qu'ils touchent et des fonctions qu'ils appellent.
Federico klez Culloca
9
Certaines applications doivent avoir accès aux fichiers / répertoires appartenant à root. Donc, ils appellent openet obtiennent une "autorisation refusée". Certaines applications vérifient getuidet cessent de fonctionner si elles ne sont pas appelées par root. Certains appartiennent physiquement à root et seul le propriétaire peut les exécuter (voir chmod). Si vous demandez s'il y a une marque "besoins racine" dans l'en-tête de l'application - la réponse est non. Il n'y a rien de tel afaik
user996142
1
ps: plusieurs appels système (comme la liaison à un port bien connu <1024) peuvent également nécessiter un accès root.
user996142
apt-get ne nécessite pas du tout de root. C'est dans le répertoire / usr / bin, voir askubuntu.com/a/440791/169736
Braiam
Vous pouvez clarifier ce que vous entendez par «exiger» ici. Voulez-vous dire que le programme ne s'exécutera que si vous êtes root (ou si vous disposez des autorisations sudo), ou qu'il doit être root pour faire son travail correctement?
jamesqf

Réponses:

15

Sous Linux, les privilèges de racine étaient à un moment donné divisé en « capacités », vous pouvez ainsi obtenir une liste complète des privilèges spéciaux de la racine en regardant dans cette documentation: man 7 capabilities.

Pour répondre à votre question, une commande nécessite d'être exécutée en tant que root lorsqu'elle a besoin de l'un de ces privilèges, et son exécutable non script n'a pas la capacité appropriée définie dans ses métadonnées de fichier (par exemple, si un script python nécessite la capacité, alors la capacité devrait être dans l'interpréteur python spécifié dans la ligne shebang).

Notez que certaines commandes qui ont besoin d'un accès root n'ont pas besoin de quelque chose comme sudoparce qu'elles ont le bit SUID défini dans leur exécutable. Ce bit fait que l'exécutable s'exécute en tant que propriétaire (généralement root) lorsqu'il est exécuté par toute personne disposant d'un accès d'exécution. Un exemple est sudolui - même, car le changement d'utilisateurs est une action privilégiée qu'il doit faire.

EDIT: Je note de votre question que vous pourriez avoir l'idée que vous pouvez déterminer si une commande aura besoin d'un accès root avant de l'exécuter. Ce n'est pas le cas. Un programme peut parfois nécessiter des privilèges root et d'autres fois pas, et cela pourrait être une décision prise par le programme en raison des données fournies lors de l'exécution. Prenons, par exemple, un appel vim, comme ça sans arguments, puis à travers une série de touches et de collage, lui disant d'écrire quelque chose dans un fichier qu'il n'a pas la permission d'écrire, ou peut-être d'exécuter une autre commande qui elle-même nécessitera les privilèges root. Rien sur la commande avant son exécution ne pouvait indiquer qu'elle nécessiterait éventuellement un accès root. C'est quelque chose qui ne peut être déterminé qu'au moment où il essaie de faire quelque chose qui l'exige.

Quoi qu'il en soit, voici très peu d'exemples de la page de manuel référencée des privilèges de root:

  • Effectuer des manipulations arbitraires des UID de processus (setuid (2), setreuid (2), setresuid (2), setfsuid (2));
  • Contournez le fichier pour lire, écrire et exécuter des vérifications des autorisations. (DAC est l'abréviation de "contrôle d'accès discrétionnaire".)
  • Contourner les contrôles de permission pour envoyer des signaux (voir kill (2)). Cela inclut l'utilisation de l'opération ioctl (2) KDSIGACCEPT.
  • Effectuer diverses opérations liées au réseau:
    • configuration de l'interface;
    • administration de pare-feu IP, masquage et comptabilité;
    • modifier les tables de routage;
  • Liez un socket aux ports privilégiés du domaine Internet (numéros de port inférieurs à 1024).
  • Charger et décharger les modules du noyau (voir init_module (2) et delete_module (2));
  • Réglez l'horloge système (settimeofday (2), stime (2), adjtimex (2)); régler l'horloge (matérielle) en temps réel.
  • Effectuez une série d'opérations d'administration système, notamment: quotactl (2), mount (2), umount (2), swapon (2), swapoff (2), sethostname (2) et setdomainname (2);
  • Utilisez reboot (2) et kexec_load (2).
  • Utilisez du chroot (2).
  • Augmentez la valeur de nice du processus (nice (2), setpriority (2)) et changez la valeur de nice pour les processus arbitraires;
JoL
la source
32

Il est principalement une question de ce que l'outil ou le programme ne . En gardant à l'esprit qu'un non-superutilisateur ne peut toucher que les fichiers qu'il possède ou auxquels il a accès, tout outil qui doit être en mesure de pénétrer tout nécessitera un accès de superutilisateur pour faire ce qu'il fait. Un échantillon rapide de choses qui pourraient nécessiter un accès superutilisateur comprend, mais sans s'y limiter:

  • Ouverture d'une socket TCP d'écoute sur un port inférieur à 1024
  • Modification des configurations du système (par exemple, n'importe quoi /etc)
  • Ajout de nouvelles bibliothèques ( /libet /usr/lib) ou binaires ( /bin, /usr/bin) accessibles à l'échelle mondiale
  • Toucher tous les fichiers n'appartenant pas à l'utilisateur qui fait le toucher et qui n'ont pas un mode suffisamment permissif
  • Changer la propriété des fichiers d'autres utilisateurs
  • Définition des priorités du processus (par exemple renice)
  • Démarrage ou arrêt de la plupart des services
  • Configuration du noyau (par exemple, ajustement de la permutation)
  • Ajustement des quotas de système de fichiers
  • Écriture sur des disques "pleins" (la plupart des systèmes de fichiers réservent de l'espace à l'utilisateur root)
  • Exécution d'actions en tant qu'autres utilisateurs
DopeGhoti
la source
4
"Changer les priorités du processus" les utilisateurs non root peuvent changer les subtilités, pour être plus sympa. La seule chose qu'ils ne peuvent pas faire, c'est d'être moins gentils.
Braiam
1
Je sais que cette liste n'est pas complète, mais je pense qu'une tâche très importante que seuls les superutilisateurs peuvent faire est d'usurper l'identité - ou simplement de se connecter en tant que - d'autres utilisateurs.
phihag
J'ai ajusté la puce sur les priorités du processus et ajouté "Exécution d'actions en tant qu'autres utilisateurs". Espérons qu'avec suffisamment de temps et de commentaires, cette liste deviendra plus complète.
DopeGhoti
0

Je pense qu'il est conforme à l'identité de l'utilisateur de vérifier les autorisations, et non selon l'ordre de répartition des autorisations. Les fichiers et les utilisateurs sont privilégiés et les commandes ne doivent pas être divisées.

Aldridge
la source
3
Je ne veux pas paraître grossier, et je comprends que l'anglais n'est peut-être pas votre première langue, mais je ne comprends pas du tout cette réponse, comme ce qu'elle essaie même de dire. "conformité" signifie "accord" ou "conformité"; Je ne vois pas comment il peut être utilisé avec "l'identité de l'utilisateur". Que voulez-vous dire "afin de diviser les autorisations"? "diviser" signifie "séparer". Dont "l'ordre"? Comment les fichiers sont-ils "privilégiés" lorsqu'ils ne sont pas quelque chose qui peut agir pour utiliser n'importe quel privilège? Je suppose que je peux comprendre un peu "les commandes ne doivent pas être divisées" dans le contexte de cette question, mais c'est tout. En l'état, cela semble insaisissable.
JoL
@JoL Je pense que "l'ordre" est une erreur de traduction et devrait être "la commande", ce qui permet une analyse différente de cette phrase. Un peu maladroitement formulé pour utiliser autant que possible ce qui est dans cette réponse: "Je pense que cela est conforme à la façon dont l'identité de l'utilisateur est utilisée pour vérifier les autorisations que les autorisations ne sont pas divisées selon la commande. Les privilèges concernent les fichiers et les utilisateurs, il devrait y avoir ne pas être divisé pour les commandes. " Ce n'est pas encore trop clair, mais cela a un peu plus de sens pour moi que pour vous. J'espère que mon commentaire aidera quelqu'un à bien comprendre cette réponse et à la modifier
hvd