2008-10-15 14 views

Répondre

50

Chaque processus UNIX est associé à 3 UID. Le privilège Superuser est UID = 0.

réel UID

Ceci est l'UID de l'utilisateur/processus qui a créé ce processus. Il ne peut être modifié que si le processus en cours a EUID = 0.

UID effectif

Cet UID est utilisé pour évaluer les privilèges du processus d'effectuer une action particulière. EUID peut être changé en RUID, ou SUID si EUID! = 0. Si EUID = 0, il peut être changé en n'importe quoi.

UID enregistrés

Si vous exécutez un fichier exécutable avec le bit set-UID, le processus en cours d'exécution résultant commencera avec un UID réel du réel utilisateur en cours d'exécution, et un UID effectif et enregistré du propriétaire du fichier exécutable. Si le processus appelle ensuite setuid() ou seteuid() pour changer leur UID effectif, ils peuvent toujours récupérer leurs privilèges d'origine grâce à l'UID sauvegardé. Si le bit set-UID n'est pas défini, SUID sera le RUID.

+1

Quel est le but de l'UID enregistré? – raldi

+1

Pour des raisons de sécurité et d'audit, c'est-à-dire pour déterminer quel compte d'utilisateur a réellement lancé le binaire? Si ce n'était pas le cas, tout ce que vous pourriez obtenir est l'UID du propriétaire du fichier car l'exécution avec les privilèges du propriétaire du fichier est ce à quoi sert le bit SUID. –

+14

L'UID enregistré permet à un processus de basculer son UID effectif vers son UID réel, puis de le ré-afficher; sinon, ce serait une opération à sens unique. – MarkR

6

Le véritable UID est l'ID de l'utilisateur qui a lancé un processus.

L'UID effectif est généralement le même que l'UID réel. Il est différent que si:

  • l'exécutable a le bit setuid, et le propriétaire exécutable est différent de l'utilisateur appelant

  • ou si un processus setuid appelle setuid (2). Si le processus a des privilèges de super-utilisateur, tout argument de setuid (2) est autorisé (mais alors tous les * -uids sont mis à la même valeur); sinon, setuid (2) peut être appelé avec le real-uid ou l'uid-effectif ou l'uid-sauvé.

Les sauvés-uid est le uid le processus avait quand il a commencé, et il est enregistré afin d'être autorisé comme argument aux différents ensemble * appels système uid. Notez qu'un processus avec un privilège de super-utilisateur appelant setuid (2) pour changer son uid effectif aura aussi l'uid réel et l'uid sauvegardé à la même valeur, donc le seteuid (2) non-POSIX devrait être utilisé à la place.

Tout ce qui précède s'applique également aux identifiants de groupe (real | effective | saved).

+0

La deuxième puce n'est pas correcte - l'appel de setuid() ne rendra pas l'EUID différent du RUID à moins que le processus n'ait précédemment eu RUID! = EUID (il pourrait donc rétablir l'état au démarrage du programme). Le reste de la balle est plus ou moins précis. –

+0

Merci pour la suggestion; Je crois avoir corrigé la deuxième puce en ajoutant un mot. – tzot

4

Outre les UID réels, effectifs et enregistrés, les systèmes Unix avec audit activé sont également dotés de l'UID d'audit. AUID d'un processus identifie l'utilisateur qui a démarré le processus; il n'est pas modifié par setuid (2) ou seteuid (2). L'objectif est qu'il reste constant tout au long du processus et qu'il est utilisé uniquement pour marquer les enregistrements d'audit. Ainsi, si un utilisateur exécute un shell privilégié (même un utilisateur autorisé via su ou sudo), les enregistrements d'audit de ce processus sont étiquetés à partir de cet utilisateur.

1

Chaque processus Linux a 3 UID qui lui sont associés.

  • réel UID: L'UID du processus qui a créé ce processus.
  • Effective UID: Ceci est utilisé pour évaluer les privilèges du processus pour effectuer une action particulière.
  • Enregistré UID: Pour le fichier d'image binaire avec un bit setuid dessus.
0

La réponse acceptée est inexact au sujet de cette véritable UD de ne peut pas être changé par personne, sauf la racine. De la page de manuel pour setuid: (je ne pouvais pas faire un commentaire)

La fonction setuid() définit les ID utilisateur réels et efficaces et le sauvé set-user-ID de le processus en cours de la valeur spécifiée. La fonction setuid() est autorisée si l'ID utilisateur effectif est celui du super-utilisateur ou si l'ID utilisateur spécifié est identique à l'ID utilisateur effectif. Si ce n'est pas le cas, mais que l'ID utilisateur spécifié est le même que l'ID utilisateur réel , setuid() définira l'ID utilisateur effectif sur l'ID utilisateur réel.

Questions connexes