ksmbd
KSMBD is a server which implements SMB3 protocol in kernel space for sharing files over your network. It can be used as a Samba alternative.
Installation
To use ksmbd with LuCI install luci-app-ksmbd
which will automatically install the server and dependencies. To use ksmbd only on the command line install ksmbd-server
and ksmbd-tools
.
If you are sharing a USB or eSATA drive make sure you also install the drivers and filesystem outlined on the Samba prerequisites page.
Configuration
In LuCI, go to Services → Network Shares. Here you can assign the interface, name the shares, and path to the drive folder, e.g. /mnt/sda1.
For command line, the UCI configuration file is located at /etc/config/ksmbd
. Some options are hardcoded in the /etc/ksmbd/ksmb.conf.template
.
Example
This example assumes you have a block device attached on /mnt/sda1
(typical Linux/OpenWrt mount points).
Multiple devices and shares may be added by providing a config share
section with a name and mount location for each.
To access storage anonymously over the LAN using the nobody/nogroup
user, first assign ownership for all files and directories at these mounting points to that user:
chown -R nobody:nogroup /mnt/sda1
To access a shared storage over the LAN using a username and password you have to use ksmbd.adduser
from SSH. A /etc/ksmbd/ksmbdpwd.db
file is created.
root@OpenWrt:~# ksmbd.adduser --help Usage: ksmbd.adduser [-v] [-P PWDDB] [-c CONF] [-a | -u | -d] [-p PWD] USER If neither `-a', `-u', nor `-d' is given, either add or update USER. USER must be UTF-8 and [1, 48) bytes. USER cannot contain colon (`:'). -a, --add add USER to user database -u, --update update USER in user database -d, --delete delete USER from user database -p, --password=PWD use PWD as user password instead of prompting; PWD must be UTF-8 and [0, 129) bytes -P, --pwddb=PWDDB use PWDDB as user database instead of `/etc/ksmbd/ksmbdpwd.db' -C, --config=CONF use CONF as configuration file instead of `/etc/ksmbd/ksmbd.conf' -v, --verbose be verbose -V, --version output version information and exit -h, --help display this help and exit See ksmbd.adduser(8) for more details.
Configure shares in LuCI → Services → Network Shares or by editing /etc/config/ksmbd
:
config globals option workgroup 'WORKGROUP' option description 'Ksmbd on OpenWrt' option interface 'lan' config share option name 'ssd' option path '/mnt/sda1' option read_only 'no' option guest_ok 'yes' option create_mask '0666' option dir_mask '0777'
On devices with sufficient RAM (typically >256MB) performance can be improved, increase or comment out the preset buffer limits in LuCI → Services → Network Shares → Edit Template. Save and apply:
#smb2 max read = 512K #smb2 max write = 512K #smb2 max trans = 512K
Global section
The globals
section contains share-independent options.
Name | Type | Required | Default | Description |
---|---|---|---|---|
workgroup | string | no | WORKGROUP | Workgroup name |
description | string | no | Ksmbd on OpenWrt | Server description |
allow_legacy_protocols | boolean | no | 0 | Enables support for insecure versions of SMB3 protocol |
Share sections
Name | Type | Required | Default | Description |
---|---|---|---|---|
name | string | yes | (none) | Share name that will be displayed in a file browser |
path | string | yes | (none) | Directory path |
comment | string | no | (none) | |
users | string | no | (none) | |
create_mask | number | no | (none) | chmod mask for created files |
dir_mask | number | no | (none) | chmod mask for created directories |
browseable | string | no | (none) | |
read_only | string | no | (none) | |
writeable | string | no | (none) | |
guest_ok | string | no | (none) | |
force_root | boolean | no | (none) | |
write_list | string | no | (none) | |
read_list | string | no | (none) | |
users | string | no | (none) | |
hide_dot_files | string | no | (none) | |
veto_files | string | no | (none) | |
inherit_owner | string | no | (none) | |
force_create_mode | string | no | (none) | |
force_directory_mode | string | no | (none) |