WINBINDD(8)

๐Ÿ’– WINBINDD โ€” the manual page, but make it make sense ๐Ÿ’–

winbindd โ€” that's the Name Service Switch daemon bestie, the one that goes and resolves names from NT servers so you don't have to ๐Ÿ˜ญโœจ


โœจ SYNOPSIS โœจ

winbindd [-D|--daemon] [-i|--interactive] [-F|--foreground]
 [--no-process-group] [-n|--no-caching] [-d <debug level>]
 [--debug-stdout] [--configfile=<configuration file>]
 [--option=<name>=<value>] [-l|--log-basename <log directory>]
 [--leak-report] [--leak-report-full] [-V|--version]

๐ŸŒธ DESCRIPTION ๐ŸŒธ

Okay so first things first: this program is part of the samba(7) suite. Family member. Part of the ensemble. ๐Ÿ‘‘

winbindd is a daemon, and it's out here providing a whole bunch of services to the Name Service Switch capability that lives in most modern C libraries, plus to random applications through PAM and ntlm_auth, and also to Samba itself. It's giving networking icon, it's giving "I talk to everyone".

And like, even if winbind isn't being used for nsswitch? It still provides a service to smbd, ntlm_auth and the pam_winbind.so PAM module, by managing connections to domain controllers. In this configuration the idmap config * : range parameter is not required. (This whole situation is known as ``netlogon proxy only mode''.) ๐Ÿ’…

The Name Service Switch lets user and system information be pulled from different database services like NIS or DNS. The exact behaviour is configurable through the /etc/nsswitch.conf file. Users and groups get allocated as they're resolved, into a range of user and group ids that the administrator of the Samba system specified. Slay, custom ranges.

The service winbindd provides is called ``winbind'' and it can be used to resolve user and group information from a Windows NT server. It can also hand out authentication services via an associated PAM module. Versatile queen.

The pam_winbind module supports the auth, account and password module-types. Quick note though: the account module just does a getpwnam() to verify that the system can obtain a uid for the user, because the domain controller already did the access control part. So if the libnss_winbind library is correctly installed, or an alternate source of names is configured, this should always succeed. No drama. ๐Ÿซถ

The following nsswitch databases are implemented by the winbindd service:

  • hosts โ€” okay so this feature is only available on IRIX. User information traditionally stored in the hosts(5) file and used by the gethostbyname(3) functions. Names are resolved through the WINS server or by broadcast.
  • passwd โ€” user information traditionally stored in the passwd(5) file and used by the getpwent(3) functions.
  • group โ€” group information traditionally stored in the group(5) file and used by the getgrent(3) functions.

For example, the following simple configuration in the /etc/nsswitch.conf file can be used to initially resolve user and group information from /etc/passwd and /etc/group and then from the Windows NT server. Look at it. It's so tidy:

passwd:         files winbind
group:          files winbind
## only available on IRIX: use winbind to resolve hosts:
# hosts:        files dns winbind
## All other NSS enabled systems should use libnss_wins.so like this:
hosts:          files dns wins

And this next one โ€” the following simple configuration in the /etc/nsswitch.conf file โ€” can be used to initially resolve hostnames from /etc/hosts and then from the WINS server. Baby steps, filesystem first:

hosts:         files wins

๐ŸŽ€ OPTIONS ๐ŸŽ€

  • -D|--daemon โ€” if you specify this, the server operates as a daemon. Meaning: it detaches itself and runs in the background on the appropriate port. And heads up, this switch is assumed if winbindd is executed on the command line of a shell. It just does it. Main character behaviour honestly.
  • -i|--interactive โ€” tells winbindd to not become a daemon and not detach from the current terminal. Devs use this when they need interactive debugging of winbindd. Also, winbindd logs to standard output in this mode, as if the -S parameter had been given. ๐Ÿ‘€
  • -F|--foreground โ€” if specified, the main winbindd process will not daemonize, i.e. it won't double-fork and disassociate with the terminal. Child processes are still created as normal to service each connection request, but the main process does not exit. This mode is perfect for running winbindd under process supervisors like supervise and svscan from Daniel J. Bernstein's daemontools package, or the AIX process monitor. Supervisor girlies, this one's for you ๐Ÿ’…
  • --no-process-group โ€” do not create a new process group for winbindd. That's it, that's the whole thing.
  • -n|--no-caching โ€” disables some caching. Which means winbindd will often have to wait for a response from the domain controller before it can respond to a client, so yeah, things get slower. But the results will be more accurate, since results from the cache might not be up-to-date. It might also temporarily hang winbindd if the DC doesn't respond ๐Ÿ˜ญ. Important: this does not disable the samlogon cache, because that one is required for group membership tracking in trusted environments.
  • -d|--debuglevel=level โ€” level is an integer from 0 to 10. The default value if this parameter is not specified is 0.

