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.

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.

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.

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

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
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)
This website uses cookies. By using the website, you agree with storing cookies on your computer. Also you acknowledge that you have read and understand our Privacy Policy. If you do not agree leave the website.More information about cookies
  • Last modified: 2025/03/11 16:32
  • by sppmaster