www-data의 루트 권한에 따르면

www-data의 루트 권한에 따르면

dhcpmanip.pl다음 줄을 포함하는 Perl 스크립트가 있습니다 .

system "hostapd /etc/hostapd-1.0/hostapd/hostapd.conf"`

이것은 시작 명령 hostapd이며 다음 오류가 발생합니다.

Insecure `$ENV{PATH}` while running setuid at `/var/www/cgi-bin/dhcpmanip.pl` line 46

온라인으로 검색한 후 www-data 사용자(apache 사용자)에게 루트 권한을 부여해야 한다는 것을 깨달았고 /etc/sudoers다음 줄을 삽입하여 파일을 수정하려고 했습니다.

www-data ALL=NOPASSWD: /var/www/cgi-bin/dhcpmanip.pl

하지만 여전히 작동하지 않습니다. 이 문제를 해결하는 방법을 아는 사람이 있습니까?

답변1

Perl이 실행 중이기 때문에 이 메시지가 표시됩니다.오염 패턴. 명시적으로 설정하거나(좋음), 수행 중인 작업이 위험하기 때문에 Perl이 이를 활성화합니다(나쁘지만 Perl은 여전히 ​​좋은 작업을 수행합니다).

PATH어느 쪽이든 Perl에서는 외부 명령을 실행하기 전에 코드를 정리해야 합니다.

외부 명령을 실행하기 전에 $ENV{PATH}스크립트 어딘가에 명시적으로 설정 해야 합니다..

좋은 연습을 위해서는 명시적으로 사용해야 합니다.전체 경로실행 중인 모든 외부 명령.

답변2

Hostapd가 실제로 배치된 위치에 따라 $ENV{PATH}를 설정해야 합니다. 예를 들어 /usr/bin컬렉션 에 있으면 $ENV{PATH} = "/usr/bin"작동합니다.

답변3

내가 이해한 바에 따르면, 귀하는 컴퓨터의 특정 웹 페이지에 액세스하여 컴퓨터가 dhcp 설정을 조작하는 스크립트를 실행할 수 있기를 원합니다. SaveTheRbtz가 말했듯이 이것은아니요안전한 방법.

웹 서버를 실행할 때 웹 서버에서 실행하는 스크립트가 서버에서 작업을 수행하는 데 매우 제한된 액세스 권한을 갖고 있는지 확인해야 합니다. 그렇지 않으면 스크립트의 작은 실수로 인해 일부 스크립트 어린이가 서버를 해킹하여 남용할 수 있습니다.

따라서 루트 액세스가 필요한 스크립트가 있는 경우 스크립트는 다음을 수행해야 합니다.아니요웹 서버 사용자가 실행합니다. 더 복잡한 설정을 사용하겠습니다.

  • 단순히 항목을 파일에 쓰는 CGI 스크립트를 만듭니다. 이 작업에는 최소한의 권한이 필요하며 올바르게 완료되면(즉, 이전 항목을 추가하는 대신 덮어쓰는 방식으로) 누군가가 여러 번 클릭해도 디스크가 가득 차는 위험도 없습니다.
  • 크론 작업을 생성하여 파일이 변경되었는지 주기적으로 확인하세요. 그렇다면 스크립트를 실행하십시오. cron 작업은 루트에서 소유하고 실행할 수 있으므로 추가 sudo 설정이 필요하지 않습니다.

이러한 방식으로 웹 서버 사용자는 루트 액세스가 필요한 스크립트가 수행하는 작업으로부터 완전히 격리됩니다.

관련 정보