Opening /dev/stdout in Docker
Benjamin Thompson
b.thompson at hydra-billing.com
Thu Aug 4 08:14:54 UTC 2022
Hi
I am running v3.2.0 in a Docker container and I wanted to do some logging
with linelog so I set the filename parameter to "/dev/stdout".
This gave me the error:
Error: rlm_linelog: Failed to open /dev/stdout: Permission denied
After googling this I understood that that I need to add the radius user to
the tty group so did:
usermod -a -G tty radius
However this didn't help so I ran ls -l on /dev/stdout to see what the
permissions were:
lrwxrwxrwx 1 root root 15 Aug 4 14:05 /dev/stdout -> /proc/self/fd/1
Which links to:
l-wx------ 1 root root 64 Aug 4 14:06 /proc/self/fd/1 -> pipe:[18026581]
>From looking at this I worked out there was no tty group involved.
Then after researching this I tried adding "tty: true" to my
docker-compose.yml file and then this gave me a device with write access
from the tty group:
lrwxrwxrwx 1 root root 15 Aug 4 14:45 /dev/stdout -> /proc/self/fd/1
lrwx------ 1 root root 64 Aug 4 14:45 /proc/self/fd/1 -> /dev/pts/0
crw--w---- 1 root tty 136, 0 Aug 4 2022 /dev/pts/0
However this did not help so I looked at the source code and noticed that
FreeRADIUS is opening the file with read/write permissions whereas only
write is available:
https://github.com/FreeRADIUS/freeradius-server/blob/v3.2.x/src/main/exfile.c#L161
if (strncmp(filename, "/dev/", 5) == 0) {
fd = open(filename, O_RDWR, permissions);
So then I ran:
chmod g+r /dev/pts/0
After this linelog was able to log to stdout.
However with "tty: true" I am now getting some extra control characters in
my logs such as "'#033#015". This is inconvenient but non critical.
I would be grateful if anyone could advise or assist with a better solution.
--
Benjamin Thompson
More information about the Freeradius-Users
mailing list