운영 체제: Debian 11
패키지: OpenVPN 2.5.1
배경:
업데이트 후 Openvpn-2.5 클라이언트가 더 이상 작동하지 않습니다.IP 라우팅루트 권한이 제거되고 시스템 장치가 권한 없는 사용자로 실행되고 나면 인터페이스를 수정하고 OpenVPN 서버가 푸시하는 경로를 구성하십시오. 다음 두 스레드의 iproute 문제에 대한 토론을 기반으로 합니다.
https://bugs.archlinux.org/task/68480
https://phabricator.vyos.net/T3805권장되는 해결 방법은 별도의 .service 파일에서 사용자 및 그룹 지시문을 제거하고
/etc/openvpn/openvpn.conf
별도의 .service 파일에 환경 기능을 추가하는 것입니다.User=tunnel
Group=tunnel
이미 기존 OpenVPN 서비스 파일([이메일 보호됨]) /lib/systemd/system
따라서 새 디렉터리를 만들고 그 안에 .service 파일을 포함합니다./lib/systemd/system/[email protected]/override.conf
# separate service file containing User and group directives along with Ambient capabilities
[Service]
User=tunnel
Group=tunnel
SecureBits=keep-caps
ExecStartPre=/usr/bin/sudo --non-interactive /usr/sbin/openvpn --rmtun --dev tun0
ExecStartPre=/usr/bin/sudo --non-interactive /usr/sbin/openvpn --mktun --dev tun0 --dev-type tun --user tunnel --group tunnel
ExecStopPost=/usr/bin/sudo --non-interactive /usr/sbin/openvpn --rmtun --dev tun0
AmbientCapabilities=CAP_IPC_LOCK CAP_NET_ADMIN CAP_NET_BIND_SERVICE CAP_NET_RAW CAP_SETGID CAP_SETUID CAP_SYS_CHROOT CAP_DAC_OVERRIDE CAP_AUDIT_WRITE
다음 명령을 실행하십시오.
sudo systemctl daemon-reload
sudo chown -R tunnel:tunnel /etc/openvpn /run/openvpn
sudo /usr/sbin/openvpn --rmtun --dev tun0
sudo /usr/sbin/openvpn --mktun --dev tun0 --dev-type tun --user tunnel --group tunnel
cd /etc/openvpn/
sudo -u tunnel openvpn /etc/openvpn/openvpn.conf
실수
User=tunnel
권한이 없는 사람이 tun0을 열고 인터페이스를 수정하여 openvpn 연결을 완료할 수 있는 환경적 능력을 갖게 될 것으로 예상됩니다 . 그러나 오류가 발생했습니다.
#Error after running sudo -u tunnel openvpn /etc/openvpn/openvpn.conf
2022-06-24 17:32:08 us=174691 TUN/TAP device tun0 opened
2022-06-24 17:32:08 us=174755 do_ifconfig, ipv4=1, ipv6=0
2022-06-24 17:32:08 us=174844 net_iface_mtu_set: mtu 1500 for tun0
2022-06-24 17:32:08 us=175005 sitnl_send: rtnl: generic error (-1): Operation not permitted
2022-06-24 17:32:08 us=175084 Linux can't set mtu (1500) on tun0
2022-06-24 17:32:08 us=175142 Exiting due to fatal error
효과적인 솔루션
user=tunnel
그러나 capsh를 사용하여 systemd 서비스에는 아무 것도 없이 권한 있는 Openvpn 실행 파일에 직접 Ambient Capability를 부여했습니다 .
sudo /sbin/capsh --keep=1 --user='tunnel' --inh='cap_ipc_lock,cap_net_admin,cap_net_bind_service,cap_net_raw,cap_setgid,cap_setuid,cap_sys_chroot,cap_dac_override,cap_audit_write' --addamb='cap_ipc_lock,cap_net_admin,cap_net_bind_service,cap_net_raw,cap_setgid,cap_setuid,cap_sys_chroot,cap_dac_override,cap_audit_write' -- -c 'openvpn /etc/openvpn/openvpn.conf'
질문:
systemd에서는 user=tunnel에 대한 환경 기능을 설정할 수 없는데 capsh에서는 설정할 수 있는 이유는 무엇입니까? systemd와 함께 작동하게 만드는 방법은 무엇입니까?
답변1
sudo -u tunnel
환경 능력이 클리어된 것 같습니다 . 이를 확인하려면 마지막 줄 앞에 다음 줄을 삽입해 보세요.
/sbin/capsh --print
sudo -u tunnel /sbin/capsh --print
sudo -u tunnel openvpn /etc/openvpn/openvpn.conf