Permissions
Openvpn無法寫入文件,但能夠追加
我對 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
不應該有任何寫入權限。