web-dev-qa-db-fra.com

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

Qu'est-ce qui détermine quelles commandes Linux nécessitent un accès root? Je comprends les raisons pour lesquelles il est souhaitable que, par exemple, apt-get devrait nécessiter le privilège root; 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?

24
Brian Dobby

Sous linux, les privilèges de root étaient à un moment donné divisés en "capacités", vous pouvez donc obtenir une liste complète des privilèges spéciaux de root en consultant 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 a python = le script 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 nécessitent un accès root n'ont pas besoin de quelque chose comme Sudo car 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 Sudo lui-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, en appelant vim, comme ça sans arguments, puis à travers une série de touches et de collage, en lui disant d'écrire quelque chose dans un fichier qu'il n'a pas la permission d'écrire, ou peut-être en exécutant une autre commande qui lui-même nécessitera des 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 Nice du processus (Nice (2), setpriority (2)) et modifiez la valeur Nice pour les processus arbitraires;
15
JoL

C'est principalement une question de ce que l'outil ou le programme fait. En gardant à l'esprit qu'un non-super-utilisateur ne peut toucher que les fichiers qu'il possède ou auxquels il a accès, tout outil qui doit pouvoir y pénétrer tout nécessitera un accès de super-utilisateur pour faire la chose 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 écoute TCP socket sur un port inférieur à 1024
  • Modification des configurations système (par exemple, n'importe quoi dans /etc)
  • Ajout de nouvelles bibliothèques accessibles à l'échelle mondiale (/lib et /usr/lib) ou binaires (/bin, /usr/bin)
  • 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
  • Priorités du processus d'escelation (par ex. 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
32
DopeGhoti

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.

0
Aldridge