Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
SUDO_LOGSRVD(8)		    System Manager's Manual	       SUDO_LOGSRVD(8)

NAME
       sudo_logsrvd -- sudo event and I/O log server

SYNOPSIS
       sudo_logsrvd [-hnV] [-f file] [-R percentage]

DESCRIPTION
       sudo_logsrvd  is	 a  high-performance log server	that accepts event and
       I/O logs	from sudo.  It can be used to implement	centralized logging of
       sudo logs.  The server has two modes of operation: local	and relay.  By
       default,	sudo_logsrvd stores the	logs locally but it can	also  be  con-
       figured	 to   relay   them   to	  another  server  that	 supports  the
       sudo_logsrv.proto(5) protocol.

       When not	relaying, event	log entries may	be logged either via syslog(3)
       or to a local file.  I/O	Logs stored locally by sudo_logsrvd can	be re-
       played via the sudoreplay(8) utility in the same	way as logs  generated
       directly	by the sudoers plugin.

       The server also supports	restarting interrupted log transfers.  To dis-
       tinguish	 completed  I/O	 logs from incomplete ones, the	I/O log	timing
       file is set to be read-only when	the log	is complete.

       Configuration parameters	for  sudo_logsrvd  may	be  specified  in  the
       sudo_logsrvd.conf(5) file or the	file specified via the -f option.

       sudo_logsrvd rereads its	configuration file when	it receives SIGHUP and
       writes  server  state  to the debug file	(if one	is configured) when it
       receives	SIGUSR1.

       The options are as follows:

       -f file,	--file=file
	       Read  configuration  from  file	 instead   of	the   default,
	       /usr/local/etc/sudo_logsrvd.conf.

       -h, --help
	       Display a short help message to the standard output and exit.

       -n, --no-fork
	       Run  sudo_logsrvd  in  the foreground instead of	detaching from
	       the terminal and	becoming a daemon.

       -R percentage, --random-drop=percentage
	       For each	message, there is a percentage chance that the	server
	       will  drop the connection.  This	is only	intended for debugging
	       the ability of a	client to restart a connection.

       -V, --version
	       Print the sudo_logsrvd version and exit.

   Securing server connections
       The I/O log data	sent to	sudo_logsrvd may contain sensitive information
       such as passwords and should be secured using Transport Layer  Security
       (TLS).	Doing  so  requires  having a signed certificate on the	server
       and, if tls_checkpeer is	enabled	in sudo_logsrvd.conf(5), a signed cer-
       tificate	on the client as well.

       The certificates	can either be signed by	a well-known  Certificate  Au-
       thority (CA), or	a private CA can be used.  Instructions	for creating a
       private CA are included below in	the "EXAMPLES" section.

   Debugging sudo_logsrvd
       sudo_logsrvd supports a flexible	debugging framework that is configured
       via Debug lines in the sudo.conf(5) file.

       For more	information on configuring sudo.conf(5), refer to its manual.

FILES
       /usr/local/etc/sudo.conf	 Sudo front-end	configuration

       /usr/local/etc/sudo_logsrvd.conf
				 Sudo log server configuration file

       /var/log/sudo_logsrvd/incoming
				 Directory  where new journals are stored when
				 the store_first relay setting is enabled.

       /var/log/sudo_logsrvd/outgoing
				 Directory where completed journals are	stored
				 when the store_first  relay  setting  is  en-
				 abled.

       /var/log/sudo-io		 Default I/O log file location

       /var/run/sudo/sudo_logsrvd.pid
				 Process ID file for sudo_logsrvd

