Difference between revisions of "Guide:Setting up an SMB (Windows) file server"

From PINE64
Jump to navigation Jump to search
m (Additional android SMB clients)
m (→‎Windows: Added useful link)
(One intermediate revision by one other user not shown)
Line 10: Line 10:

== Prerequisites ==
== Prerequisites ==
ROCK64 board running [http://wiki.pine64.org/index.php/ROCK64_Main_Page#ROCK64_Software_Images Debian or Ubuntu]
ROCK64 board running [[ROCK64_Main_Page#ROCK64_Software_Images|Debian or Ubuntu]]

Access to terminal, either locally or via [[Guide:Connecting_to_your_device_with_SSH|SSH]]
Access to terminal, either locally or via [[Guide:Connecting_to_your_device_with_SSH|SSH]]
Line 110: Line 110:
* http://www.techrepublic.com/article/how-to-connect-to-linux-samba-shares-from-windows-10/
* http://www.techrepublic.com/article/how-to-connect-to-linux-samba-shares-from-windows-10/
* https://www.linux.com/news/using-samba-share-files-between-linux-and-windows
* https://www.linux.com/news/using-samba-share-files-between-linux-and-windows
* [https://softwaretested.com/file-library/ Windows Files Library]

=== Mac OS ===
=== Mac OS ===

Latest revision as of 12:37, 22 October 2021


This guide will show you how to share a directory using the SMB (windows file sharing) protocol to allow other clients to connect to it and share files amongst one another. I will also show how to make the share accessible by predefined users with passwords, or accessible to anybody.

There are many guides already detailing the exact same thing, why post a new one?

A lot of the guides I've seen have several problems which have stung me and resulted in many hours of hair pulling and frustration:

  • Some use really old versions of the samba service and share definitions
  • Others gloss over or skip file/directory permissions, resulting in "read only" shares and other such frustrations
  • Quite a few poor practices (EG: using sudo $EDITOR $FILE, instead of sudoedit). Why that is good practice is detailed here.


ROCK64 board running Debian or Ubuntu

Access to terminal, either locally or via SSH

Some basic understanding of using the linux terminal: Howtogeek

Suggested: A basic comprehension of linux file permissions

Suggested: A USB storage device to host the shared directory on (to avoid filling up the System Partition)

This guide will start off from the directory created in a prior guide. You don't need to have the network share hosted on a USB drive, you can host it anywhere really, I just prefer hosting on this way to avoid filling up the boot partition.


Firstly, you'll need to update your repositories and install any pending updates. This is good practice before installing software on any linux system. Debian/Ubuntu use the "apt" package management tool. You'll need superuser access for this.

sudo apt update && sudo apt upgrade

Type in your password when prompted and y when prompted to install updates.

After that, you'll need to invoke apt to install the samba server:

sudo apt install samba samba-common-bin

Samba apt 1.png

Depending on your distro, samba-common-bin may already be installed. However, allow the other supporting software to be installed.

The next step is to create a directory to host the network share. In this scenario, I will be placing it in the Flash drive mentioned in this tutorial.

Navigate to your mounted location. Following the linked tutorial, for me it is:

cd /media/USB-test3/

Make a new directory which will act as the shared location. We will create it with Use/Write/Execute permissions for everybody inside the folder:

sudo mkdir -m 1777 RockShare

Now we can edit Samba's configuration file to create a new share based on the directory we just set up:

sudoedit /etc/samba/smb.conf

Smb.conf 1.png

Use the Up/Down or PageUp/Down keys to navigate to the bottom of the file to create a new entry.

Comment = Rock64 Share
Path = /media/USB-test3/RockShare
Browseable = yes
Writeable = Yes
only guest = no
create mask = 0777
directory mask = 0777
Public = yes
Guest ok = yes

It should look somewhat similar to this after you've done editing it:

Smb.conf 2.png

These options means that anybody can read, write or execute files in the share, either with a samba user or as a guest. To forbid guest access, simply omit the "guest ok" line. The title, in the square brackets, will be the name of the shared directory.

Now we can create a specialized user for samba, if you'd like to have your share accessible only with the proper credentials.

First of all, you need to make a new linux user. In this case, I will be making a new user "rocksmb":

sudo useradd rocksmb

After that, you can create a new samba user, and you'll be prompted to type in a password too. This is a unique password, independent to your linux user password:

sudo smbpasswd -a rocksmb

New SMB password:
Retype new SMB password:
Added user rocksmb.

Now you restart the samba service:

sudo /etc/init.d/samba restart
[ ok ] Restarting nmbd (via systemctl): nmbd.service.
[ ok ] Restarting smbd (via systemctl): smbd.service.
[ ok ] Restarting samba-ad-dc (via systemctl): samba-ad-dc.service.

Now your Samba share will be visible and accessible!

If you wish to add more users, you simply repeat the steps mentioned above: Create a linux user, then a samba user and password. You can also experiment with the above samba template, give predefined users different and unique folders if you wish, for example.



There are many guides about how to access smb shares using Windows:

Mac OS


In all cases, replace the hostname/IP in the guide with the ones you have.


If you want to access the drive using mobile apps, there are many apps available on both Android and iOS.


iOS: https://itunes.apple.com/us/app/fileexplorer-file-manager-for-computer-and-nas/id510282524?mt=8


Android: https://play.google.com/store/apps/details?id=com.google.android.sambadocumentsprovider&hl=en

I don't have an iphone, so I'll do a quick rundown using the android app:

Download it and open it to be greeted to a very simple credential screen. Simply fill in the details like:


In our case:

AndroidSMB 1.png

Assuming you've put in the right credentials, it will immediately open up the share using the default android file selector:

AndroidSMB 2.png

However Google's app is VERY rudimentary and barebones. I was able to open image files, but video and audio files gave me problems unless I copied them to internal memory.

If you need something more full featured, I highly recommend solid explorer:



Total commander + samba plugin



android marketplace

Ghost commander

Ghost commander (fdroid)

Ghost commander Samba plugin (fdroid)