클라이언트가 연결될 때 스크립트를 실행하기 위해 openvpn 옵션 client-connect를 사용하고 있습니다.
간단한 명령을 사용하면 스크립트가 제대로 작동하지만 루트 권한이 필요한 명령을 추가하면 작동하지 않고 클라이언트가 VPN 서버에 연결할 수 없습니다.
예를 들어 다음은 제가 실행하려고 하는 몇 가지 명령입니다.
bgpctl reload
그리고
route add -net $ifconfig_pool_remote_ip/30 -interface $dev -static
.
명령은 테스트되었으며 올바르게 작동합니다. 저는 freeBSD를 사용하고 있습니다.
문제를 해결하는 방법을 아시나요?
감사합니다!
업데이트
실제로 권한 문제는 없었습니다. 스크립트가 명령을 실행할 수 없고 bgpctl
명령 route
을 인식할 수도 없습니다.
명령에 대한 전체 경로를 지정하여 문제를 해결할 수 있습니다.
/usr/local/sbin/bgpctl reload
/sbin/route add -net $ifconfig_pool_remote_ip/30 -interface $dev -static
이제 작동합니다.
고마워요 로아이마.
답변1
스크립트 는 매개변수 --client-connect
로 지정된 권한이 없는 OpenVPN 사용자로 실행됩니다 --user
.
파일 상단에 다음 줄을 추가 하고 연결 성공 후 --client-connect
기록된 출력을 검토하여 이를 확인할 수 있습니다./tmp/ov.log
#!/bin/bash
exec >>/tmp/ov.log 2>&1
chmod 666 /tmp/ov.log 2>/dev/null
echo
date
id
echo "PATH=$PATH"
# Payload
bgpctl reload
route add -net "$ifconfig_pool_remote_ip/30" -interface "$dev" -static
# All done
true
내 시스템에서 --user nobody
및 --group nogroup
지시어를 사용하면 다음과 같은 결과가 출력됩니다.
Tue Jun 9 15:00:45 BST 2015
uid=65534(nobody) gid=65534(nogroup) groups=65534(nogroup)
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
...
root
이를 사용자 및 그룹 으로 가져오므로 wheel
아마도 --user
or --group
지시어를 사용하지 않을 것입니다.
PATH
실행하려는 명령에 필요한 디렉터리가 포함되어 있는지 확인하는 것도 중요합니다 .