루트가 아닌 계정에서 루트 작업을 수행하려면 어떻게합니까?


15

PHP 스크립트에서 서비스를 다시 시작할 수 있기를 원합니다. www-user 계정으로 실행됩니다.

이러한 작업을 수행하기 위해 선호되는 방법은 무엇입니까?

CRON이 읽은 que'd 명령으로 파일을 만들 수는 있지만 해결책은 가렵습니다.

내가 생각하고있는 것은 루트에서 실행되는 작은 서비스이며 사전 정의 된 "방법"을 허용하므로 임의의 루트 작업을 실행할 수 없습니다.

이것에 대한 도구가 있습니까?


@MadHatter, 모나리자가 인사를 보냅니다. ;-)
user65297

답변:


27

바퀴를 재발 명 할 수는 있지만 솔직히 암호가없는 sudo를 사용합니다. 예를 들어, 모니터링 시스템은 하드웨어 RAID를 확인하는 명령을 실행할 수 있어야합니다. 그래서 대신 내가에 있고,이 루트 권한이 필요하지만 루트로 전체 모니터링 시스템을 실행하지 않으 sudoers라는 한 줄

nagios  ALL=(root) NOPASSWD: /usr/lib/nagios/plugins/check_md_raid

그런 다음 sudo /usr/lib/nagios/plugins/check_md_raidRAID를 확인해야 할 때 모니터링 사용자로 명령을 실행하십시오 .

당신은 말했다 sudoers 라인을 가질 수 있습니다

www-user    ALL=(root) NOPASSWD: /etc/rc.d/init.d/myservice

그런 다음 PHP가 실행되도록하십시오 sudo /etc/rc.d/init.d/myservice restart.


2
이것이 IMO를가는 길입니다. 이 작업을 비슷한 작업에 사용했습니다. 지금은 3 년 이상 생산되었습니다. 애플리케이션 로직으로 올바르게 실행하는 PHP 코드를 보호하는 한 아무 것도 실패하지 않았으며 보안 위험이 거의 존재하지 않습니다.
Andrew Ensley

1
고마워, sudoers는 나에게 새롭고 목표에 부딪쳤다. @Andrew, 추가 정보 감사합니다.
user65297

1
user65927, 이것이 당신에게 뉴스가 아니라면 용서하십시오. 그러나 지역 예절은 질문에 대한 만족스러운 답변이있을 때 옆에있는 틱 개요를 클릭하여 수락한다는 것입니다.
MadHatter

1
sudoers 파일에서 "Defaults requiretty"행을 주석 처리해야 할 수도 있습니다. 이 단계는 몇 번 받았습니다. (예 : "Defaults requiretty"를 "#Defaults requiretty"로 변경)
steve.lippert

6

sudo를 살펴보십시오 : 다른 사용자 (귀하의 경우 루트)로 수행 할 수있는 작업을 지정할 수 있습니다.

예를 들어에 추가 할 수 있습니다 /etc/sudoers(파일을 직접 사용하지 마십시오 visudo)

www-user-account ALL= NOPASSWD: /usr/bin/mypredefinedaction

man sudo파일의 세부 사항 및 구문은 참조하십시오


2
/etc/sudoers파일 을 편집 할 때 매우주의 하십시오. 그것이 문법적으로 부정확 한 경우에, 그것을 다시 바꾸는 것은 당신이 sudo그것에 다시 들어가야 하는 악몽 b / c 이지만, 당신은 단지 sudo를 지워 버릴 수는 없습니다. 복구 CD / DVD를 사용해야하고 파티션을 수동으로 마운트해야합니다.
puk

1
@puk 실제로 shudders를 편집하려면 루트 액세스 권한이 필요하며 파일이 손상된 경우 루트로 로그인 한 다음 백업 사본에서 복원하거나 수동으로 수정할 수 있습니다. visudo는 파일을 작성하기 전에 파일에 대한 상태 점검도 수행합니다.
Matteo

무엇 shudders입니까? 사실 visudo는 정신 검사를 수행하지만 손상이 완료된 후에는 도움이되지 않습니다. : P
puk
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.