Users and Groups in the Debian System

Joey Hess

Colin Watson

David Mandelberg

   Copyright © 2001, 2002 Joey Hess

   Copyright © 2005 David Mandelberg

   Copyright © 2001-2022 Colin Watson

   This document is free; you can redistribute it and/or modify it
   under the terms of version 2 of the GNU General Public License
   as published by the Free Software Foundation.

   This document is distributed in the hope that it will be
   useful, but WITHOUT ANY WARRANTY; without even the implied
   warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
   PURPOSE. See the GNU General Public License for more details.

   You should have received a copy of the GNU General Public
   License along with this document; if not, write to the Free
   Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
   MA 02110-1301, USA.
     __________________________________________________________

   Table of Contents
   1. Introduction
   2. Users and Groups
     __________________________________________________________

Chapter 1. Introduction

   The Debian base-passwd package contains the master versions of
   /etc/passwd and /etc/group. The update-passwd tool keeps the
   entries in these master files in sync on all Debian systems.
   They comprise only "global static" ids: that is, those which
   are reserved globally for the benefit of packages which need to
   include files owned by those users or groups, or need the ids
   compiled into binaries. Since this reservation is a serious
   restriction, these ids must be allocated by the base-passwd
   maintainer on request. In general, packages should avoid
   requesting such ids where possible and instead allocate system
   users or groups dynamically. See Debian Policy for further
   details.

   The Debian Policy Manual reserves ranges for these global
   static users and groups, but it makes no attempt to allocate
   individual numbers or define their purposes. This document
   fills that gap by describing the purposes of the individual
   entries in these master files.

   This is a work in progress. Items in need of feedback are
   marked with the "HELP" tag. Please send mail to
   <base-passwd@packages.debian.org> or file a bug with the Debian
   bug tracking system if you have more information.
     __________________________________________________________

