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 설정이 필요하지 않습니다.
이러한 방식으로 웹 서버 사용자는 루트 액세스가 필요한 스크립트가 수행하는 작업으로부터 완전히 격리됩니다.