The higher this value, the more detail gets logged to the log files about what the server is doing. At level 0, only critical errors and serious warnings get logged. Level 1 is a reasonable level for day-to-day running โ€” it generates a small amount of information about operations carried out.

Levels above 1 generate considerable amounts of log data, so only use them when investigating a problem. Levels above 3 are designed for developers only and generate HUGE amounts of log data, most of which is extremely cryptic. You have been warned bestie ๐Ÿ™ˆ

Also note: specifying this parameter here will override the log level parameter in the /etc/samba/smb.conf file. Command line wins, always.

  • --debug-stdout โ€” this redirects debug output to STDOUT. By default, server daemons log to a log file. Now they can log at you directly.
  • --configfile=CONFIGFILE โ€” the file specified here contains the configuration details required by the server. The info in this file includes server-specific stuff like what printcap file to use, plus descriptions of all the services the server is meant to provide. See /etc/samba/smb.conf for more. The default configuration file name is determined at compile time.
  • --option=<name>=<value> โ€” set the smb.conf(5) option "<name>" to value "<value>" from the command line. This overrides compiled-in defaults and options read from the configuration file. If a name or a value includes a space, wrap the whole --option=name=value into quotes. Don't forget, or it will simply not work and you'll be sad.
  • -l|--log-basename=logdirectory โ€” base directory name for log/debug files. The parent process uses filename log.winbindd, the child process uses filename log.wb-<name>. And no, winbindd never removes the log file. It just keeps it. Forever. ๐Ÿซถ
  • --leak-report โ€” enable talloc leak reporting on exit. Snitching on leaks, as it should.
  • --leak-report-full โ€” enable full talloc leak reporting on exit. The deluxe snitching package.
  • -V|--version โ€” prints the program version number.
  • -?|--help โ€” print a summary of command line options.
  • --usage โ€” display brief usage message.

๐ŸŒˆ NAME AND ID RESOLUTION ๐ŸŒˆ

Users and groups on a Windows NT server get assigned a security id (SID) which is globally unique when the user or group is created. To convert a Windows NT user or group into a unix user or group, you need a mapping between SIDs and unix user and group ids. And that, bestie, is one of the jobs that winbindd performs. It's the translator. The go-between. ๐Ÿ’–

As winbindd resolves users and groups from a server, user and group ids get allocated from a specified range. This happens on a first come, first served basis, although all existing users and groups will be mapped as soon as a client performs a user or group enumeration command. The allocated unix ids are stored in a database and will be remembered. Memory like an elephant, no cap.

WARNING: the SID to unix id database is the only location where the user and group mappings are stored by winbindd. If this store is deleted or corrupted, there is no way for winbindd to determine which user and group ids correspond to Windows NT user and group rids. Protect that database with your life. It's the whole plot. ๐Ÿ˜ญ

โญ CONFIGURATION โญ

Configuration of the winbindd daemon happens through configuration parameters in the smb.conf(5) file. All parameters should be specified in the [global] section of smb.conf. No scattering them around, keep it in global.

  • winbind separator
  • idmap config * : range
  • idmap config * : backend
  • winbind cache time
  • winbind enum users
  • winbind enum groups
  • template homedir
  • template shell
  • winbind use default domain
  • winbind: rpc only โ€” setting this parameter forces winbindd to use RPC instead of LDAP to retrieve information from Domain Controllers.

โœจ EXAMPLE SETUP โœจ

okay bestie, here's the whole vibe of getting winbindd running for user + group lookups and authentication from a domain controller. This setup was tested on an early Red Hat Linux box, so it's giving certified classic ๐Ÿ’…

In /etc/nsswitch.conf you're gonna put this:

passwd: files winbind
group:  files winbind

