Server/Linux

[Linux] PHP Laravel 설치 시 could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: The stream or file 오류

시애닝 2023. 3. 10. 19:49

▶ 설치 환경

OS : Amazon Linux 2

Web Server : apache(httpd)

User : ec2-user

* 계정을 ec2-user으로 진행하기 때문에 아래 명령어들 앞에 sudo가 붙는다

 

▶ 오류 내용 및 해결 방법

could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: The stream or file

 

위 붉은 글씨를 보면 알 수 있듯이 권한 문제로 인해 오류가 발생한 것이다.

 

1. "ls -al" 명령어를 통해 폴더의 권한 및 소유자를 확인한다.

해당 이미지는 폴더에 대해서 권한 수정이 완료된 상태이다

 

2. 라라벨 폴더에 대해서 소유자/소유그룹을 웹 서버인 apache로 변경해준다(그래야 웹에서 접근이 가능)

[라라벨 폴더가 있는 경로] $ sudo chown -R apache:apache [라라벨 폴더명]
더보기

* chown : 파일 또는 폴더의 소유자/소유그룹을 변경해주는 명령어

                사용법 : chown [옵션] [소유자]:[소유그룹] [파일명 또는 폴더명]

* -R : 폴더의 하위 파일들까지 모두 적용하는 옵션

 

 

3. 라라벨 폴더에 대해서 권한을 775로 변경해준다

[라라벨 폴더가 있는 경로] $ sudo chmod -R 775 [라라벨 폴더명]
더보기

* chmod : 파일 또는 폴더의 권한을 변경해주는 명령어

                사용법 : chmod [옵션] [권한] [파일명 또는 폴더명]

* -R : 폴더의 하위 파일들까지 모두 적용하는 옵션

* [권한] 

   아무 경로에서 ls -al을 해보면 "drwxrwxr-x" / "-rwxr-xr-x" 등등을 볼 수 있는데

   각 알파벳은 d = 디렉토리(directory) / r = 읽기(read) / w = 쓰기(write) / x = 실행(execute) 를 의미하며

   r w x는 각각 4 2 1로 계산된다

   (2의 2제곱 1제곱 0제곱)

   ex) 파일 권한 775 = -rwxrwxr-x

          7 = 4 + 2 + 1 = rwx

          5 = 4       + 1 = r-x

          3 =       2 + 1 = -wx

   그리고 첫번째 rwx는 소유주(user)에 대한 권한, 두번째는 그룹(group)에 대한 권한, 세번째는 그 외(other)에 대한 권한을 의미한다

 

   그렇기 때문에 위에서 775로 설정해주는 이유는 소유자나 그룹이 apache인 계정에 읽기/쓰기/실행 권한을 모두 주기 위해서이다.

 

 

+ 4. 사용하는 리눅스 계정이 소속된 그룹을 확인 후 apache로 변경한다

이제 웹에서는 접근이 가능하나 현재 사용하는 계정인 ec2-user에는 권한이 없으니 파일 수정이 불가능 할 것이다.

그래서 우선 해당 계정의 그룹을 확인 후 apache로 변경해준다

# 현재 로그인한 계정의 그룹 확인
~ $ groups

# 또는 아래 명령어로도 확인이 가능합니다(gid / groups 확인)
~ $ id [사용자 계정]

# 만약 위 명렁어 실행 시 나오는 리스트에서 apache를 확인할 수 없다면 
# 아래 명령어를 통해 추가해줍니다
# ex) [사용자 계정] = ec2-user
~ $ sudo usermod -g apache [사용자 계정]


/***** 참고 명령어 및 파일 *****/
# 계정 리스트 확인
~ $ cat /etc/passwd

# 그룹 리스트 확인
~ $ cat /etc/group
/*******************************/

변경 후에 다시 groups 명령어로 변경됐는지 확인한다!

(현재 내 경우엔 터미널을 나갔다가 다시 들어가니까 변경된걸로 보였다)

("su [사용자 계정]" 명령어를 입력하고 패스워드를 입력해도 적용된다고 함)

 

 

 

 

 

 

- 문의와 피드백은 언제나 환영입니다 ( •̀ .̫ •́ )✧ -