WordPress Plugin 설치시 Could not create directory라는 에러에 대한 손쉬운 해법


리눅스 Ubuntu에 WordPress를 설치하고 원하는 플로그인을 설치하다보면 Could not create directory라는 에러가 발생하면 플로그인 설치가 실패하는 경우를 종종 보게된다.


이 문제는 디렉토리의 권한 문제 때문에 발생하는 현상이다. 즉 플러그인을 설치하기 위해서 기존의 wordpress 디렉토리 안에 새로운 디렉토리나 파일을 생성해야 하는 경우가 있는데 새로운 디렉토리나 파일을 생성할 권한이 없기 때문에 발생하는 현상이다.


Wordpress를 최초 설치하면 wordpress라는 디렉토리가 생기고 이 안에 필요한 파일들이 생성이 되는데 문제는 wordpress라는 디렉토리의 소유권자가 다음과 같이 되어있다.


drwxr-xr-x  5 nobody        nogroup          4096  5월 18 13:21 wordpress/


해석해 보면

d(첫 번째 자리) : wordpress가 디렉토리라는 뜻

rwx(2~4번째 자리) : 소유자는 r(읽기), w(쓰기), x(실행)을 모두 할수 있다는 뜻

r-x(5~7번째 자리) : 그룹 사용자는 r, x만 가능하다는 뜻

r-x(8~10번째 자리) : 그외 모든 일반 사용자는 r, x만 가능하다는 뜻.


그런데 wordpress라는 디렉토리 안에 새로운 디렉토리나 파일을 생성할수 있는 권한은 이 디렉토리에 대한 소유자인 nobody라야 가능한 것이다. 그룹 사용자는 nogroup이고 이 또한 w 권한이 없으므로 어떠한 디렉토리나 파일도 wordpress 디렉토리 안에 생성할수가 없다. 따라서 현 상태에서는 WordPress의 플러그인 설치시 Could not create directory라는 에러가 발생할 수 밖에 없다.

이 경우 제일 손쉬운 방법은 디렉토리의 권한을 777로 설정해주면 간단히 해결이 된다. 그러나 이것은 보안상 심각한 설정법이므로 곤란하다.


여기서 중요한 개념을 알아야한다. 서버에서 웹 서비스의 소유권자는 누구인가하는 것이다.

즉 WordPress를 실행하는 소유권자가 누구냐 하는 것이다. Ubuntu의 경우 기본적으로 웹 서비스를 실행하는 소유권자는 로그인한 계정의 사용자도 아니고 Ubuntu 시스템이 설정한 웹 서비스를 실행하는 소유권자는 www-data이다. 

따라서 wordpress라는 디렉토리의 소유권자를 www-data로 지정해 주면 소유자의 권한이 rwx이므로 WordPress 플러그인 추가에 아무런 문제가 없다.

그룹 사용자 또한 www-data로 지정해 주면 일단 WordPress 플러그인 문제나 테마, 파일 업로드 등에서 아무런 문제가 없다.

chown 명령을 사용해서 해당 디렉토리의 소유권을 변경한다. 

chown의 사용법은 다음과 같다.


chown 사용자명:그룹사용자명 대상


# chown -R www-data:www-data /home/joe/www/wordpress/


참고적으로 여기서 -R은 Recursive를 의미하는데 적용할 디렉토리의 모든 하위 디렉토리와 파일들에도 모두 적용하겠다는 뜻이다.

따라서 위의 명령을 해석해 보면 /home/joe/www/wordpress라는 디렉토리의 모든 하위 디렉토리까지를 포함해서 소유자는 www-data로 변경하고 해당 디렉토리의 그룹 사용자도 www-data로 변경한다는 뜻이다. 이 작업을 하게 되면 다음과 같이 바뀌게된다.


drwxr-xr-x  5 www-data        www-data          4096  5월 18 13:21 wordpress/


사용자(www-data)의 권한은 rwx이므로 플러그인 설치시 새로운 디렉토리나 파일의 생성에 아무런 문제가 없다.

그런데 이렇게만 설정을 한다면 FTP 사용시 문제가 발생한다.


FTP(SFTP)의 로그인 계정이 adduser로 등록한 joe라는 사용자로 로그인했다고 할 경우 joe는 wordpress 디렉토리의 사용자(user)도 아니고 group user도 아니고 others에 해당된다(user-group-others). 따라서 wordpress의 권한이 rwxr-xr-x이므로 others가 할수 있는 것은 r-x뿐이므로 FTP로 파일 업로드가 불가능하다.

따라서 FTP 업로드도 문제가 없게 할려면 다음 2가지 방법으로 해결하는 방법을 취할수 있다(더 좋은 방법이 있을수 있겠지만 골치 아프니 이정도 수준으로...).


(1) wordpress 디렉토리의 소유자는 joe로 설정하고 그룹 사용자는 www-data로 설정한후

(2) 해당 디렉토리의 권한을 775(rwxrwxr-x)로 지정하게 되면 웹 서비스의 소유자인 www-data에게 rwx의 권한이 주어지므로 플러그인 설치 등의 작업에 문제 없을뿐 아니라 FTP 로그인을 joe로 로그인 했을 경우 디렉토리 소유자가 joe인데 소유자에게 주어진 권한이 rwx이므로 역시 FTP 업로드 또한 문제 없게 된다.

다음과 같이 변경한다


# chown -R joe:www-data /home/joe/www/wordpress/

# chmod -R 775 /home/joe/www/


소유자 및 권한 설정이 다음과 같이 변경되어 있을 것이다.


drwxrwxr-x  5 joe        www-data          4096  5월 18 13:21 wordpress/


참고로 WordPress가 설치된 디렉토리의 wp-config.php의 권한을 600으로 다음과 같이 주어졌을 경우 다른 모든 것이 정상일지라도 해당 홈페이지는 웹 브라우저에서 실행되지 않는다.


-rw-------  1 joe www-data  2988  5월 23 14:54 wp-config.php


왜냐하면 위에서 보는바와 같이 Ubuntu에서 웹 서비스를 실행시키는 소유자는 www-data인데 wp-config.php는 소유자가 joe로 되어 있고 이 사용자(joe)에 대해서만 rw의 권한이 주어져 있고 www-data를 포함한 그외의 사용자에게는 어떠한 권한도 주어져 있지 않기 때문에 이 홈페이지는 실행이 될수가 없다. 이럴 경우 다음과 같이 권한을 755로 설정해 주면 문제가 해결된다.

# chmod 755 wp-config.php

그러면 다음과 같이 되어 정상적으로 WordPress 홈페이지가 실행이 될 것이다.

-rwxr-xr-x  1 joe www-data  2988  5월 23 14:54 wp-config.php*



+ Recent posts