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?
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:
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:
/etc
)/lib
et /usr/lib
) ou binaires (/bin
, /usr/bin
)renice
)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.