www-data 사용자로부터 루트 스크립트 실행

www-data 사용자로부터 루트 스크립트 실행

내 Apache 서버에서 PHP를 통해 루트 권한이 필요한 명령을 실행하는 데 문제가 있습니다.

  1. 사용자 비밀번호가 필요하지 않도록 sudoers에 명령을 추가했습니다.

비전:

#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults env_reset
Defaults mail_badpass
Defaults secure_path = "/ usr / local / sbin: / usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin"

# Host alias specification

# User alias specification
# Cmnd alias specification

# User privilege specification
root ALL = (ALL: ALL) ALL

# Allow members of group sudo to execute any command
% sudo ALL = (ALL: ALL) ALL

# See sudoers (5) for more information on "#include" directives:

#includedir /etc/sudoers.d

www-data ALL = NOPASSWD: / sbin / iw
  1. PHP 스크립트를 실행하려고 시도하고 반환된 오류도 확인합니다.
<? php
echo '<pre>';
$ last_line = system ('sudo / sbin / iw wlan0 scan 2> & 1', $ retval);
// Printing additional info
echo '
</pre>
<hr /> Last line of the output: '. $ last_line. '
<hr /> Return value: '. $ retval;
?>

PHP 스크립트가 반환됩니다.

sh: 1: sudo: not found

Last line of the output: sh: 1: sudo: not found Return value: 127

sudo가 설치되어 있고 다른 사용자가 실행할 때 제대로 작동합니다.

whoami는 "www-data"를 반환하므로 사용자는 괜찮습니다.

www-데이터는 다음에 속합니다.

sudo group

groups www-data
www-data: www-data sudo

답변1

첫째, 이 줄은 완전히 잘못되었습니다.

www-data ALL = NOPASSWD: / sbin / iw

sudoers 파일을 편집 한 적이 있다면 visudo다음과 유사한 경고가 표시됩니다(줄 번호의 경우 XXX).

>>> /etc/sudoers: syntax error near line XXX <<<

구문 오류를 알려줍니다. 실제로 다음과 같아야 합니다.

www-data ALL = NOPASSWD: /sbin/iw

그러나 구문을 제외하면 웹 애플리케이션에 완전한 무제한 액세스 권한을 부여하는 iw것은 좋은 생각이 아닌 것 같습니다. 일반적인 접근 방식은 호출자가 기대하는 한두 가지 작업만 수행하고 그 이상은 수행하지 않는 도우미 스크립트를 작성하는 것입니다. 예를 들어 스캔에만 관심이 있는 경우 스크립트가 스캔 이외의 작업을 수행하도록 허용하지 마십시오. 대신 계정 www-data에 이 스크립트에 대한 루트 권한이 부여되므로 iw누군가가 웹 애플리케이션에 침입하더라도 웹 서버가 할 수 있는 모든 작업만 수행할 수 있습니다.

둘째, 이 줄도 잘못되었습니다.

last_line = system ('sudo / sbin / iw wlan0 scan 2> & 1', $ retval);

왜 이것이 의미 있는 명령이라고 생각하는지 잘 모르겠습니다. / sbin / iw이 명령을 실행하면 오류가 발생합니다.

sudo / sbin / iw wlan0 scan 2> & 1
-bash: syntax error near unexpected token `&'

올바른 구문을 사용하세요.

sudo /sbin/iw wlan0 scan 2>&1

셋째, 실행 중인 호스트를 지정하지 않았지만 계정 www-data에 액세스 권한이 없을 수 있습니다 /usr/bin/sudo. 추가 정보가 없으면 이 문제를 진단하는 것이 어려울 수 있습니다.

관련 정보