SFTP 권한 거부 오류 해결
이제 권한이 SFTP 접근에 미치는 영향을 이해했으므로 일반적인 권한 거부 오류를 해결하는 방법을 알아보겠습니다.
해결 방법 1: 파일 및 디렉토리 권한 조정
권한 문제에 대한 가장 간단한 해결책은 파일 및 디렉토리 권한을 조정하는 것입니다. 새로운 테스트 케이스를 만들어 보겠습니다.
## 제한적인 권한으로 새 테스트 파일 생성
echo "This file has restricted permissions" > ~/project/restricted_access.txt
chmod 600 ~/project/restricted_access.txt
현재 권한을 확인합니다.
ls -l ~/project/restricted_access.txt
출력:
-rw------- 1 labex labex 35 Sep 28 11:05 /home/labex/project/restricted_access.txt
이제 이 파일의 권한을 변경하여 다른 사용자가 접근할 수 있도록 하겠습니다.
chmod 644 ~/project/restricted_access.txt
ls -l ~/project/restricted_access.txt
출력:
-rw-r--r-- 1 labex labex 35 Sep 28 11:05 /home/labex/project/restricted_access.txt
이러한 권한 (644) 을 사용하면 파일 소유자 (labex) 는 파일을 읽고 쓸 수 있으며, 그룹 구성원 및 다른 사용자는 읽기만 할 수 있습니다.
해결 방법 2: 파일 소유권 변경
또 다른 해결 방법은 파일의 소유권을 SFTP 사용자와 일치하도록 변경하는 것입니다. 다른 테스트 파일을 만들어 보겠습니다.
echo "This file will be owned by sftpuser" > ~/project/ownership_test.txt
이제 소유권을 SFTP 사용자로 변경해 보겠습니다.
sudo chown sftpuser:sftpuser ~/project/ownership_test.txt
ls -l ~/project/ownership_test.txt
출력:
-rw-rw-r-- 1 sftpuser sftpuser 36 Sep 28 11:10 /home/labex/project/ownership_test.txt
이제 파일은 sftpuser 가 소유하고 있으며, sftpuser 는 파일을 읽고 쓸 수 있습니다.
해결 방법 3: 공유 디렉토리 생성
SFTP 파일 공유에 대한 일반적인 해결책은 여러 사용자가 접근할 수 있는 적절한 권한을 가진 디렉토리를 생성하는 것입니다.
## 적절한 권한으로 새 공유 디렉토리 생성
mkdir -p /tmp/sftp_shared
sudo chown labex:labex /tmp/sftp_shared
chmod 755 /tmp/sftp_shared
## 모든 사용자가 쓸 수 있는 업로드를 위한 하위 디렉토리 생성
mkdir -p /tmp/sftp_shared/uploads
chmod 777 /tmp/sftp_shared/uploads
## 공유 디렉토리에 샘플 파일 생성
echo "This file is in the shared SFTP directory" > /tmp/sftp_shared/sample.txt
chmod 644 /tmp/sftp_shared/sample.txt
설정을 확인해 보겠습니다.
ls -la /tmp/sftp_shared/
출력:
total 12
drwxr-xr-x 3 labex labex 4096 Sep 28 11:15 .
drwxrwxrwt 4 root root 4096 Sep 28 11:15 ..
-rw-r--r-- 1 labex labex 39 Sep 28 11:15 sample.txt
drwxrwxrwx 2 labex labex 4096 Sep 28 11:15 uploads
이 설정으로:
- 메인 디렉토리는 모든 사용자가 읽고 실행할 수 있지만 소유자만 쓸 수 있습니다.
- 업로드 하위 디렉토리는 모든 사용자가 쓸 수 있습니다 (SFTP 업로드에 적합).
- sample.txt 파일은 모든 사용자가 읽을 수 있지만 소유자만 쓸 수 있습니다.
이 구성을 통해 SFTP 사용자는 다음을 수행할 수 있습니다.
- 공유 디렉토리로 이동
- 샘플 파일 읽기
- 업로드 디렉토리에 파일 업로드
해결 방법 4: 더 세분화된 제어를 위해 ACL 사용
ACL (Access Control Lists, 접근 제어 목록) 은 보다 자세한 권한 관리를 제공합니다. 필요한 패키지를 설치하고 ACL 을 사용해 보겠습니다.
sudo apt install -y acl
이제 파일을 생성하고 ACL 을 사용하여 특정 권한을 설정해 보겠습니다.
echo "This file uses ACLs for permissions" > ~/project/acl_test.txt
## 기본 권한 설정
chmod 640 ~/project/acl_test.txt
## sftpuser에 대한 ACL 권한 추가
sudo setfacl -m u:sftpuser:r ~/project/acl_test.txt
## ACL 설정 보기
getfacl ~/project/acl_test.txt
출력:
## file: /home/labex/project/acl_test.txt
## owner: labex
## group: labex
user::rw-
user:sftpuser:r--
group::r--
mask::r--
other::---
이 ACL 구성은 다음을 허용합니다.
- 파일 소유자 (labex) 는 읽고 쓸 수 있습니다.
- sftpuser 는 파일을 읽을 수 있습니다.
- 그룹은 파일을 읽을 수 있습니다.
- 다른 사용자는 접근할 수 없습니다.