Chapter 2. Users and Groups

   Many users have a corresponding group, and these pairs will be
   treated together.

   root
          Root is (typically) the superuser.

   daemon
          Some unprivileged daemons that need to be able to write
          to some files on disk run as daemon.daemon (portmap,
          atd, lambdamoo, mon, and others). Daemons that don't
          need to own any files sometimes run as nobody.nogroup
          instead; it is generally better practice to use a
          dedicated user, and more complex or security-conscious
          daemons certainly do this. The daemon user is also handy
          for locally installed daemons, probably.

          LSB 1.3 lists daemon as legacy, and says: "The 'daemon'
          UID/GID was used as an unprivileged UID/GID for daemons
          to execute under in order to limit their access to the
          system. Generally daemons should now run under
          individual UID/GIDs in order to further partition
          daemons from one another."

   bin
          HELP: No files on my system are owned by user or group
          bin. What good are they? Historically they were probably
          the owners of binaries in /bin? It is not mentioned in
          the FHS, Debian Policy, or the changelogs of base-passwd
          or base-files.

          LSB 1.3 lists bin as legacy, and says: "The 'bin'
          UID/GID is included for compatibility with legacy
          applications. New applications should no longer use the
          'bin' UID/GID."

   sys
          Historically, the sys user and group owned the kernel
          sources and some related items like the include files,
          but this was obsoleted long ago in favour of bin (now
          itself legacy; see above).

   sync
          The shell of user sync is /bin/sync. Thus, if its
          password is set to something easy to guess (such as ""),
          anyone can sync the system at the console even if they
          have no account on the system.

   games
          Many games are sgid to games so they can write their
          high score files. This is explained in Debian Policy.

   man
          The man program (sometimes) runs as user man, so it can
          write cat pages to /var/cache/man and update its
          databases there.

   lp
          The lp* devices are writable by this group so that users
          in it can access the parallel ports directly.
          Traditionally this job is taken by a printer daemon
          instead which will only need to run in this group.

          The lpr system keeps its spool directories owned by
          lp/lp. Its daemon and frontend tools (through setuid)
          run as user root.

          HELP: what do other print systems (rlpr, lprng, ...) do?

   mail
          Mailboxes in /var/mail are owned and writable by group
          mail, as is explained in Debian Policy. The user and
          group is used for other purposes as well by various MTAs
          and MUAs.

   news
          Various news servers and other associated programs (such
          as suck) use user and group news in various ways. Files
          in the news spool are often owned by user and group
          news. Programs such as inews that can be used to post
          news are typically sgid news.

   uucp
          The uucp user and group is used by the UUCP subsystem.
          It owns spool and configuration files. Users in the uucp
          group may run uucico.

   proxy
          Like daemon, this user and group is used by some daemons
          (specifically, proxy daemons) that don't have dedicated
          user ids and that need to own files. For example, group
          proxy is used by pdnsd, and squid runs as user proxy.

   majordom
          Majordomo has a statically allocated uid on Debian
          systems for historical reasons. It is not installed on
          new systems.

   postgres
          Postgresql databases are owned by this user and group.

   www-data
          Some web servers run as www-data. Web content should not
          be owned by this user, or a compromised web server would
          be able to rewrite a web site. Data written out by web
          servers will be owned by www-data.

   backup
          Presumably so backup/restore responsibilities can be
          locally delegated to someone without full root
          permissions?

          HELP: Is that right? Amanda reportedly uses this,
          details?

   operator
          Historically, the operator user account was used by
          system operators with low privilege to dump filesystem
          backups to tape, and was in the root group so that it
          could do this. In Debian, the use of a utility such as
          sudo to gain privilege is preferred over such
          highly-special-purpose accounts, and the operator user
          is no longer created by default. It had uid 37.

          The operator group is used by dump -n to notify
          logged-in operators via wall when it requires operator
          attention. This is a historical use, and new
          applications should not behave this way. (If nothing
          else, the group should be configurable.)

   list
          Mailing list archives and data are owned by this user
          and group. Some mailing list programs may run as this
          user as well.

   irc
          Used by IRC daemons. A statically allocated user is
          needed only because of a bug in ircd: it setuid()s
          itself to a compiled-in user id on startup.

   gnats
          Used by gnats. This had a statically allocated user and
          group for purely historical reasons (it could equally
          well use a dynamic system user and group). Since gnats
          has been removed from Debian, this user and group are no
          longer created by default; they had uid/gid 41.

   nobody, nogroup
          Daemons that need not own any files sometimes run as
          user nobody and group nogroup, although using a
          dedicated user is far preferable. Thus, no files on a
          system should be owned by this user or group.

          (Technically speaking, it does no harm for a file to be
          owned by group nogroup as long as the ownership confers
          no additional privileges, that is if the group and other
          permission bits are equal. However, this is sloppy
          practice and should be avoided.)

          If root-squashing is in use over NFS, root access from
          the client is performed as user nobody on the server.

   messagebus
          The dbus daemon (dbus-daemon-1) runs as this user and
          group.

   postfix
          Used by the postfix MTA.

   gdm
          GDM (GNOME Display Manager) runs as this user/group.

   saned
          Added by sane-utils, but appear to be unused.

   klog
          Used by klogd, the kernel logger.

   syslog
          Used by syslog, the general purpose logger.

   Other groups have no associated user.

   adm
          Group adm is used for system monitoring tasks. Members
          of this group can read many log files in /var/log, and
          can use xconsole.

          Historically, /var/log was /usr/adm (and later
          /var/adm), thus the name of the group.

          HELP: Perhaps policy should state the purpose of this
          group so users may be safely added to it, in certainty
          that all they'll be able to do is read logs. Wouldn't
          hurt to rename it 'log' either ...

   tty
          Tty devices and /dev/vcs* are owned by this group. This
          is used by write and wall to enable them to write to
          other people's ttys.

   disk
          Raw access to disks. Mostly equivalent to root access.

          HELP: Well, I have some disk devices in /dev owned by
          the group, but I can't see the point. On another system,
          I noticed that some of the files lilo puts in /boot are
          also owned by disk. I can imagine local uses for such a
          group, like if you want to give some users in the group
          direct access to some hard disk. But these uses I've
          found on my systems seem to preclude doing that easily;
          if I put a user in group disk here, they'd have write
          access to the root filesystem.

   kmem
          /dev/kmem and similar files are readable by this group.
          This is mostly a BSD relic, but any programs that need
          direct read access to the system's memory can thus be
          made setgid kmem.

   dialout
          Full and direct access to serial ports. Members of this
          group can reconfigure the modem, dial anywhere, etc.

   dip
          The group's name stands for "Dialup IP". Being in group
          dip allows you to use tools such as pppd, pon, and poff
          to make dialup connections to other systems using
          predefined configuration file(s) in the /etc/ppp/peers
          directory.

   fax
          Allows members to use fax software to send or receive
          faxes.

   voice
          Voicemail, useful for systems that use modems as
          answering machines.

   cdrom
          This group can be used locally to give a set of users
          access to a CD-ROM drive.

   floppy
          This group can be used locally to give a set of users
          access to a floppy drive.

   tape
          This group can be used locally to give a set of users
          access to a tape drive.

   sudo
          Members of this group may run any command as any user
          when using sudo or pkexec (from the policykit-1 package,
          independently of whether the sudo package is installed).

   audio
          This group can be used locally to give a set of users
          access to an audio device.

   src
          This group owns source code, including files in
          /usr/src. It can be used locally to give a user the
          ability to manage system source code.

          HELP: /usr/src is owned by group src and is setgid. This
          doesn't make files put there by foo-src packages
          necessarily be owned by group src though. If the intent
          is to make group src be able to manage source code,
          perhaps policy should say that foo-src packages make
          files in /usr/src owned and writable by the group (and
          files in tarballs dropped there likewise)?

   shadow
          /etc/shadow is readable by this group. Some programs
          that need to be able to access the file are setgid
          shadow.

   utmp
          This group can write to /run/utmp, /var/log/wtmp,
          /var/log/lastlog, and similar files. Programs that need
          to be able to write to them (such as X terminal
          emulators) are setgid utmp.

   video
          This group can be used locally to give a set of users
          access to a video device.

   plugdev
          Members of this group can access removable devices in
          limited ways without explicit configuration in
          /etc/fstab. This is useful for local users who expect to
          be able to insert and use CDs, USB drives, and so on.

          Since pmount (the original implementor of group plugdev)
          always mounts with the nodev and nosuid options and
          applies other checks, this group is not intended to be
          root-equivalent in the ways that the ability to mount
          filesystems might ordinarily allow. Implementors of
          semantics involving this group should be careful not to
          allow root-equivalence.

   staff
          Allows users to add local modifications to the system
          (/usr/local, /home) without needing root privileges.
          Compare with group 'adm', which is more related to
          monitoring/security.

          Note that the ability to modify /usr/local is
          effectively equivalent to root access (since /usr/local
          is intentionally on search paths ahead of /usr), and so
          you should only add trusted users to this group. Be
          careful in environments using NFS since acquiring
          another non-root user's privileges is often easier in
          such environments.

   users
          While Debian systems use the user-group system by
          default (each user has their own group), some prefer to
          use a more traditional group system. In that system,
          each user is a member of the 'users' group.

   lpadmin
          Allows a user to add, modify, and remove printers from
          foomatic, cups, and possibly other printer databases.

   sasl
          Users in this group have read/write access to
          /etc/sasldb and/or /etc/sasldb2, wich are used to
          authentication with sasl. This is commonly used by IMAP,
          POP, and SMTP servers for authentication.

   scanner
          Users in this group can use scanner(s).

   _ssh
          ssh-agent is setgid to _ssh in order to prevent ptrace
          attacks.

   libvirt
          Access to the system libvirt daemon is controlled by
          this group. Membership in this group gives full daemon
          access including (but not restricted to) managing
          virtual machines.

   Some users have no corresponding group.

   sshd
          Unprivileged user used by the privilege-separated sshd
          when communicating with the network before successful
          authentication.

   fetchmail
          Used by the fetchmail program.

   cupsys
          CUPS (Common Un*x Printing System) runs as this user. It
          is in group lp, so it can access printer devices.
