www-data로 실행되도록 Linux 우분투에서 PHP CLI를 구성하는 방법은 무엇입니까?


12

우분투에 symfony2 응용 프로그램이 있습니다. Symfony에는 유용한 콘솔 명령이 많이 있습니다 (예 : php app/console cache:clear또는 php app/console assets:install web).

문제는 root사용자로 파일을 실행 하면 새로 생성 된 파일에 root:root사용자 / 그룹이 있고 웹 사이트에 액세스하면 오류가 발생합니다 (아파치 가이 파일을 읽거나 수정할 수 없기 때문에- www-data:www-data) 해야한다는 것 입니다.

실행 chown www-data:www-data하면 문제가 해결되지만 캐시를 지울 때마다 실행하는 것은 해결책이 아닙니다.

항상 www-data 사용자 / 그룹으로 실행되도록 PHP CLI를 구성하려면 어떻게해야합니까?

또는

다른 사용자로 명령을 실행하려면 어떻게해야합니까 (루트이고 www-data로 실행)?

답변:


23

다른 사용자로 한 번 명령을 실행하십시오.

sudo -u www-data php script.php

당신이 경우에 작동합니다 root.

항상 php as를 실행하는 www-data데는 몇 가지 가능성이 있습니다. 간단한 래퍼 셸 스크립트를 만들 수 있습니다. 경우 /usr/bin/php만에 소프트 링크입니다 /usr/bin/php5또는 유사한, 그게 간단합니다. 소프트 링크 (파일 php5아님)를 다음과 같은 스크립트로 바꾸십시오 .

#!/bin/sh

sudo -u www-data php5 $*

return $?

그래도 테스트되지 않았습니다. 또한 php5사용자 가 권한이 없거나 권한 www-data이없는 경우에도 항상 user 로 실행하려고합니다 root. 그리고 그것은 또한 당신이 정말로 원하는 것이 아닐 수도 있습니다. PHP를 실행하려고 할 때 설치된 일부 서비스에 문제가 발생할 수 있습니다.

루트에만 적용하는 (아마도 더 나은) 솔루션은 소프트 링크를 그대로두고 대신 /usr/bin/php스크립트를 배치하는 것일 수 있습니다 /root/bin. 그런 다음을 통해 PATH에 해당 폴더를 추가 .bashrc, .profile또는 유사한. 당신이 가지고 있다면 /etc/skel/.profile, 그것이 어떻게 수행되는지 지적 할 수 있습니다.

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

이 당신에 있으면 .bashrc, .profile또는 이와 유사한, 당신이 열 때마다 새로운 쉘은 직접 (+ X)의 모든 실행 파일을 실행 할 수 있습니다 $HOME/bin( /root/bin루트).

힌트 : 래퍼 스크립트의 이름을 phpwww지정 하여 정규 또는 sudo'ed PHP 를 명시 적으로 지정 php script.php하거나 phpwww script.php결정할 수 있습니다.

또 다른 해결책은 간단한 별칭입니다. 이것을 당신 .bashrc.profile또는 비슷한 곳에 놓으십시오 .

alias phpwww='sudo -u www-data php'

재미 있고, 반은 들었고 나는 내 자신의 질문을 다시 우연히 발견했다.
loostro

별명 방법은 너무 피의 의미가 있고, 그것은 나의 정확한 문제를 해결했습니다
RedactedProfile

1

## linux (IRC Freenode.net)에서 mwargh 님이 답변 함


다른 사용자로 명령을 실행하려면 다음을 사용하여 해당 사용자로 전환하십시오.

su www-data

나는 실행되도록 PHP를 구성하는 데 여전히 관심이 있습니다.

root@mycomp php (php script creating a file)

루트 사용자 로서

www-data : www-data 사용자 / 그룹 으로 파일을 생성합니다

(이 방법으로 명령을 실행하기 위해 루트에서 www-data로 전환 할 필요가 없습니다)


1

www-data가 / usr / bin / php를 소유하고 suid 권한을 설정하여 파일 소유자가 명령을 강제로 실행하려고합니다. 당신은 이것을 다음과 같이 할 것입니다 :

chmod u+s /usr/bin/php

8 진법을 좋아합니다.

chmod 4755 /usr/bin/php

www-data 계정의 요점은 가능한 한 적게 소유해야하기 때문에 www-data를 무엇이든 소유주로 만들 때마다 불편하게 만들어야한다고 말해야합니다.


이것이 내가 리
하의

1

php-fpm (FastCGI Process Manager)을 가지고 있다면
(atleast for centos)에있는 구성 파일에서 /etc/php-fpm.d/www.conf
설정할 수 있습니다 : 39 행에서 사용자를 설정할 수 있고 49는 그룹을 설정합니다


에는 적용 php-cli되지 않습니까?
riha

1

스크립트 파일을 작성하십시오.

touch /usr/bin/phpuid
chmod +x /usr/bin/phpuid

내용 추가 :

#!/bin/bash

UIDX="#"`stat -c '%u' $1`
sudo -u $UIDX php5 $*

루트에서 스크립트를 실행하십시오.

phpuid /path/to/script.php

또는 스크립트에서 통역사를 사용하십시오

#!/usr/bin/phpuid
<?php
phpinfo();

참고 : debian 7에서 테스트 한 결과 sudo를 설치해야 할 수도 있습니다.

apt-get install sudo

script.php로 작성된 모든 파일은 해당 스크립트와 동일한 uid를 갖습니다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.