Then in /etc/pam.d/* you replace the auth lines with something like this:

auth  required    /lib/security/pam_securetty.so
auth  required   /lib/security/pam_nologin.so
auth  sufficient  /lib/security/pam_winbind.so
auth  required   /lib/security/pam_unix.so \
                  use_first_pass shadow nullok
Note ๐Ÿซถ The PAM module pam_unix has recently replaced the module pam_pwdb. Some Linux systems use the module pam_unix2 in place of pam_unix.

and notice, like, notice ๐Ÿ‘€ the use of the sufficient keyword and the use_first_pass keyword. Those two are the moment, fr fr.

Now replace the account lines with this:

account required /lib/security/pam_winbind.so

Next step: join the domain. Do that with the net program, like this:

net join -S PDC -U Administrator

The username after the -U can be any Domain user that has administrator privileges on the machine. And substitute the name or IP of your PDC for "PDC", obviously bestie, don't just copy it ๐Ÿ’€

Next, copy libnss_winbind.so to /lib and pam_winbind.so to /lib/security. You also need a symbolic link made from /lib/libnss_winbind.so to /lib/libnss_winbind.so.2. And if you're on an older version of glibc, then the target of the link should be /lib/libnss_winbind.so.1 instead. slay โœจ

Finally, set up a smb.conf(5) containing directives like the following:

[global]
     winbind separator = +
        winbind cache time = 10
        template shell = /bin/bash
        template homedir = /home/%D/%U
        idmap config * : range = 10000-20000
        workgroup = DOMAIN
        security = domain
        password server = *

Now start winbindd and you should find that your user and group database is expanded to include your NT users and groups, and that you can login to your unix box as a domain user, using the DOMAIN+user syntax for the username. You may wish to use the commands getent passwd and getent group to confirm the correct operation of winbindd. go verify, you got this ๐ŸŒธ


๐Ÿ“ NOTES ๐Ÿ“

The following notes are useful when configuring and running winbindd:

  • PAM is really easy to misconfigure. Make sure you know what you are doing when modifying PAM configuration files. It is possible to set up PAM such that you can no longer log into your system. no like seriously, you can lock yourself out of your own machine, be careful!! ๐Ÿ˜ญ
  • If more than one UNIX machine is running winbindd, then in general the user and groups ids allocated by winbindd will not be the same. The user and group ids will only be valid for the local machine, unless a shared idmap config * : backend is configured.
  • If the Windows NT SID to UNIX user and group id mapping file is damaged or destroyed then the mappings will be lost. ๐Ÿ’€

๐Ÿšจ SIGNALS ๐Ÿšจ

The following signals can be used to manipulate the winbindd daemon.

  • SIGHUP โ€” Reload the smb.conf(5) file and apply any parameter changes to the running version of winbindd. This signal also clears any cached user and group information. The list of other domains trusted by winbindd is also reloaded.

Instead of sending a SIGHUP signal, a request to reload configuration file may be sent using smbcontrol(1) program.

  • SIGUSR2 โ€” The SIGUSR2 signal will cause winbindd to write status information to the winbind log file.

Log files are stored in the filename specified by the log file parameter.


๐ŸŽ€ FILES ๐ŸŽ€

  • /etc/nsswitch.conf(5) โ€” Name service switch configuration file.
  • /run/samba/winbindd/pipe โ€” The UNIX pipe over which clients communicate with the winbindd program. For security reasons, the winbind client will only attempt to connect to the winbindd daemon if both the /run/samba/winbindd directory and /run/samba/winbindd/pipe file are owned by root.

winbindd socket directory overrides this default.

  • $STATEDIR/winbindd_privileged/pipe โ€” The UNIX pipe over which 'privileged' clients communicate with the winbindd program. For security reasons, access to some winbindd functions - like those needed by the ntlm_auth utility - is restricted. By default, only users in the 'root' group will get this access, however the administrator may change the group permissions on $STATEDIR/winbindd_privileged to allow programs like 'squid' to use ntlm_auth. Note that the winbind client will only attempt to connect to the winbindd daemon if both the $STATEDIR/winbindd_privileged directory and $STATEDIR/winbindd_privileged/pipe file are owned by root.

state dir controls what $STATEDIR refers to.

  • /lib/libnss_winbind.so.X โ€” Implementation of name service switch library.
  • $STATEDIR/winbindd_idmap.tdb โ€” Storage for the Windows NT rid to UNIX user/group id mapping. The directory is specified when Samba is initially compiled using the --with-statedir option or state dir. The default directory in this installation is /var/lib/samba.
  • $LOCKDIR/winbindd_cache.tdb โ€” Storage for cached user and group information.

๐Ÿ’– VERSION ๐Ÿ’–

This man page is part of version 4.24.7 of the Samba suite.


๐ŸŒˆ SEE ALSO ๐ŸŒˆ

nsswitch.conf(5), samba(7), wbinfo(1), ntlm_auth(8), smb.conf(5), pam_winbind(8)


๐Ÿ‘‘ AUTHOR ๐Ÿ‘‘

The original Samba software and related utilities were created by Andrew Tridgell. Samba is now developed by the Samba Team as an Open Source project similar to the way the Linux kernel is developed.

wbinfo and winbindd were written by Tim Potter.

The conversion to DocBook for Samba 2.2 was done by Gerald Carter. The conversion to DocBook XML 4.2 for Samba 3.0 was done by Alexander Bokovoy.


and that's the whole page bestie!! ๐Ÿฆ‹ this one's from Samba version 4.24.7, dated 09/09/2026 โ€” go forth and winbind, you absolute icon ๐Ÿ’…โœจ

๐Ÿ“ฆ where this page comes from