The unix
vmod provides information about the credentials of the peer
process (user and group of the process owner) that is connected to a
Varnish listener via a Unix domain socket, if the platform supports
it.
All functions in this VMOD are subject to the following constraints:
None of them may be called in sub vcl_init
or sub vcl_fini
. If one
of them is called in sub vcl_init
, then the VCL program will fail to
load, with an error message from the VMOD.
If called on a platform that is not supported, then VCL failure is
invoked. An error message is written to the log (with the
sub vcl_Error
tag), and for all VCL subroutines except for
sub vcl_synth
, control is directed immediately to sub vcl_synth
,
with the response status set to 503 and the reason string set to
“VCL failed”.
If the failure occurs during sub vcl_synth
, then sub vcl_synth
is
aborted, and the the response line “503 VCL failed” is sent.
sub vcl_Error
message is
written to the log. The STRING functions (vmod_user
and
vmod_group
) return NULL, while the INT functions (vmod_uid
and vmod_gid
) return -1.import unix;
sub vcl_recv {
# Return "403 Forbidden" if the connected peer is
# not running as the user "trusteduser".
if (unix.user() != "trusteduser") {
return( synth(403) );
}
# Require the connected peer to run in the group
# "trustedgroup".
if (unix.group() != "trustedgroup") {
return( synth(403) );
}
# Require the connected peer to run under a specific numeric
# user id.
if (unix.uid() != 4711) {
return( synth(403) );
}
# Require the connected peer to run under a numeric group id.
if (unix.gid() != 815) {
return( synth(403) );
}
}
Obtaining the peer credentials is possible on a platform that supports one of the following:
getpeereid(3)
(such as FreeBSD and other BSD-derived systems)
the socket option SO_PEERCRED
for getsockopt(2)
(Linux)
getpeerucred(3C)
(SunOS and descendants)
On SunOS and friends, the PRIV_PROC_INFO
privilege set is added to
the Varnish child process while the VMOD is loaded, see
setppriv(2)
.
On most platforms, the value returned is the effective user or group that was valid when the peer process initiated the connection.
STRING user()
Return the user name of the peer process owner.
Arguments: None
Type: Function
Returns: String
Restricted to: client
, backend
STRING group()
Return the group name of the peer process owner.
Arguments: None
Type: Function
Returns: String
Restricted to: client
, backend
INT uid()
Return the numeric user id of the peer process owner.
Arguments: None
Type: Function
Returns: Int
Restricted to: client
, backend
INT gid()
Return the numeric group id of the peer process owner.
Arguments: None
Type: Function
Returns: Int
Restricted to: client
, backend
The unix
VMOD is available in Varnish Enterprise version 6.0.0r0
and later.