PHP exec ()의 sudo
PHPPHP exec ()의 sudo
그 협상이 뭔지 모르겠다.
그래서 나는 applescript를 실행하고 싶다 : sudo osascript myscript.scpt
이것은 터미널에서 잘 작동하지만, PHP의 exec ()를 통해 실행하면 안됩니다. 아무 반응이 없습니다. 콘솔에
no tty present and no askpass program specified ; TTY=unknown ; …
나는 내 연구를했고 sudo 명령의 암호가 누락 된 것 같습니다. 이 문제를 해결할 수있는 몇 가지 방법을 시도했습니다.
그 중 어느 것도 작동하지 않는 것 같아서 결과적으로 날 크라지 운전!
그래서 기본적으로 간단한 터미널 명령을 실행하도록 PHP를 가져 오는 명확한 방법이 있습니까?
편집 : 명확히하기 위해, myscript.scpt는 화면의 UI를 변경하는 간단한 appleScript입니다 (큰 프로젝트의 경우). 이론적으로 간단히 osascript myscript.scpt로 충분해야하지만, sudo는 시스템에서 응답을 불러오는 데 필요한 몇 가지 이유가 있습니다. 만약 sudo가 어떻게 든 제거 될 수 있다면, 나는이 사용 권한 문제를 안고 있다고 생각하지 않는다.
해결법
-
==============================
1.누군가 아직도 이것을 요구한다면. ~ ./ sudopass / sudopass.secret과 같은 일반 텍스트 파일을 root 암호와 함께 쓸 수 있습니다. 루트 암호가 '12345'라고 가정 해 봅시다. 콘텐츠로 '12345'만 사용하여 ~ /. sudopass / sudopass.secret을 만듭니다.
누군가 아직도 이것을 요구한다면. ~ ./ sudopass / sudopass.secret과 같은 일반 텍스트 파일을 root 암호와 함께 쓸 수 있습니다. 루트 암호가 '12345'라고 가정 해 봅시다. 콘텐츠로 '12345'만 사용하여 ~ /. sudopass / sudopass.secret을 만듭니다.
12345
그리고 나서 다음을 수행합니다.
exec('sudo -u root -S {{ your command }} < ~/.sudopass/sudopass.secret');
통제 된 환경에서만이 기능을 사용해야합니다.
-
==============================
2.암호가없는 sudo를 설정해야하는 것 같습니다. 시험:
암호가없는 sudo를 설정해야하는 것 같습니다. 시험:
%admin ALL=(ALL) NOPASSWD: ALL
또한 다음 행을 주석으로 처리하십시오 (visudo를 통해 / etc / sudoers에 있음).
Defaults requiretty
-
==============================
3.나는 당신이 다음과 같이 visudo와 함께 사용자와 명령에 대한 특정 액세스 권한을 가질 수 있다고 생각합니다.
나는 당신이 다음과 같이 visudo와 함께 사용자와 명령에 대한 특정 액세스 권한을 가질 수 있다고 생각합니다.
nobody ALL = NOPASSWD: /path/to/osascript myscript.scpt
와 함께 PHP :
@exec("sudo /path/to/osascript myscript.scpt ");
아무도 사용자가 아파치를 실행하고 있다고 가정합니다.
-
==============================
4.php : bash 콘솔이 생성되고, 첫 번째 스크립트가 실행됩니다.이 스크립트는 sudo를 두 번째 스크립트로 호출합니다 (아래 참조).
php : bash 콘솔이 생성되고, 첫 번째 스크립트가 실행됩니다.이 스크립트는 sudo를 두 번째 스크립트로 호출합니다 (아래 참조).
$dev = $_GET['device']; $cmd = '/bin/bash /home/www/start.bash '.$dev; echo $cmd; shell_exec($cmd);
oc, 루트 권한없이 루트 레벨에서 스크립트를 실행하여 /etc/sudoers.d/mount 파일을 작성하고 수정하십시오.
www-data ALL=(ALL:ALL) NOPASSWD:/home/www/myMount.bash
chmod를 잊지 마라.
sudo chmod 0440 /etc/sudoers.d/mount
-
==============================
5.sudo visudo 명령을 실행하고 % sudo ALL = (ALL : ALL)을 % sudo ALL = (ALL : ALL)로 설정합니다. NOPASSWD : 모두 작동합니다.
sudo visudo 명령을 실행하고 % sudo ALL = (ALL : ALL)을 % sudo ALL = (ALL : ALL)로 설정합니다. NOPASSWD : 모두 작동합니다.
-
==============================
6.필자는 최근 PHP가 실제 Bash 쉘을 얻고 상호 작용할 수있는 프로젝트를 발표했습니다. Get it here : https://github.com/merlinthemagic/MTS 셸에는 pty (pseudo 터미널 장치, 즉 ssh 세션과 같음)가 있으며 필요에 따라 셸을 루트로 가져올 수 있습니다. 스크립트를 실행하기 위해 루트가 필요한 것은 확실하지 않지만 sudo를 언급 할 때 그럴 가능성이 큽니다.
필자는 최근 PHP가 실제 Bash 쉘을 얻고 상호 작용할 수있는 프로젝트를 발표했습니다. Get it here : https://github.com/merlinthemagic/MTS 셸에는 pty (pseudo 터미널 장치, 즉 ssh 세션과 같음)가 있으며 필요에 따라 셸을 루트로 가져올 수 있습니다. 스크립트를 실행하기 위해 루트가 필요한 것은 확실하지 않지만 sudo를 언급 할 때 그럴 가능성이 큽니다.
다운로드 한 후에는 다음 코드를 사용하면됩니다.
$shell = \MTS\Factories::getDevices()->getLocalHost()->getShell('bash', true); $return1 = $shell->exeCmd('/path/to/osascript myscript.scpt');
-
==============================
7.sudo를 사용하여 PHP 스크립트를 실행하고 스크립트 내에서 생략하는 것은 어떻습니까? 그것은 자식 프로세스에 대한 권한을 처리 할 수도 있습니다.
sudo를 사용하여 PHP 스크립트를 실행하고 스크립트 내에서 생략하는 것은 어떻습니까? 그것은 자식 프로세스에 대한 권한을 처리 할 수도 있습니다.
from https://stackoverflow.com/questions/3173201/sudo-in-php-exec by cc-by-sa and MIT license
'PHP' 카테고리의 다른 글
foreach 루프에서 첫 번째와 마지막 반복을 확인하는 방법은 무엇입니까? (0) | 2018.09.12 |
---|---|
PHP에서 PDF 문서를 미리보기 이미지로 변환하려면 어떻게해야합니까? [닫은] (0) | 2018.09.12 |
MySQL에 쓸 때 TextArea에서 줄 바꿈을 유지합니다. (0) | 2018.09.12 |
LIMIT이 적용되기 전에 결과를 얻는 가장 좋은 방법 (0) | 2018.09.12 |
가장 좋은 방법은 mysql 데이터베이스에 중복 항목을 피하기 위해 (0) | 2018.09.12 |