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'
or the above config will look similar to this when allowed users have been added
config globals option workgroup 'WORKGROUP' option description 'Ksmbd on your_router_name' config share option name 'router-USB1' option path '/mnt/sda1' option read_only 'no' option guest_ok 'no' option create_mask '0666' option dir_mask '0777' option users 'user1'
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:
As of this commit https://github.com/openwrt/packages/pull/25519 the below values are adjusted automatically (no need to change anything). This is valid for devices running OpenWrt main snapshot builds.
For versions below 24.10 you have to manually edit the template and adjust the values accordingly.
#smb2 max read = 512K #smb2 max write = 512K #smb2 max trans = 512K 32 ~ 64MB RAM, set the value to 64K 64 ~ 128MB, set it to 128KB 128 ~ 256MB, set it to 1MB More than 256MB leave default size to 4MB With 64MB and 128MB it is better also to disable the read/write cache cache read buffers = no cache write buffers = no
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) |