Raspberry is such a powerful tiny computer you can use this as a tool for pretty much anything. Our focus in this article is to know how to build a personal cross-platform file server on Raspberry Pi. We are sure that after reading this article, you will be in a position to set up your Raspberry Pi as a fully functional file server on your home network.
There are multiple third-party tools in the market that allows you to set up your own file server. Some of them are free, and some may come for an extra cost. However, our goal is to let you know how to build a working file server by leveraging the service of simple SMB/CIFS protocols. We are using Samba to implement SMB/CIFS services to share the storage across the network. Along with this, we thought it would be good to share some information about file permissions on Linux. Let’s make a checklist of components we need to set up a file server.
A running Raspberry Pi with Raspberry PI OS, Samba, and a couple of packages installed on it. Please check out our posts “How to set up a Raspberry Pi for the first time?” and “Five easiest ways to connect Raspberry Pi remotely in 2021:” if you are working on the Pi for the first time.
Your choice of clean formatted and partitioned storage drives to connect to Pi. Please check out our post “How to Partition and Format the Hard Drives on Raspberry Pi?” to know more about adding a hard drive to Raspberry Pi.
As the front page at samba.org says: Samba is a software package that gives network administrators flexibility and freedom in terms of setup, configuration, and choice of systems and equipment. Because of all that it offers, Samba has grown in popularity and continues to thrive every year since its release in 1992.
Samba is software used to implement Server Message Block (SMB) protocol. It’s used to share files over the network. It is also referred to as Common Internet File System, in short CIFS. If you ask what platforms support this protocol. The answer is pretty much all. It supports Windows, Linux, and Mac. What support you need else! With a couple of additional packages and a few configurations, you can build a personal cross-platform file-sharing server on Raspberry Pi at your home, which provides a central storage and is capable of sharing files with other computers, smart TV, smartphone, and other smart devices.
MicroSD card loaded with Raspberry Pi OS
External storage drives (hard drives, SSDs, flash drives, etc.) that are formatted and partitioned
Ethernet cable or WiFi connectivity
Software Prerequisites:
Latest version of Raspberry Pi OS installed
Samba installed for implementing SMB/CIFS file sharing protocols
ExFAT and NTFS support packages (exfat-utils, exfat-fuse, ntfs-3g)
Text editor like nano or vim for editing configuration files
Knowledge Prerequisites:
Basic understanding of Linux file systems and permissions
Familiarity with Samba configuration and how to define shares
Know how to connect external drives to Raspberry Pi
Understanding of SMB/CIFS protocols for cross-platform file sharing
Ability to use the command line for software installation, editing files, etc.
Network Prerequisites:
The Raspberry Pi needs to be connected to the local home network via Ethernet or WiFi
Unique hostname defined for accessing shared folders
Configure router to allow access to Samba shares from other devices on network
Start by ensuring all hardware components are set up properly, Raspberry Pi OS is updated fully, Samba packages are installed, and you have partitions formatted on the external drives. Also make sure you have adequate Linux admin knowledge before editing configs.
As Samba is available on the apt packages, you can directly install the package using apt-get. There are two different packages to install, so you can install both of them in a single command.
1. Install samba on Raspberry Pi.
$ sudo apt-get install samba samba-common-bin
Type ‘y’ and let the installation continue.
Install samba on Raspberry Pi
2. You may see this configuration wizard right before the installation. Choose ‘Yes’ if you already have a router which is serving as a DHCP server and disseminating IP addresses. Say ‘no’ if this is the only server running in your network. We are going to select ‘yes’ as we do have a router in our network.
Setting up DHCP client on Raspberry Pi
When the Samba installation gets completed, you will be ready to start setting up shares. Let’s assume we have created two partitions on our drive. One partition is created using NTFS, and the second is created using the EXT4 file system. And we have mounted both partitions under the/mnt/data-ntfs and /mnt/data-ext4 paths, respectively. If you do ls -l /mnt, this is how you should see. There is another dedicated post on how to partition the drive “How to Partition and Format the Hard Drives on Raspberry Pi?”. We recommend reading that post before you proceed.
This image is captured by the author
Although file permissions on Linux is a different topic, however, we would like to give you some heads up on this as it is required to understand if you are dealing with file sharing on Linux. In essence, there are three types of permission in Linux, Read, Write, and Execute. All three permission are applied to three types of user entities, Users, Groups, and Others.
User: A user who created the file. You can call them the owner of the file. Who has read, write and execute permission on their created files by default.
group: In Linux, all files and directories will also have a group, a collection of users belong to the group.
Others: Finally, everyone else.
Now, pay some attention to the first few characters on both lines in the above-shown picture. They are a set of 10 characters segregated into four subsets, and They specify the permissions set on their files and directories.
1st char: ‘d’ represents it’s a directory. In case of any other files you may see ‘-‘.
2nd, 3rd, 4th chars: Represents the Read ‘r’, Write ‘w’, and Execute ‘x’ permissions for the ‘User’.
5th, 6th, 7th chars: Represents the Read ‘r’, Write ‘w’, and Execute ‘x’ permissions for the ‘Group’.
8th, 9th, 10th, char: Represents the Read ‘r’, Write ‘w’, and Execute ‘x’ permissions for the ‘Others’.
In the above picture, 1st char of both files are ‘d’, and it’s a directory. If you read the rest of the characters, you will come to know that the ext4 partition has all ‘rwx’ remissions for the ‘User’, only ‘r-x’ read and execute permissions for ‘Group’ and ‘Others’. Similarly, if you read the remaining nine characters of the NTFS partition, all types of users have all permission on it. This shows that the Linux system manages the permissions differently on the different types of file systems. If you see NTFS permissions here, everyone is allowed to do everything on the NTFS file system. It is normal because NTFS security doesn’t work in the same way as ext4 works. Linux can’t enforce its rules on the NTFS file system. If you want granular access controls, NTFS may not be the right choice for you. We recommend creating public directories and assigning permissions to them rather than managing the permissions at the level of the partition.
Creating a public directory for ext4 and NTFS filesystems
List the files under the data-ext4 directory
You can manipulate the permission by using ‘chmod‘ command. To grant the missing write permissions on the ext4 public directory, type the following command.
$ sudo chmod go+w data-ext4/public
Here ‘go’ stands for Group and Other users, ‘+’ represents adding permissions, ‘w’ stands for Write permission. Please refer to the chmod and chown commands for more information https://www.computerhope.com/unix/uchmod.htm
Assigning the write permission to the ext4 public directory
Let’s back to our original topic. Share the public directories created on both partitions by configuring smb.conf file. Open the file using your choice of text editor. We are using nano text editor for demonstration purposes.
The workgroup setting is important when you want to access shared files from a Windows machine. Change the correct workgroup under the global settings if your windows workgroup is different than the default. Or, leave it as default.
1. [public-ntfs]path = /mnt/data-ntfs/publicpublic = yeswriteable = yes
That’s it. Your Samba service should pick up the changes on its own, and sharing should be running already. Try rebooting the service if it didn’t.
Do this if you see any problem.
Update the OS and its registry: $ sudo apt update && apt upgrade
Install these packages, which help in working with multiple file systems: $ sudo apt install exfat-utils exfat-fuse ntfs-3g
You can secure your sharing by adding a user account to smb.conf file. To add a user account, open the file /etc/samba/smb.conf in any text editor and add the ‘valid user = user1’ line.
If you can’t connect your Pi with its name, try this. Add ‘wins support = yes‘ under the global settings. “This is optional.”
This is how you can build a personal cross-platform file server on Raspberry Pi.
Thank you for reading this article. Please visit the below links to read more such interesting articles. Please leave your comments here below and let us know your feedback. This helps us to bring more such articles.
You may also like these articles:
Arun KL is a cybersecurity professional with 15+ years of experience in IT infrastructure, cloud security, vulnerability management, Penetration Testing, security operations, and incident response. He is adept at designing and implementing robust security solutions to safeguard systems and data. Arun holds multiple industry certifications including CCNA, CCNA Security, RHCE, CEH, and AWS Security.
“Knowledge Arsenal: Empowering Your Security Journey through Continuous Learning”
"Cybersecurity All-in-One For Dummies" offers a comprehensive guide to securing personal and business digital assets from cyber threats, with actionable insights from industry experts.
BurpGPT is a cutting-edge Burp Suite extension that harnesses the power of OpenAI's language models to revolutionize web application security testing. With customizable prompts and advanced AI capabilities, BurpGPT enables security professionals to uncover bespoke vulnerabilities, streamline assessments, and stay ahead of evolving threats.
PentestGPT, developed by Gelei Deng and team, revolutionizes penetration testing by harnessing AI power. Leveraging OpenAI's GPT-4, it automates and streamlines the process, making it efficient and accessible. With advanced features and interactive guidance, PentestGPT empowers testers to identify vulnerabilities effectively, representing a significant leap in cybersecurity.
Tenable BurpGPT is a powerful Burp Suite extension that leverages OpenAI's advanced language models to analyze HTTP traffic and identify potential security risks. By automating vulnerability detection and providing AI-generated insights, BurpGPT dramatically reduces manual testing efforts for security researchers, developers, and pentesters.
Microsoft Security Copilot is a revolutionary AI-powered security solution that empowers cybersecurity professionals to identify and address potential breaches effectively. By harnessing advanced technologies like OpenAI's GPT-4 and Microsoft's extensive threat intelligence, Security Copilot streamlines threat detection and response, enabling defenders to operate at machine speed and scale.