У меня странная проблема с OpenVPN:
В моей конфигурации OpenVPN аутентифицирует пользователей на основе консольного приложения laravel. Сайт Laravel обслуживается с помощью Nginx, работающего как www-data. Каталог хранилища / журналов имеет следующие права собственности и разрешения:
drwxrwsr-x+ 2 www-data vpnlog 4.0K Mar 25 15:36 logs
www-data и ни к кому не привязана группа vpnlog
Также я установил следующий ACL:
mathewp@vpn:/etc/openvpn/apps/vpn-self-service/storage$ getfacl logs/
# file: logs/
# owner: www-data
# group: vpnlog
# flags: -s-
user::rwx
group::rwx
other::r-x
default:user::rwx
default:user:nobody:rw-
default:group::rwx
default:group:nogroup:rw-
default:mask::rwx
default:other::r-x
Openvpn server.conf:
script-security 2 # must be at least 2
auth-user-pass-verify /etc/openvpn/checkUser.sh via-file
username-as-common-name # without this openvpn will use cn in the certificate as username
duplicate-cn # you may need this if everyone is using same certificate
local 10.1.1.157
port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh.pem
auth SHA512
tls-crypt tc.key
topology subnet
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DOMAIN X.X.X.X"
push "dhcp-option DNS 10.1.1.157"
push "route 10.8.0.0 255.255.255.0"
push "route 10.1.1.0 255.255.255.0"
push "redirect-gateway def1 bypass-dhcp"
push "block-outside-dns"
client-to-client
keepalive 10 120
cipher AES-256-CBC
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
log-append /var/log/openvpn-log.txt
verb 3
crl-verify crl.pem
explicit-exit-notify
/etc/openvpn/checkUser.sh выглядит следующим образом:
#!/bin/bash
PHP_APP=/usr/bin/php
ARTISAN=/etc/openvpn/apps/vpn-self-service/artisan
echo "${PHP_APP} ${ARTISAN} openvpn:validate $1"
${PHP_APP} ${ARTISAN} openvpn:validate "$1"
exit $?
Эта консольная команда (openvpn: validate) пытается записать файл журнала в хранилище / log.
Но это не удается с отказом в разрешении, если файл журнала еще не существует. Однако, если файл журнала уже существует, он добавляется нормально.
Можете ли вы помочь мне отладить и понять, в чем проблема с разрешением!
Это файл, в который он пытается записать:
-rw-rw-r--+ 1 www-data vpnlog 223 Mar 25 15:52 vpn.log
Пользователь nobody
и группа nogroup
под которым работает OpenVPN, не имеют права записи в каталог, содержащий журналы. По умолчанию ACL
разрешения:
default:user::rwx
default:user:nobody:rw-
default:group::rwx
default:group:nogroup:rw-
default:mask::rwx
default:other::r-x
применяются к вновь созданным файлам, а не к каталогу. Давать nobody
запись доступа запустить:
setfacl -m u:nobody:rwx /etc/openvpn/apps/vpn-self-service/storage/logs
Однако лучшим решением, вероятно, будет запуск OpenVPN как vpnlog
группа, поскольку nobody
и nogroup
не должно иметь прав на запись.