2011-04-28 4 views
5

데이터를 파일에 쓰고 싶지만 특정 사용자에 대한 액세스 권한으로 파일 핸들을 열어야합니다. 따라서sudo (또는 다른 사용자)를 통해 데이터를 쓰는 방법 Perl 파일 핸들을 여는 방법

, 다음과 같은 성명 :

open (FH, "> $filename") or die "[email protected]\n"; 

가 특정 사용자로 파일에 쓰기를 허용합니다.

전체 스크립트를 sudo -u $username과 함께 실행하지 않고도 Perl 스크립트에서이 작업을 수행 할 수 있습니까?

+1

잘 변경하려면 유효한 UID'$>'는 (는) 루트로 실행해야하며, 스크립트는 setuid root 또는 루트 사용자로 실행되고 있습니까? – Doon

답변

2

두 가지 방법이 있습니다. 스태커, 당신은이 단서를 채우기 위해이 대답을 편집하도록 초대받습니다.

sudo으로 프로그램을 실행하십시오. 이 프로그램에서 가장 먼저해야 할 일은 필요한 파일을 열고 핸들을 유지 한 다음 바로 뒤에 drop the root privileges입니다. 더 이상의 처리는 낮은 권한으로 수행되어야합니다. 아파치 httpd는 이것을 좋아하고, 로그 파일을 root으로 열지 만, nobody 또는 그와 비슷한 것으로 계속 실행합니다.

당신이 그렇게 좋아 일반적으로 프로그램을 실행하고이 상승 할 때, kdesu/gksu 또는 이것 저것을 새로운 프로세스를 생성하고, sudosu -을 구성 사용자와 실행이없는 경우. CPAN 클라이언트 작동 방식은 모듈을 일반 사용자로 가져오고, 압축을 풀고, 빌드하고 테스트하지만, 설치할 때 sudo make install 등을 호출합니다.

+0

'sudo'를 사용하는 쓰기 가능한 파일 핸들을 열 수 있는지 모르겠습니다. 나는 그 파일 핸들을 해당 사용자에게 쓰기 가능하게 만들지 않는 한'sudo'를 피하려고합니다. 두 번째 옵션에 관해서는,'sudo'' 프로그램에 Perl 해시 참조를 전달해야합니다. 어떻게 든 간단하지는 않습니다. 이 질문이 더 도움이됩니까? –

0

daxim의 제안에 대한 대안은 특정 사용자가 스크립트를 소유하고 스크립트 사용 권한에 setuid 및/또는 setgid 비트가 포함되도록하는 것입니다.

+0

... 그러나 파일을 편집 할 때마다 대부분의 (전부는 아닐지라도) * nices가 suid/sgid 비트를 지울 것이기 때문에 이것은 장기적인 업데이트/유지 관리에있어 큰 어려움이 될 수 있습니다. –

관련 문제