web-dev-qa-db-fra.com

Quel est le comportement de génération automatique d'UID d'Ubuntu?

Je suis intéressé par le cas où un nouvel utilisateur est généré et qu'aucun UID n'est donné explicitement, ce qui permet à Ubuntu d'attribuer automatiquement un UID. Je sais que par défaut, Ubuntu générera un UID supérieur à 1000, mais je veux tout savoir sur la politique de génération d'UID d'ubuntu.

Une bonne réponse à cette question éclaircira les points suivants

  • Que se passe-t-il si les deux UID suivants sont déjà utilisés: 1001, 2001 - Le prochain UID généré automatiquement sera-t-il 1002 ou 2002?
  • Y a-t-il un UID maximum? Que fait Ubuntu si un compte a déjà été attribué à l’UID maximum (mais il existe par ailleurs des UID libres)?
4
conradlee

Voir _/etc/adduser.conf_:

_# FIRST_SYSTEM_[GU]ID to LAST_SYSTEM_[GU]ID inclusive is the range for UIDs
# for dynamically allocated administrative and system accounts/groups.
# Please note that system software, such as the users allocated by the base-passwd
# package, may assume that UIDs less than 100 are unallocated.
FIRST_SYSTEM_UID=100
LAST_SYSTEM_UID=999

FIRST_SYSTEM_GID=100
LAST_SYSTEM_GID=999

# FIRST_[GU]ID to LAST_[GU]ID inclusive is the range of UIDs of dynamically
# allocated user accounts/groups.
FIRST_UID=1000
LAST_UID=29999

FIRST_GID=1000
LAST_GID=29999
_

Et, en lisant le script Perl sur $(type -p adduser) ou _/usr/sbin/adduser_, on trouve cette fonction:

_ sub first_avail_uid {
    my ($min, $max) = @_;
    printf (gtx("Selecting UID from range %d to %d ...\n"),$min,$max) if ($verbose > 1);

    my $t = $min;
    while ($t <= $max) {
       return $t if (!defined(getpwuid($t)));
       $t++;
    }
    return -1; # nothing available
}
_

Cela signifie: adduser sélectionne le premier UID libre compris entre 1000 et 29999 ou échoue.

Réponse exacte: 1002, Il en choisira un gratuitement.

Il y a IS un UID maximum, _4294967295_, car UIDs sont des champs de 32 bits, mais adduser utilise une limite inférieure.

Cependant, il y a aussi _/usr/sbin/useradd_ ATTENTIONadduser et useradd se trompent/se trompent .

man useradd me dit:

_DESCRIPTION
   useradd is a low level utility for adding users. On Debian,  
    administrators should usually use adduser(8) instead.

...  

   -u, --uid UID
       The numerical value of the user's ID. This value must be unique,
       unless the -o option is used. The value must be non-negative. The
       default is to use the smallest ID value greater than or equal to
       UID_MIN and greater than every other user.

       See also the -r option and the UID_MAX description.

...  

CONFIGURATION
   The following configuration variables in /etc/login.defs change the
   behavior of this tool:

...  

   SYS_UID_MAX (number), SYS_UID_MIN (number)
       Range of user IDs used for the creation of system users by useradd
       or newusers.

       The default value for SYS_UID_MIN (resp.  SYS_UID_MAX) is 101
       (resp.  UID_MIN-1).

   UID_MAX (number), UID_MIN (number)
       Range of user IDs used for the creation of regular users by useradd
       or newusers.

       The default value for UID_MIN (resp.  UID_MAX) is 1000 (resp.
       60000).
_

Une des raisons pour lesquelles j'utilise adduser plutôt que useradd est l'option _--encrypt-home_ de adduser. L'un ou l'autre, cependant, pourrait être remplacé en éditant un tas de fichiers, en copiant d'autres, en créant des répertoires, etc. en utilisant n'importe quel UID choisi (pourquoi, jadis, je ...). Il n’ya rien de magique dans adduser ou useradd.

6
waltinator