2014-02-06 4 views
4

다른 사용자가 소유 한 파일의 소유자를 변경하기 위해 perl 스크립트를 만들었습니다. 스크립트가 완료되었습니다. 내 관리자는/sbin 디렉토리에 저장하고 chmod u + s name_of_script를 사용하여 uid를 설정합니다. 하지만이 스크립트를 실행하면 chown 조작이 허용되지 않는다는 오류가 발생합니다. 나는 C 프로그램을 만들었고 같은 단계를 따라 작동합니다. 그래서 내 질문에 setuid Perl에 대한 노력하고있다면 C 코드는 나에게 어떤 오류를주지 않았기 때문에 나는 그 오류를해서는 안됩니다. 그래서 내가 perl 스크립트를 setuid 수 또는 나는 C 코드와 함께 가야한다.펄 스크립트를 설정할 수 있습니까?

관리자에게 매번 소유자를 변경하도록 요청하지 마십시오. 실제로 서버에서 나는 사용자 이름 준비가 있고 그것에있는 joomla 위치를 접대하고있다. 지금 내가 어떤 플러그인을 설치하면 해당 플러그인과 관련된 파일은 www- 데이터에 의해 소유됩니다. 그래서 나는 매번 관리자에게 가고 싶지 않습니다. 또는 내 문제와 관련하여 다른 솔루션을 제공 할 수도 있습니다.

감사합니다.

답변

5

아니요, setuid (별칭 chmod +s)을 스크립트에 사용할 수 없습니다. 스크립트의 인터프리터는 실제로 setuid 일 필요가있는 것이지만, 그렇게하는 것은 정말 나쁜 생각입니다. 정말로 나쁘다.

Perl로 작성된 것이 반드시 setuid이어야하는 경우 일반적으로해야 할 일은 작은 C 래퍼를 setuid으로 만들고 시작한 후 Perl 스크립트를 실행하는 것입니다. 이것은 작고 제한된 setuid 스크립트를 사용하면서 두 세계의 장점을 제공하지만 작업을 수행하는 데 사용할 수있는 스크립팅 언어는 여전히 가지고 있습니다.

6

많은 유닉스 시스템 (아마도 가장 현대적인 시스템)은 너무 많은 보안 구멍을 열어 통역사 스크립트의 suid 비트를 무시합니다.

그러나 perl < 5.12.0을 사용하는 경우 setuid set을 사용하여 perl 스크립트를 실행할 수 있으며 루트로 실행됩니다. 작동 원리는 정상적인 perl 인터프리터가 실행될 때 실행하려고하는 파일이 setuid 비트 세트를 가지고 있는지 감지 한 다음 suidperl이라는 프로그램을 실행합니다. Suidperl은 사용자의 권한을 높이고 super-secure 모드로 perl 인터프리터를 시작합니다. suidperl 자체는 setuid root로 실행 중입니다.

그 결과 중 하나는 오염 모드가 자동으로 켜지는 것입니다. 다른 추가 점검도 수행됩니다.

Insecure $ENV{PATH} while running setuid at ./foobar.pl line 3. 

perlsec과 같은 메시지가 이러한 스크립트를 보호하는 데 유용한 정보를 제공합니다.

기본적으로 suidperl은 기본적으로 설치되지 않습니다. 별도의 패키지를 통해 설치해야 할 수도 있습니다. 가 설치되어 있지 않은 경우이 메시지가 :

Can't do setuid (cannot exec sperl) 

는이 모든 것을 말해 두 겠는데 - 당신은 상승 된 권한으로 작업을 실행 sudo을 개시 훨씬 더 좋을 것이다. sudoers 파일을 통해 실행이 허용되는 것을 정확히 지정할 수 있으므로 훨씬 더 안전합니다.

perl 5.12.0에서, suidperl을 떨어 뜨렸다. 결과적으로 setuid가 설정된 perl> = 5.12.0에서 perl 스크립트를 실행하려면 고유 한 C 랩퍼를 작성해야합니다. 다시 한 번 나는 sudo를 더 나은 대안으로 추천한다.

+0

suidperl 설치 방법은 무엇입니까? apt-get install perl-suid가 debian wheezy에서 작동하지 않습니다. apt-cache 검색 perl은 suid와 관련된 어떤 것도 표시하지 않습니다. 실행시 내 스크립트가 chown not allowed 오류를 표시합니다. 나는 펄 5.14를 사용하고있다.2 –

+0

@SumitRathore suidperl이 5.12에서 perl에서 제거 된 것 같습니다 (http://perldoc.perl.org/perl5120delta.html). 그것은 유감스럽게도 유스 케이스에 대한. 이 스레드를 읽으면 http://www.nntp.perl.org/group/perl.perl5.porters/2008/12/msg142839.html 자신의 C 래퍼를 작성하거나 sudo를 사용해야 할 것 같습니다. 그에 따라 대답을 업데이트 할 것입니다. – harmic