
다음을 포함하는 file.php라는 PHP 스크립트가 있습니다.
<?php
exec("ip netns exec vpn file2.php");
?>
루트로 명령줄을 통해 file.php를 실행하면 작동합니다. 그러나 Apache를 통해 실행하면 www-data에는 ip netns exec를 사용할 수 있는 권한이 없지만 www-data는 ip netns list를 사용할 수 있습니다.
a) 루트가 아닌 사용자가 ip netns exec를 실행하도록 하거나 www-data에 ip net exec 항목을 실행할 수 있는 권한을 부여하려면 어떻게 해야 합니까?
답변1
다음과 같은 것을 시도해보세요
# ip netns exec vpn sudo -u www-data apache
루트로 .
이런 식으로 아파치는 루트가 아닌 사용자로 netns를 사용하여 실행됩니다. 동시에 두 네임스페이스가 필요한 경우 각각 하나의 네임스페이스에서 두 개의 인스턴스를 시작합니다. 네임스페이스를 즉시 변경하는 것이 작동하지 않는 것 같습니다.
설명:
디렉토리는 /var/run/netns
모든 네트워크 네임스페이스를 저장합니다. 새 네임스페이스 "abc"를 추가하면 이 디렉토리에 빈 파일 "abc"가 생성됩니다. "abc" 네임스페이스에서 "xyz" 프로그램을 실행할 때마다 ip(1)
에 대한 파일 설명자를 열고 보관한 /var/run/netns/abc
다음 unshare(2)
및 를 호출합니다 setns(2)
.
그래서 여기에 두 가지 장벽이 있습니다. 하나는 의 파일 시스템 권한이고 /var/run/netns/*
, 다른 하나는 권한 있는 syscall에 대한 기능입니다.