Samba configuration failures on multiple PCs often stem from Unix user permission mismatches rather than network connectivity errors. By verifying that the Samba user exists in both the system and Samba databases, ensuring correct file ownership via chown, and restarting the service with systemctl restart smbd, you can resolve access denied errors on virtual machines and physical hosts alike.
Verifying User Existence in Both Databases
The most common cause for Samba failing to authenticate across different machines is a discrepancy between the operating system users and the Samba-specific user database. Samba does not automatically use Linux system passwords; it maintains its own password hash store. If a user exists in/etc/passwd but has never been added to the Samba database, authentication will fail regardless of network settings.
To fix this, you must first ensure the Unix user account exists on the host machine. Use the command id username to verify the user is recognized by the OS. Next, add the user to the Samba database using the command smbpasswd -a username. You will be prompted to enter a new SMB password. This step creates the necessary entry in /var/lib/samba/private/secrets.tdb.
If you are managing multiple virtual machines, repeat this process on each guest where the share is hosted. It is critical that the username matches exactly on all systems involved in the share. A mismatch in casing or spelling between the client request and the server definition will result in immediate rejection. After adding the user, test the connection locally using smbclient //localhost/sharename -U username. A successful prompt indicates the user database is correctly synchronized.
For more detailed steps on resolving access issues between Ubuntu and Windows clients, see our guide on Troubleshooting Samba Share Access Issues on Ubuntu 22 LTS and Windows 10.
Checking File Ownership and Permissions
Even with correct credentials, Samba will deny access if the underlying file permissions do not allow the authenticated user to read or write data. Linux file permissions operate independently of Samba configuration files. You must ensure that the directory shared by Samba is owned by the correct user or group. Use thels -ld /path/to/share command to check the current ownership. If the owner is root but you need to access it as a standard user, change the ownership using sudo chown -R username:group /path/to/share. The recursive flag ensures all subdirectories inherit the correct permissions. Additionally, verify the permission bits. A typical secure setting for a writable share might be 755 for directories and 644 for files, or 775 if group write access is required.
Samba’s config.smb file also contains parameters like valid users and read only. Ensure these align with your Linux filesystem permissions. If read only = yes is set in the share definition, no amount of filesystem permission tweaking will allow writes. Conversely, if the filesystem denies execution or writing, Samba cannot override it. Always check both layers of security when troubleshooting.
Validating Network and Firewall Settings
When troubleshooting across two different PCs, network visibility is a frequent point of failure. Firewalls on modern Linux distributions block incoming SMB traffic (ports 139 and 445) by default. Usesudo ufw status to check if the firewall is active. If it is, allow Samba traffic with sudo ufw allow samba or specifically sudo ufw allow 139,445/tcp.
On the client side, ensure that network discovery is enabled. In Windows, this involves turning on network discovery and file sharing in the Network and Sharing Center. On Linux clients, use tools like nmap or smbclient -L //server_ip to verify the server is visible. If the server is not listed, the issue is likely network segmentation or firewall blocking rather than configuration syntax.
Check the smb.conf file for the interfaces and bind interfaces only directives. If these are misconfigured, Samba might listen only on localhost or a specific interface that is not reachable from the second PC. Setting bind interfaces only = no allows Samba to listen on all available interfaces, which is safer for development environments.
See our article on Connection Home Failed: Troubleshooting Samba Server Access with Linux smbclient for deeper insights into client-side connectivity diagnostics.
Restarting Services and Reloading Configuration
Changes tosmb.conf do not take effect immediately until the service is restarted. Many users modify the configuration file but forget to apply the changes, leading to persistent errors. Use sudo systemctl restart smbd to restart the Samba daemon. For newer versions of Samba, you may also need to restart nmbd if NetBIOS name resolution is required.
After restarting, check the service status with sudo systemctl status smbd. Look for any error messages in the output. If the service fails to start, review the log files located at /var/log/samba/log.smbd. These logs provide detailed information about why the configuration was rejected, such as syntax errors or missing directories.
Always validate your configuration before restarting. Use the command testparm to check smb.conf for syntax errors. This tool reads the configuration file and reports any invalid parameters. Fixing errors reported by testparm prevents service crashes and ensures that your changes are applied correctly.
Frequently Asked Questions
Why does Samba work on one VM but not another?
Differences usually lie in the user database synchronization or firewall rules. Ensure the Samba user is added with smbpasswd -a on both machines and that UFW allows SMB traffic on the non-working VM.
How do I reset a forgotten Samba password?
You can reset the password by running smbpasswd username as root. This prompts for a new password and updates the Samba database without affecting the underlying Linux system password.
What causes "Permission Denied" despite correct credentials?
This is almost always a Linux filesystem permission issue. Check the ownership with ls -l and ensure the user has read/write rights via chmod or chown on the shared directory.
Can I use Windows credentials to access a Samba share?
No, Samba requires its own password database. You must create a corresponding user in Samba using smbpasswd that matches the Linux system user you intend to use for authentication.
Why is my Samba share invisible on the network?
The server may be binding to the wrong interface or blocked by a firewall. Verify bind interfaces only in smb.conf and ensure ports 139 and 445 are open in your firewall settings.