[apache서버/php] 실행되는 user group알아내기

프로그래밍/서버2020. 1. 29. 10:14

아파티 서버에서 http request 등으로... php가 실행되면 linux의.. user group others 접근 권한에 따라서 처리가 됩니다.

 

move_uploaded_file(20200123511888_20200123230211677.jpg) failed to open stream: Permission denied in /opt/bitnami/apache2/htdocs/upload_image.php on line 31

 

권한에 문제가 있으면.. 위와 같은 에러가 발생합니다. ㅜㅜ

 

위 에러가 발생하는 이유는.. http request를 받으면 user id가 daemon으로 동작하는데

daemon인 경우 /opt/bitnami/apache2/htdocs 폴더에 쓰기 권한이 없기 때문입니다.

그래서 폴더 내부로 파일 이동이 안됐던 것이죠.

chmod 775 htdocs로 group에 쓰기 권한을 추가하니.. 접근 권한 에러가 사라지네요.

 

 

 

그렇다면.. 과연 http request 등으로 php 코드가 실행되면.. 그 실행되는 user와 group이 어떻게 결정될까요?

php가 어느 서버에서 구동되느냐에 따라.. user와 group는 달라집니다.

 

https://stackoverflow.com/questions/7771586/how-to-check-what-user-php-is-running-as

 

위의 스택오버플로우에 이에 대한 답변이 조금 있습니다.

 

$username = posix_getpwuid(posix_geteuid())['name'];
echo 'username ='.$username;

php에 위의 코드를 추가하고 http request 등으로 실행시키면 user에 대한 정보를 얻을 수 있습니다.

 

file_put_contents("testFile", "test");
$user = fileowner("testFile");
unlink("testFile");

또한 위의 방법도 참신한 것 같습니다.

 

그러다가 궁금해진 것이.. 이런 user와 group은 어떻게 정해지는 것인가 였습니다.

 

/etc/apache2/apache2.conf

User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}

 

/etc/apache2/envvars 
export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data

 

인터넷에서 찾아보니.. 뭐 위와 같은식으로 정의된다고 하더라구요.

 

그런데 aws lightsail에서 만든 인스턴스에는 저런 경로가 존재하지 않았습니다.

대신 /opt/bitnami/apache2/conf 경로에 httpd.conf 파일이 있습니다.

 

<IfModule unixd_module>
#
# If you wish httpd to run as a different user or group, you must run
# httpd as root initially and it will switch.  
#
# User/Group: The name (or #number) of the user/group to run httpd as.
# It is usually good practice to create a dedicated user and group for
# running httpd, as with most system services.
#
User daemon
Group daemon

</IfModule>

아마 http request 등으로 php 코드가 실행되는 경우에.. 여기에서 User와 Group를 결정하는 것 같네요.

 

음.. 그런데 위에서 User daemon을 User bitnami로 변경하고 서버 재시작을 해봤습니다.

http request를 보내 테스트 해도.. 실행되는 user가 변하지 않네요.

 

httpd.conf 바꾸기 전과 바꾸기 후의.. httpd.bin의 USER를 보면 변경이 되긴 했는데요.. 뭐가 문제일까요. 흠.

 

 

참고

group 바꾸기: chgrp daemon images/

user 바꾸기: chown daemon images/

 

파일을 이동시키려면 dst 폴더에 writable 권한이 있어야 함

dst 폴더의 상위 폴더는 excutable 권한이 있어야 함(readable, writable 권한은 없어도 됨) 

 

https://stackoverflow.com/questions/49254537/move-uploaded-file-gives-failed-to-open-stream-permission-denied-even-with-7

https://stackoverflow.com/questions/8103860/move-uploaded-file-gives-failed-to-open-stream-permission-denied-error

 

 

작성자

Posted by 드리머즈

관련 글

댓글 영역