EXAMPLES
   Creating self-signed	certificates
       Unless  you  are	 using certificates signed by a	well-known Certificate
       Authority (or a local enterprise	CA), you will need to create your  own
       CA  that	 can sign the certificates used	by sudo_logsrvd, sudo_sendlog,
       and the sudoers plugin.	The following steps use	the openssl(1) command
       to create keys and certificates.

   Initial setup
       First, we need to create	a directory structure to store the  files  for
       the  CA.	  We'll	 create	a new directory	hierarchy in /etc/ssl/sudo for
       this purpose.

	   # mkdir /etc/ssl/sudo
	   # cd	/etc/ssl/sudo
	   # mkdir certs csr newcerts private
	   # chmod 700 private
	   # touch index.txt
	   # echo 1000 > serial

       The serial and index.txt	files are used to keep track  of  signed  cer-
       tificates.

       Next,  we need to make a	copy of	the openssl.conf file and customize it
       for our new CA.	 The  path  to	openssl.cnf  is	 system-dependent  but
       /etc/ssl/openssl.cnf is the most	common location.  You will need	to ad-
       just the	example	below if it has	a different location on	your system.

	   # cp	/etc/ssl/openssl.cnf .

       Now edit	the openssl.cnf	file in	the current directory and make sure it
       contains	 "ca",	"CA_default", "v3_ca", and "usr_cert" sections.	 Those
       sections	should include at least	the following settings:

	   [ ca	]
	   default_ca		   = CA_default

	   [ CA_default	]
	   dir			   = /etc/ssl/sudo
	   certs		   = $dir/certs
	   database		   = $dir/index.txt
	   certificate		   = $dir/cacert.pem
	   serial		   = $dir/serial

	   [ v3_ca ]
	   subjectKeyIdentifier	   = hash
	   authorityKeyIdentifier  = keyid:always,issuer
	   basicConstraints	   = critical,CA:true
	   keyUsage		   = cRLSign, keyCertSign

	   [ usr_cert ]
	   basicConstraints	   = CA:FALSE
	   keyUsage		   = nonRepudiation, digitalSignature, \
				     keyEncipherment
	   subjectKeyIdentifier	   = hash
	   authorityKeyIdentifier  = keyid,issuer

       If your openssl.conf file already has a "CA_default" section,  you  may
       only  need  to  modify the "dir"	setting	and enable the "keyUsage" set-
       tings if	they are commented out.

   Creating the	CA key and certificate
       In order	to create and sign our own certificates, we need to  create  a
       private	key  and  a certificate	for the	root of	the CA.	 First,	create
       the private key and protect it with a pass phrase:

	   # openssl genrsa -aes256 -out private/cakey.pem 4096
	   # chmod 400 private/cakey.pem

       Next, generate the root certificate, using appropriate values  for  the
       site-specific fields:

	   # openssl req -config openssl.cnf -key private/cakey.pem \
	       -new -x509 -days	7300 -sha256 -extensions v3_ca \
	       -out cacert.pem

	   Enter pass phrase for private/cakey.pem:
	   You are about to be asked to	enter information that will be
	   incorporated	into your certificate request.
	   What	you are	about to enter is what is called a Distinguished Name
	   or a	DN.
	   There are quite a few fields	but you	can leave some blank.
	   For some fields there will be a default value,
	   If you enter	'.', the field will be left blank.
	   -----
	   Country Name	(2 letter code)	[AU]:US
	   State or Province Name (full	name) [Some-State]:Colorado
	   Locality Name (eg, city) []:
	   Organization	Name (eg, company) [Internet Widgets Pty Ltd]:sudo
	   Organizational Unit Name (eg, section) []:sudo Certificate Authority
	   Common Name (e.g., server FQDN or YOUR name)	[]:sudo	Root CA
	   Email Address []:

	   # chmod 444 cacert.pem

       Finally,	verify the root	certificate:

	   # openssl x509 -noout -text -in cacert.pem

   Creating and	signing	certificates
       The  server  and	 client	 certificates will be signed by	the previously
       created	root  CA.   Usually,  the  root	 CA  is	 not  used   to	  sign
       server/client  certificates  directly.	Instead, intermediate certifi-
       cates are created and signed with the  root  CA	and  the  intermediate
       certs are used to sign CSRs (Certificate	Signing	Request).  In this ex-
       ample we'll skip	this part for simplicity's sake	and sign the CSRs with
       the root	CA.

       First, generate the private key without a pass phrase.

	   # openssl genrsa -out private/logsrvd_key.pem 2048
	   # chmod 400 private/logsrvd_key.pem

       Next,  create a certificate signing request (CSR) for the server's cer-
       tificate.  The organization name	must match the name given in the  root
       certificate.   The common name should be	either the server's IP address
       or a fully qualified domain name.

	   # openssl req -config openssl.cnf -key private/logsrvd_key.pem -new \
	       -sha256 -out csr/logsrvd_csr.pem

	   Enter pass phrase for private/logsrvd_key.pem:
	   You are about to be asked to	enter information that will be
	   incorporated	into your certificate request.
	   What	you are	about to enter is what is called a Distinguished Name
	   or a	DN.
	   There are quite a few fields	but you	can leave some blank.
	   For some fields there will be a default value,
	   If you enter	'.', the field will be left blank.
	   -----
	   Country Name	(2 letter code)	[AU]:US
	   State or Province Name (full	name) [Some-State]:Colorado
	   Locality Name (eg, city) []:
	   Organization	Name (eg, company) [Internet Widgets Pty Ltd]:sudo
	   Organizational Unit Name (eg, section) []:sudo log server
	   Common Name (e.g., server FQDN or YOUR name)	[]:logserver.example.com
	   Email Address []:

	   Please enter	the following 'extra' attributes
	   to be sent with your	certificate request
	   A challenge password	[]:
	   An optional company name []:

       Now sign	the CSR	that was just created:

	   # openssl ca	-config	openssl.cnf -days 375 -notext -md sha256 \
	       -in csr/logsrvd_csr.pem -out certs/logsrvd_cert.pem

	   Using configuration from openssl.cnf
	   Enter pass phrase for ./private/cakey.pem:
	   Check that the request matches the signature
	   Signature ok
	   Certificate Details:
		   Serial Number: 4096 (0x1000)
		   Validity
		       Not Before: Nov 11 14:05:05 2019	GMT
		       Not After : Nov 20 14:05:05 2020	GMT
		   Subject:
		       countryName		 = US
		       stateOrProvinceName	 = Colorado
		       organizationName		 = sudo
		       organizationalUnitName	 = sudo	log server
		       commonName		 = logserve.example.com
		   X509v3 extensions:
		       X509v3 Basic Constraints:
			   CA:FALSE
		       X509v3 Key Usage:
			   Digital Signature, Non Repudiation, Key Encipherment
		       X509v3 Subject Key Identifier:
			   4C:50:F9:D0:BE:1A:4C:B2:AC:90:76:56:C7:9E:16:AE:E6:9E:E5:B5
		       X509v3 Authority	Key Identifier:
			   keyid:D7:91:24:16:B1:03:06:65:1A:7A:6E:CF:51:E9:5C:CB:7A:95:3E:0C

	   Certificate is to be	certified until	Nov 20 14:05:05	2020 GMT (375 days)
	   Sign	the certificate? [y/n]:y

	   1 out of 1 certificate requests certified, commit? [y/n]y
	   Write out database with 1 new entries
	   Data	Base Updated

       Finally,	verify the new certificate:

	   # openssl verify -CAfile cacert.pem certs/logsrvd_cert.pem
	   certs/logsrvd_cert.pem: OK

       The /etc/ssl/sudo/certs directory now contains a	 signed	 and  verified
       certificate for use with	sudo_logsrvd.

       To generate a client certificate, repeat	the process above using	a dif-
       ferent file name.

   Configuring sudo_logsrvd to use TLS
       To  use	TLS for	client/server communication, both sudo_logsrvd and the
       sudoers	plugin	need  to  be  configured  to  use  TLS.	   Configuring
       sudo_logsrvd for	TLS requires the following settings, assuming the same
       path names used earlier:

	   # Listen on port 30344 for TLS connections to any address.
	   listen_address = *:30344(tls)

	   # Path to the certificate authority bundle file in PEM format.
	   tls_cacert =	/etc/ssl/sudo/cacert.pem

	   # Path to the server's certificate file in PEM format.
	   tls_cert = /etc/ssl/sudo/certs/logsrvd_cert.pem

	   # Path to the server's private key file in PEM format.
	   tls_key = /etc/ssl/sudo/private/logsrvd_key.pem

       The  root  CA cert (cacert.pem) must be installed on the	system running
       sudo_logsrvd.  If peer authentication is	enabled	on the client, a  copy
       of cacert.pem must be present on	the client system too.

