#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.

# The superuser
u root    0     "Super User" /root

# The nobody user/group for NFS file systems
g {{NOBODY_GROUP_NAME}} 65534       -            -
u {{NOBODY_USER_NAME }} 65534:65534 "Nobody"     -

# Administrator group: can *see* more than normal users
g adm     {{ADM_GID    }}     -            -

# Administrator group: can *do* more than normal users
g wheel   {{WHEEL_GID  }}     -            -

# Access to shared database of users on the system
g utmp    {{UTMP_GID   }}     -            -

# Physical and virtual hardware access groups
g audio   {{AUDIO_GID  }}     -            -
g cdrom   {{CDROM_GID  }}     -            -
g dialout {{DIALOUT_GID}}     -            -
g disk    {{DISK_GID   }}     -            -
g input   {{INPUT_GID  }}     -            -
g kmem    {{KMEM_GID   }}     -            -
g kvm     {{KVM_GID    }}     -            -
g lp      {{LP_GID     }}     -            -
g render  {{RENDER_GID }}     -            -
g sgx     {{SGX_GID    }}     -            -
g tape    {{TAPE_GID   }}     -            -
g tty     {{TTY_GID    }}     -            -
g video   {{VIDEO_GID  }}     -            -

# Default group for normal users
g users   {{USERS_GID  }}     -            -
