Samba: Difference between revisions
imported>Onsamyj Clarification for mount as user |
imported>Onny Restructuring page and cleanup |
||
Line 1: | Line 1: | ||
This guide will help you on how to use samba on nixos. | This guide will help you on how to use samba on nixos. | ||
== | == Server setup == | ||
Example setup for creating a public guest share called <code>public</code> and a private share called <code>private</code>. The <code>samba-wsdd</code> service is used to advertise the shares to Windows hosts. | |||
< | {{file|/etc/nixos/configuration.nix|nix|<nowiki> | ||
services.samba = { | services.samba = { | ||
enable = true; | enable = true; | ||
securityType = "user"; | securityType = "user"; | ||
openFirewall = true; | |||
extraConfig = '' | extraConfig = '' | ||
workgroup = WORKGROUP | workgroup = WORKGROUP | ||
Line 150: | Line 46: | ||
}; | }; | ||
}; | }; | ||
services.samba-wsdd = { | |||
enable = true; | |||
openFirewall = true; | |||
}; | |||
networking.firewall.enable = true; | networking.firewall.enable = true; | ||
networking.firewall.allowPing = true; | networking.firewall.allowPing = true; | ||
</nowiki>}} | |||
</ | |||
=== User Authentication === | === User Authentication === | ||
For a user to be authenticated on the samba server, you must add their password using | For a user called <code>my_user</code>to be authenticated on the samba server, you must add their password using | ||
<syntaxhighlight lang="bash"> | |||
<syntaxhighlight lang=" | smbpasswd -a my_user | ||
</syntaxhighlight> | </syntaxhighlight> | ||
=== | === Configuration === | ||
==== Apple Time Machine ==== | ==== Apple Time Machine ==== | ||
Example configuration: | Example configuration: | ||
<syntaxhighlight lang="nix"> | <syntaxhighlight lang="nix"> | ||
services.samba = { | services.samba = { | ||
Line 195: | Line 88: | ||
==== Printer sharing ==== | ==== Printer sharing ==== | ||
<syntaxhighlight lang=nix> | <syntaxhighlight lang=nix> | ||
Line 203: | Line 93: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
A printer share that allows all members in the local network | A printer share that allows printing to all members in the local network | ||
< | {{file|/etc/nixos/configuration.nix|nix|<nowiki> | ||
services.samba = { | |||
enable = true; | |||
package = pkgs.sambaFull; | |||
openFirewall = true; | |||
extraConfig = '' | |||
load printers = yes | |||
printing = cups | |||
printcap name = cups | |||
''; | |||
shares = { | |||
printers = { | |||
comment = "All Printers"; | |||
path = "/var/spool/samba"; | |||
public = "yes"; | |||
browseable = "yes"; | |||
# to allow user 'guest account' to print. | |||
"guest ok" = "yes"; | |||
writable = "no"; | |||
printable = "yes"; | |||
"create mode" = 0700; | |||
}; | }; | ||
}; | }; | ||
}; | |||
systemd.tmpfiles.rules = [ | |||
"d /var/spool/samba 1777 root root -" | |||
]; | |||
</ | </nowiki>}} | ||
The `samba` packages comes without [[Printing|CUPS printing]] support compiled in, however `sambaFull` features printer sharing support. | |||
==== Active Directory Domain Controller ==== | ==== Active Directory Domain Controller ==== | ||
Line 334: | Line 224: | ||
Then restart the samba service with <code>sudo systemctl restart samba</code>, and you're ready to go! | Then restart the samba service with <code>sudo systemctl restart samba</code>, and you're ready to go! | ||
==Troubleshooting== | == Samba Client == | ||
=== cifs mount === | |||
The following snippets shows how to mount a CIFS (Windows) share in NixOS. | |||
Replace all <code><FIELDS></code> with concrete values: | |||
<syntaxhighlight lang="nix"> | |||
{ | |||
# For mount.cifs, required unless domain name resolution is not needed. | |||
environment.systemPackages = [ pkgs.cifs-utils ]; | |||
fileSystems."/mnt/share" = { | |||
device = "//<IP_OR_HOST>/path/to/share"; | |||
fsType = "cifs"; | |||
options = let | |||
# this line prevents hanging on network split | |||
automount_opts = "x-systemd.automount,noauto,x-systemd.idle-timeout=60,x-systemd.device-timeout=5s,x-systemd.mount-timeout=5s"; | |||
in ["${automount_opts},credentials=/etc/nixos/smb-secrets"]; | |||
}; | |||
} | |||
</syntaxhighlight> | |||
Also create /etc/nixos/smb-secrets with the following content (<code>domain=</code> can be optional) | |||
<syntaxhighlight lang="nix"> | |||
username=<USERNAME> | |||
domain=<DOMAIN> | |||
password=<PASSWORD> | |||
</syntaxhighlight> | |||
=== mount as user === | |||
By default, CIFS shares are mounted as root. If mounting as user is desirable, `uid`, `gid` and usergroup arguments can be provided as part of the filesystem options: | |||
<syntaxhighlight lang="nix"> | |||
{ | |||
fileSystems."/mnt/share" = { | |||
# ... rest of the filesystem config omitted | |||
options = let | |||
automount_opts = "x-systemd.automount,noauto,x-systemd.idle-timeout=60,x-systemd.device-timeout=5s,x-systemd.mount-timeout=5s,user,users"; | |||
in ["${automount_opts},credentials=/etc/nixos/smb-secrets,uid=1000,gid=100"]; | |||
# or if you have specified `uid` and `gid` explicitly through NixOS configuration, | |||
# you can refer to them rather than hard-coding the values: | |||
# in ["${automount_opts},credentials=/etc/nixos/smb-secrets,${config.users.users.<username>.uid},gid=${config.users.groups.<group>.gid}"]; | |||
}; | |||
} | |||
</syntaxhighlight> | |||
== Firewall == | |||
Samba discovery of machines and shares may need the firewall to be tuned ([https://wiki.archlinux.org/index.php/Samba#.22Browsing.22_network_fails_with_.22Failed_to_retrieve_share_list_from_server.22 source]): | |||
in <code>/etc/nixos/configuration.nix</code>, add: | |||
<syntaxhighlight lang="nix"> | |||
networking.firewall.extraCommands = ''iptables -t raw -A OUTPUT -p udp -m udp --dport 137 -j CT --helper netbios-ns''; | |||
</syntaxhighlight> | |||
== Browsing samba shares with GVFS == | |||
Many GTK-based file managers like Nautilus, Thunar, and PCManFM can browse samba shares thanks to GVFS. | |||
GVFS is a dbus daemon which must be running for this to work. | |||
If you use Gnome, you have nothing to do as the module already enables it for you, but in less full-featured desktop environments, some further configuration options are needed. | |||
The generic way of enabling GVFS is to add this in <code>/etc/nixos/configuration.nix</code>: | |||
<syntaxhighlight lang="nix"> | |||
services.gvfs.enable = true; | |||
</syntaxhighlight> | |||
There are however some special cases. | |||
===== XFCE ===== | |||
[[Xfce]] comes with a slimmed-down version of GVFS by default which comes with samba support compiled out. To have smb:// support in Thunar, we will use GNOME's full-featured version of GVFS: | |||
<syntaxhighlight lang="nix"> | |||
services.gvfs = { | |||
enable = true; | |||
package = lib.mkForce pkgs.gnome3.gvfs; | |||
}; | |||
</syntaxhighlight> | |||
===== No desktop environment ===== | |||
GVFS relies on polkit to gain privileges for some operations. Polkit needs an authentication agent to ask for credentials. | |||
Desktop environments usually provide one but if you have no desktop environment, you may have to install one yourself: | |||
Excerpt of <code>/etc/nixos/configuration.nix</code>: | |||
<syntaxhighlight lang="nix"> | |||
environment.systemPackages = with pkgs; [ lxqt.lxqt-policykit ]; # provides a default authentification client for policykit | |||
</syntaxhighlight> | |||
===== DBUS ===== | |||
Furthermore, if you happen to start your Window Manager directly, via <code>.xinitrc</code>, or directly invoke a Wayland compositor such as Sway, you should ensure that you launch dbus at startup in your session and export its environment. If you do not have a dbus session in your environment, you will see errors such as "Operation not supported" when attempting to browse the network. | |||
For example, if you are using <code>.xinitrc</code>, you could invoke <code>dbus-launch</code>: | |||
<syntaxhighlight lang="bash"> | |||
export `dbus-launch` # starts dbus and exports its address | |||
exec xterm # your prefered Window Manager | |||
</syntaxhighlight> | |||
(You need to restart your Window Manager to have the changes in <code>.xinitrc</code> to take place.) | |||
If you are using a Wayland compositor like Sway, you can run it under <code>dbus-run-session</code> for the same effect: | |||
<syntaxhighlight lang="bash"> | |||
dbus-run-session sway | |||
</syntaxhighlight> | |||
(Because <code>dbus-run-session</code> exits when the child process exits, it is only appropriate to use <code>dbus-run-session</code> with a process that will be running during the entire session. This is the case for Wayland compositors, but is not necessarily true for all configurations of X11 window managers.) | |||
== Troubleshooting == | |||
=== Server log === | === Server log === | ||
<pre> | <pre> | ||
sudo journalctl -u samba-smbd.service -f | sudo journalctl -u samba-smbd.service -f | ||
Line 341: | Line 336: | ||
=== Stale file handle === | === Stale file handle === | ||
Trying to read the contents of a remote file leads to the following error message: "Stale file handle". If you have mounted a share via the method described in "cfis mount", adding the option <code>noserverino</code> might fix this problem. [https://askubuntu.com/questions/1265164/stale-file-handler-when-mounting-cifs-smb-network-drive-from-fritz-router] | Trying to read the contents of a remote file leads to the following error message: "Stale file handle". If you have mounted a share via the method described in "cfis mount", adding the option <code>noserverino</code> might fix this problem. [https://askubuntu.com/questions/1265164/stale-file-handler-when-mounting-cifs-smb-network-drive-from-fritz-router] | ||
=== List shares === | === List shares === | ||
<pre> | <pre> | ||
smbclient --list localhost | smbclient --list localhost | ||
Line 389: | Line 386: | ||
=== Permission denied === | === Permission denied === | ||
Maybe check the <code>guest account</code> setting in your server config. | Maybe check the <code>guest account</code> setting in your server config. | ||
The default value is <code>nobody</code>, | The default value is <code>nobody</code>, | ||
Line 403: | Line 401: | ||
== See also == | == See also == | ||
* [https://search.nixos.org/options?channel=unstable&from=0&size=50&sort=relevance&type=packages&query=services.samba Samba Options in NixOS on unstable] | * [https://search.nixos.org/options?channel=unstable&from=0&size=50&sort=relevance&type=packages&query=services.samba Samba Options in NixOS on unstable] | ||
* [https://wiki.archlinux.org/title/Samba Samba in the Arch Linux Wiki] | * [https://wiki.archlinux.org/title/Samba Samba in the Arch Linux Wiki] | ||
[[Category:Services]] | [[Category:Services]] |