SEE ALSO
       sudo.conf(5),  sudo_logsrv.proto(5),  sudo_logsrvd.conf(5), sudoers(5),
       sudo(8),	sudo_sendlog(8), sudoreplay(8)

AUTHORS
       Many people have	worked on sudo over the	years; this  version  consists
       of code written primarily by:

	     Todd C. Miller

       See    the    CONTRIBUTORS.md	file	in   the   sudo	  distribution
       (https://www.sudo.ws/about/contributors/) for  an  exhaustive  list  of
       people who have contributed to sudo.

BUGS
       If  you	believe	 you  have found a bug in sudo_logsrvd,	you can	either
       file a bug report in the	sudo bug database,  https://bugzilla.sudo.ws/,
       or  open	 an  issue at https://github.com/sudo-project/sudo/issues.  If
       you would prefer	to use email, messages may be sent to the sudo-workers
       mailing list,  https://www.sudo.ws/mailman/listinfo/sudo-workers	 (pub-
       lic) or <sudo@sudo.ws> (private).

       Please do not report security vulnerabilities through public GitHub is-
       sues,  Bugzilla	or  mailing  lists.  Instead, report them via email to
       <Todd.Miller@sudo.ws>.  You may encrypt your message with  PGP  if  you
       would like, using the key found at https://www.sudo.ws/dist/PGPKEYS.

SUPPORT
       Limited	free support is	available via the sudo-users mailing list, see
       https://www.sudo.ws/mailman/listinfo/sudo-users to subscribe or	search
       the archives.

DISCLAIMER
       sudo_logsrvd is provided	"AS IS"	and any	express	or implied warranties,
       including,  but not limited to, the implied warranties of merchantabil-
       ity and fitness for a particular	purpose	are disclaimed.	 See  the  LI-
       CENSE.md	 file  distributed  with sudo or https://www.sudo.ws/about/li-
       cense/ for complete details.

Sudo 1.9.17p2			 July 14, 2024		       SUDO_LOGSRVD(8)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=sudo_logsrvd&sektion=8&manpath=FreeBSD+Ports+15.1.quarterly>

home | help