openvpn 스크립트 내에서 루트 명령을 실행할 수 없습니다

openvpn 스크립트 내에서 루트 명령을 실행할 수 없습니다

클라이언트가 연결될 때 스크립트를 실행하기 위해 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아마도 --useror --group지시어를 사용하지 않을 것입니다.

PATH실행하려는 명령에 필요한 디렉터리가 포함되어 있는지 확인하는 것도 중요합니다 .

관련 정보