Jump to content

Doas: Difference between revisions

From Official NixOS Wiki
Klinger (talk | contribs)
m moved into Category:Applications. Its an application to run other applications with elevated rights.
DHCP (talk | contribs)
m Rebuilding without Git in system packages: enable syntax highlighting for shell commands
 
(8 intermediate revisions by 4 users not shown)
Line 1: Line 1:
<languages/>
<translate>
<!--T:1-->
[https://en.wikipedia.org/wiki/Doas doas] is a utility to execute commands as a different user, typically the super user. It is often installed as a replacement for sudo, due to its ease of configuration and greater simplicity.
[https://en.wikipedia.org/wiki/Doas doas] is a utility to execute commands as a different user, typically the super user. It is often installed as a replacement for sudo, due to its ease of configuration and greater simplicity.
 
</translate>
 
<translate>
<!--T:2-->
It is not recommended to use doas due to compatibility issues with sudo.
It is not recommended to use doas due to compatibility issues with sudo.
 
</translate>
 
<translate>
<!--T:3-->
Flake based configurations require git to be installed as a system package in order to rebuild.
Flake based configurations require git to be installed as a system package in order to rebuild.
</translate>
<translate>
== Configuration == <!--T:4-->
</translate>
<translate>
<!--T:5-->
The following configuration will give the user <code>foo</code> the ability to execute commands as the super user via <code>doas</code>, while disabling the <code>sudo</code> command.
</translate>
<translate>
<!--T:6-->
<syntaxhighlight lang="nix">{ pkgs, ... }: {
  security.sudo.enable = false;


== Configuration ==
  security.doas.enable = true;
  security.doas.extraRules = [{
    users = ["foo"];
    # Optional, retains environment variables while running commands
    # e.g. retains your NIX_PATH when applying your config
    keepEnv = true;
    persist = true;  # Optional, don't ask for the password for some time, after a successfully authentication
  }];


The following configuration will give the user <code>foo</code> the ability to execute commands as the super user via <code>doas</code>, while disabling the <code>sudo</code> command.
  # If using a flakes-based configuration, you'll need `git` in your system packages for system rebuilds
  environment.systemPackages = [ pkgs.git ];
}</syntaxhighlight>
</translate>
<translate>
== Rebuilding without Git in system packages ==
</translate>
<translate>
If you've forgotten to add Git to your system packages, and you need to rebuild your system, you can either:


<syntaxhighlight lang="nix">
# Reboot to select the last generation without doas
security.doas.enable = true;
# Enter a Nix shell as root, with the git package. Then, run your <code>nixos-rebuild</code> command with git being in your <code>environment.systemPackages</code>.
security.sudo.enable = false;
</translate>
security.doas.extraRules = [{
<translate>
  users = ["foo"];
<syntaxhighlight lang=console>
  # Optional, retains environment variables while running commands
$ doas su
  # e.g. retains your NIX_PATH when applying your config
$ nix shell nixpkgs#git  # Or you can use the legacy syntax `nix-shell -p git`
  keepEnv = true;
$ nixos-rebuild --flake /path/to/your/flake#your-hostname test
  persist = true;  # Optional, don't ask for the password for some time, after a successfully authentication
</syntaxhighlight>
}];
</translate>
<translate>
If everything looks good, you can now add your rebuild to your boot options.
</translate>
<translate>
<syntaxhighlight lang=console>
$ exit
$ doas nixos-rebuild --flake /path/to/your/flake#your-hostname switch
</syntaxhighlight>
</syntaxhighlight>
 
</translate>
[[Category:Applications]]
[[Category:Applications]]
[[Category:Security]]

Latest revision as of 13:37, 19 July 2026

doas is a utility to execute commands as a different user, typically the super user. It is often installed as a replacement for sudo, due to its ease of configuration and greater simplicity. It is not recommended to use doas due to compatibility issues with sudo. Flake based configurations require git to be installed as a system package in order to rebuild.

Configuration

The following configuration will give the user foo the ability to execute commands as the super user via doas, while disabling the sudo command.

{ pkgs, ... }: {
  security.sudo.enable = false;

  security.doas.enable = true;
  security.doas.extraRules = [{
    users = ["foo"];
    # Optional, retains environment variables while running commands 
    # e.g. retains your NIX_PATH when applying your config
    keepEnv = true; 
    persist = true;  # Optional, don't ask for the password for some time, after a successfully authentication
  }];

  # If using a flakes-based configuration, you'll need `git` in your system packages for system rebuilds
  environment.systemPackages = [ pkgs.git ];
}

Rebuilding without Git in system packages

If you've forgotten to add Git to your system packages, and you need to rebuild your system, you can either:

  1. Reboot to select the last generation without doas
  2. Enter a Nix shell as root, with the git package. Then, run your nixos-rebuild command with git being in your environment.systemPackages.
$ doas su
$ nix shell nixpkgs#git  # Or you can use the legacy syntax `nix-shell -p git`
$ nixos-rebuild --flake /path/to/your/flake#your-hostname test

If everything looks good, you can now add your rebuild to your boot options.

$ exit
$ doas nixos-rebuild --flake /path/to/your/flake#your-hostname switch