101 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			XML
		
	
	
	
	
	
			
		
		
	
	
			101 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			XML
		
	
	
	
	
	
<chapter xmlns="http://docbook.org/ns/docbook"
 | 
						||
         xmlns:xlink="http://www.w3.org/1999/xlink"
 | 
						||
         xmlns:xi="http://www.w3.org/2001/XInclude"
 | 
						||
         version="5.0"
 | 
						||
         xml:id="sec-user-management">
 | 
						||
 | 
						||
<title>User Management</title>
 | 
						||
 | 
						||
<para>NixOS supports both declarative and imperative styles of user
 | 
						||
management.  In the declarative style, users are specified in
 | 
						||
<filename>configuration.nix</filename>.  For instance, the following
 | 
						||
states that a user account named <literal>alice</literal> shall exist:
 | 
						||
 | 
						||
<programlisting>
 | 
						||
users.extraUsers.alice =
 | 
						||
  { isNormalUser = true;
 | 
						||
    home = "/home/alice";
 | 
						||
    description = "Alice Foobar";
 | 
						||
    extraGroups = [ "wheel" "networkmanager" ];
 | 
						||
    openssh.authorizedKeys.keys = [ "ssh-dss AAAAB3Nza... alice@foobar" ];
 | 
						||
  };
 | 
						||
</programlisting>
 | 
						||
 | 
						||
Note that <literal>alice</literal> is a member of the
 | 
						||
<literal>wheel</literal> and <literal>networkmanager</literal> groups,
 | 
						||
which allows her to use <command>sudo</command> to execute commands as
 | 
						||
<literal>root</literal> and to configure the network, respectively.
 | 
						||
Also note the SSH public key that allows remote logins with the
 | 
						||
corresponding private key. Users created in this way do not have a
 | 
						||
password by default, so they cannot log in via mechanisms that require
 | 
						||
a password. However, you can use the <command>passwd</command> program
 | 
						||
to set a password, which is retained across invocations of
 | 
						||
<command>nixos-rebuild</command>.</para>
 | 
						||
 | 
						||
<para>If you set users.mutableUsers to false, then the contents of /etc/passwd
 | 
						||
and /etc/group will be congruent to your NixOS configuration. For instance,
 | 
						||
if you remove a user from users.extraUsers and run nixos-rebuild, the user
 | 
						||
account will cease to exist. Also, imperative commands for managing users
 | 
						||
and groups, such as useradd, are no longer available. Passwords may still be
 | 
						||
assigned by setting the user's <literal>hashedPassword</literal> option. A
 | 
						||
hashed password can be generated using <command>mkpasswd -m sha-512</command>
 | 
						||
after installing the <literal>mkpasswd</literal> package.</para>
 | 
						||
 | 
						||
<para>A user ID (uid) is assigned automatically.  You can also specify
 | 
						||
a uid manually by adding
 | 
						||
 | 
						||
<programlisting>
 | 
						||
    uid = 1000;
 | 
						||
</programlisting>
 | 
						||
 | 
						||
to the user specification.</para>
 | 
						||
 | 
						||
<para>Groups can be specified similarly.  The following states that a
 | 
						||
group named <literal>students</literal> shall exist:
 | 
						||
 | 
						||
<programlisting>
 | 
						||
users.extraGroups.students.gid = 1000;
 | 
						||
</programlisting>
 | 
						||
 | 
						||
As with users, the group ID (gid) is optional and will be assigned
 | 
						||
automatically if it’s missing.</para>
 | 
						||
 | 
						||
<para>In the imperative style, users and groups are managed by
 | 
						||
commands such as <command>useradd</command>,
 | 
						||
<command>groupmod</command> and so on.  For instance, to create a user
 | 
						||
account named <literal>alice</literal>:
 | 
						||
 | 
						||
<screen>
 | 
						||
# useradd -m alice</screen>
 | 
						||
 | 
						||
To make all nix tools available to this new user use `su - USER` which 
 | 
						||
opens a login shell (==shell that loads the profile) for given user. 
 | 
						||
This will create the ~/.nix-defexpr symlink. So run:
 | 
						||
 | 
						||
<screen>
 | 
						||
# su - alice -c "true"</screen>
 | 
						||
 | 
						||
 | 
						||
The flag <option>-m</option> causes the creation of a home directory
 | 
						||
for the new user, which is generally what you want.  The user does not
 | 
						||
have an initial password and therefore cannot log in.  A password can
 | 
						||
be set using the <command>passwd</command> utility:
 | 
						||
 | 
						||
<screen>
 | 
						||
# passwd alice
 | 
						||
Enter new UNIX password: ***
 | 
						||
Retype new UNIX password: ***
 | 
						||
</screen>
 | 
						||
 | 
						||
A user can be deleted using <command>userdel</command>:
 | 
						||
 | 
						||
<screen>
 | 
						||
# userdel -r alice</screen>
 | 
						||
 | 
						||
The flag <option>-r</option> deletes the user’s home directory.
 | 
						||
Accounts can be modified using <command>usermod</command>.  Unix
 | 
						||
groups can be managed using <command>groupadd</command>,
 | 
						||
<command>groupmod</command> and <command>groupdel</command>.</para>
 | 
						||
 | 
						||
</chapter>
 |