컴퓨터/Linux

[Amazon EC2] 자습서 LAMP 설치 중, 폴더 커미션 관련 문제

dolhim 2016. 1. 5. 16:29

참고 : Linux 인스턴스용 사용 설명서자습서: Amazon LinuxLAMP 웹 서버 설치 

참고2 : AWS에 LAMP 설치 방법 (lhh3520)



문제 : Amazon EC2 자습서에서 파일 권한 설정 후, "Permission denied" 오류가 난다.


해결 : 파일 권한 설정을 확인한다.


일반적으로 권한 문제는 명령어 앞에 'sudo' 를 추가하면 해결할 수 있다.

하지만, 여기서는 위 링크의 사용 설명서 절차 수행 중에 발생한 오류를 해결하려고 한다. (매번 sudo 치는게 귀찮기도 하고.. 이참에 공부..)


위 링크에서는 'www' 그룹을 추가하고 현재 사용자인 'ec2-user'에게 '/var/www' 폴더의 퍼미션을 주는 과정을 설명한다.


에러 발생의 원인이 되는 경우를 다음과 같이 3가지로 추측하였다.
1. 그룹이 생성되지 않았거나, 2. 사용자가 그룹에 추가되지 않았거나, 3. 그룹의 권한이 제대로 설정되지 않았을 경우이다.

원인이 되는 요인을 하나씩 확인해보고 고쳐보도록 하겠다.



1. 'www' 그룹이 추가되어있는가?

'www' 그룹을 확인하기 위하여 아래 명령어를 수행한다.

1
2
[ec2-user ~]$ groups
ec2-user wheel www
cs

위와 같이 나오면 성공.


안나오면 아래의 명령어 입력하여,

'www' 그룹을 생성하고, 'ec2-user사용자를 'www' 그룹에 추가한다.

1
2
[ec2-user ~]$ sudo groupadd www
[ec2-user ~]$ sudo usermod -a -G www ec2-user
cs

 


2. 'www' 그룹에 사용자가 추가되어있는가?

다음 명령어로 그룹 정보가 들어있는 '/etc/group' 파일에서 그룹명인 'www' 단어를 검색한다.

1
2
[ec2-user ~]$ cat /etc/group | grep www                      
www:x:1001:ec2-user
cs

위와 같이 'www' 그룹내에 'ec2-user'가 속해있는것을 확인한다.


- [참고] /etc/group 파일 구조

/etc/group에 대한 이미지 검색결과


만약, 확인되지 않을 경우 아래 명령어를 수행한다.

1
2
3
4
[ec2-user ~]$ sudo usermod -a -G www ec2-user
[ec2-user ~]$ exit
[ec2-user ~]$ groups
ec2-user www
cs

'ec2-user'계정을 'www'그룹에 추가하고, 콘솔 종료 후 재로그인한다. 

그리고, groups 명령어로 현재 사용자가 속한 그룹을 확인한다.


3. 'www'그룹에 권한이 제대로 설정되어있는가?

아래의 명령어로 /var/www 폴더의 퍼미션을 확인한다.

1
2
[ec2-user ~]$ sudo ls -al /var/www                    
drwxrwsr-x.  4 root www    31 Dec 23 01:44 www
cs

- [참고] 'ls -al' 명령어에 대한 파일 및 디렉토리 정보

파일 및 디렉토리 조회 정보

Figure 3-5

  Type

    기본 (파일)(-), 디렉토리(d)를 의미함.  ( 여기선 일반적이지 않은 타입은 생략.. )

  Access Modes

    해당 항목에 대한 소유자, 소유그룹, 그 외 유저에게 할당된 쓰기 Read (r), 읽기 Write (w), 혹은 실행하기 eXecute (x)에 대한 권한을 설명한다.

    (아래 링크에 자세히 설명하였다.)


- [참고] 파일 및 디렉터리의 소유권과 허가권 (Access Modes)


- [참고] 파일 및 디렉터리의 권한 변경하기


[참고] 파일 및 디렉터리의 소유자 변경하기


위와 같은 결과가 나오지 않을 경우 다음 명령어를 수행한다.

1
2
3
4
[ec2-user ~]$ sudo chown -R root:www /var/www
[ec2-user ~]$ sudo chmod 2775 /var/www
[ec2-user ~]$ find /var/www -type d -exec sudo chmod 2775 {} +
[ec2-user ~]$ find /var/www -type f -exec sudo chmod 0664 {} +
cs

위 명령어에 대한 의미는 아래와 같다.

'/var/www'디렉토리의 소유자를 'root'로,  소유 그룹을 'www'로 변경한다.
'/var/www'디렉토리에 권한을 부여한다. 
(2775 : 특수 권한인 SetGID를 부여하고, 소유자에게 모든 권한, 소유 그룹에게 모든 권한, 그 외에 읽기, 실행 권한을 부여)
'/var/www'디렉토리 안의 디렉토리에 권한을 부여한다. 
'/var/www'디렉토리 안의 파일에 권한을 부여한다.
(0664 : 특수 권한을 부여하지 않고, 소유자 읽기, 쓰기 권한, 소유 그룹 읽기, 쓰기 권한, 그 외의 사용자에게 읽기 권한을 부여)
(권한에 대한 설명은 위를 참고)


그룹 생성 및 폴더의 권한 설정을 완료하고, 아래의 코드를 통하여 작동을 확인한다.

1
[ec2-user ~]$ echo "<?php phpinfo(); ?>" > /var/www/html/phpinfo.php
cs

위 절차를 잘 수행했다면 해당 위치에 파일이 생길 것이다.

만약, 여기서 다시   "Permission denied"  에러가 발생한다면...... 

명령어에 오타가 났거나, 위 3가지를 제외한 다른 원인이 있는 것이다.



명령어를 입력한 후, 다음 명령어를 입력하기 전에 

방금 입력한 명령어가 실행이 잘 되었는지, 에러가 발생하지 않았는지, 확인하는 것이 중요한 것 같다.