아파치 또는 명령 줄에서 호출되는 Perl 스크립트가 있습니다.cgi-bin으로 사용할 때 setuid()를 사용하여 Perl 스크립트를 성공적으로 실행하는 방법은 무엇입니까?
테스트 목적으로 나는 펄 스크립트가 작동하게하려는 사용자 이름을 전달하고 POSIX::setuid
을 사용하여 uid
을 설정합니다. 내가 명령 줄에서 스크립트를 실행하는 경우
, 다음 uid
가 제대로 설정됩니다
use CGI::Pretty qw/:standard/;
use POSIX qw(setuid getuid);
...
my ($pwName, $pwCode, $pwUid, $pwGid, $pwQuota, $pwComment,
$pwGcos, $pwHome, $pwLogprog) = getpwnam($username);
if ((defined $pwUid) && (getuid() == $pwUid)) {
setuid($pwUid);
print header;
print Dumper $<;
}
else {
print header(-status => 401);
print "Could not setuid to correct uid (currently:)".getuid()."\n";
}
명령 줄 출력 대신 테스트 계정의 uid
의의 $username
지정된 올바른 uid
보여줍니다 스크립트를 실행하기 시작했습니다.
아파치를 통해 스크립트를 호출하면 uid
은 apache
사용자의 ID로 설정되고 변경되지 않습니다.
, 설명서를 읽고 때문에, 여기 suExec
를 사용할 수 있다고 생각하지 않습니다
나는 모든
$username
에 대한http://www.example.com/~username
에이 스크립트의 사본을 넣을 수 없습니다. 스크립트는 한 위치에서 실행해야하며 스크립트 내에서uid
을 지정해야합니다.런타임시 지정된 사용자 이름으로 스크립트를 실행해야하며 Apache 구성 파일의 가상 호스트 지시문에 한 번 지정된 단일 사용자 이름이 아니어야합니다. 이 구성 파일을 변경하고 새 사용자가이 스크립트를 실행할 때마다 Apache를 다시 시작하는 것은 현실적이지 않습니다.
가 어떻게 Perl 스크립트가 CGI - bin에 제대로 uid
을 변경할로 실행합니까, 때 setuid()
을 사용하고 계십니까?
명령 줄 사용자가 UID를 변경할 수있는 권리가있을 수 있습니다. 웹 서버 사용자는 아마도 그렇지 않습니까? – Konerak