Kudos for this article to Moritz_Bunkus
How-to: Samba Homes and Shares - Basics
1.user home directory
By default there’s a Samba share for the home directories of each user. This share is configured via the [homes]
section in smb.conf
. It’s a built-in share in UCS that you cannot see nor change in the Univention Management Console. It’s this share that enables users to connect to \\fileserver\<username>
. The corresponding path in Linux is ~<username>
, meaning the Linux home directory for <username>
, which is usually /home/<username>
(e.g. \\fileserver\mbunkus
→ ~mbunkus
→ /home/mbunkus
).
You can disable said built-in share by setting the UCR variable samba/share/home
to no
(default: yes
).
2. Windows home drive and path
So far this is completely independent of the user’s Windows settings in the UMC. Let’s talk about those next: the settings on the Account
tab, section Windows
.
The two settings Windows home drive
and Windows home path
work together. If the latter is set to a UNC path, that path is connected as the drive letter given by the former setting when the user logs in. For example, I might set H:
as the drive and let the OS mount my home share \\fileserver\mbunkus
there. The share given by the UNC path must exist, of course; my example should work as it refers to my home drive as explained above.
The Windows login script
can contain a UNC path to a script (e.g. a .bat
file or a PowerShell script) that will be executed during login, e.g. \\master\sysvol\mbu-test.intranet\scripts\mylogon.bat
The sysvol
share is a good choice for such scripts as it always exists in a Samba4 Active Directory domain. The corresponding Linux path for that share is /var/lib/samba/sysvol/<domain>/scripts
.
3. Windows profile directory
Let’s talk about the Windows profile directory
next. Here you can enter a UNC path to a directory where roaming profiles for users will be stored. The actual path used by the client depends on the version of the operating system; for example, Windows 10 appends .V6
to whatever’s been set as the Windows profile directory
. Example: \\fileserver\mbunkus\windows-profiles\default
You still have to ensure that the share actually exists (in my case the share mbunkus
on fileserver
). Again, my example should work fine for me as that’s my own home directory for which there’s a share by default.
If you do want to use romaing profiles but you do not want to store them in the user’s home directory in Linux but in another one (e.g. in /srv/windows-profiles/<username>
instead of /home/<username>/windows-profiles
), you have to create a Windows share for /srv/windows-profiles
in the UMC first, e.g. with the name windows-profiles
. Next you set your user’s Windows profile path
setting to \\fileserver\windows-profiles\<username>\default
. Of course you must make sure that /srv/windows-profiles/<username>
actually exists as it won’t be created automatically (this is different for the home directories; read my footnote [1] below).
4. Linux home share/ path
All of the above has nothing to do with the settings named Home share
and Home share path
in the section POSIX (Linux/Unix)
! Nothing at all!
The settings in that section are used in order to mount a user’s home directory from one Linux server to another Linux server via NFS. For example, if the home directory of user mbunkus
on fileserver
is /home/mbunkus
and I want to have the same path available when I ssh into the databaseserver
, I have to do the following:
- Create an NFS share in the UMC for the path
/home
onfileserver
, - Configure the user
mbunkus
so that theHome share
is set to the name of the share I created in step 1, likely something likehome (/home one fileserver)
and - Set the
Home share path
tombunkus
(this path is relative to the share’s path selected in step 2, effectively/home
+mbunkus
=/home/mbunkus
).
5. Best practice
On Windows the folders Desktop
, Downloads
are both part of the user’s profile. If you want to use roaming profiles, those folders will be synchronized with the server. Assuming you want to keep roaming profiles in your user’s home directory on your server domain-controller
, you might find the server-side copy of the Desktop
folder for a Windows 10 client in /home/<username>/windows-profiles/default.V2/Desktop
. You can easily symlink that folder into the user’s home directory, e.g. ln -s ~username/windows-profiles/default.V2/Desktop ~username/
You can then combine that with mounting the /home
directory from the domain-controller
server via NFS to the Linux server/client.
One of the drawbacks of that solution is that roaming profiles are only synced with the server during login& logout. If you create a new entry on your Windows client’s desktop, that entry will only show up on the server when the you log out of your current session.
Another possibility is to use Windows’ folder redirection (google for that term and you’ll find plenty of hits). It’s a mechanism that tells Windows that it should look for certain folders such as Desktop
or Downloads
not in the user’s profile directory but somewhere else — e.g. on a mapped network drive. You can use group policies for enabling folder redirection. The advantage is that all accesses to the redirected folders will occur in real time; meaning as soon as you create a new entry in Desktop
, it’ll show up on the server. The obvious drawback is that the server has to be reachable in that moment; you cannot work with such paths if your PC is not currently connected to your server.
[1] A lot of services on a UCS server are configured via PAM to create the user’s home directory if it doesn’t exist. The first time a user logs in to a server, e.g. via ssh or by accessing a Windows share via Samba, his/her home directory will be created automatically and filled with content from the template directory /etc/univention/skel
. That template contains the windows-profiles
directory — that’s why e.g. /home/mbunkus/windows-profiles
will be created the first time I log in).