Permissions

Openvpn無法寫入文件,但能夠追加

  • March 25, 2020

我對 OpenVPN 有一個奇怪的問題:

在我的配置中,OpenVPN 基於 laravel 控制台應用程序對使用者進行身份驗證。Laravel 站點使用 Nginx 作為 www-data 執行。storage/logs 目錄具有以下所有權和權限:

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) 嘗試寫入 storage/log 中的日誌文件。

但是如果日誌文件不存在,它會失敗並拒絕權限。但是,如果日誌文件已經存在,那麼附加它就好了。

您能幫我調試並了解權限問題是什麼嗎!

這是它嘗試寫入的文件:

-rw-rw-r--+ 1 www-data vpnlog 223 Mar 25 15:52 vpn.log

執行 OpenVPN 的使用者nobody和組nogroup對包含日誌的目錄沒有寫入權限。預設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不應該有任何寫入權限。

引用自:https://serverfault.com/questions/1008278