임베디드 시스템의 VSFTPD: 특정 폴더에만 사용자 액세스를 제한합니다.

임베디드 시스템의 VSFTPD: 특정 폴더에만 사용자 액세스를 제한합니다.

내 응용 프로그램에는 폴더 /LD와 사용자가 있습니다 test_user. 이 사용자가 해당 /LD폴더 에만 액세스할 수 있도록 하고 싶습니다 .

그러나 Filezilla FTP 클라이언트를 통해 연결하면 /LD기본적으로 로드되지만 사용자는 다른 폴더로 이동할 수도 있습니다.

저는 Linux 4.9 임베디드 시스템을 사용하고 있습니다. chroot, adduser, addgroup및 명령이 있습니다 chmod. 이 usermod명령 이 없습니다

내가 원하는 것이 가능한가?

답변1

먼저 /LD홈디렉토리를 로 설정해야 합니다 test_user. usermod명령 권한이 없다고 말하고 해당 권한을 사용할 vipw수 없는 경우 사용자가 현재 로그인되어 있지 않은지 확인하고 /etc/passwd직접 편집하십시오.

그런 다음 확인하십시오.vsftpd.conf 매뉴얼 페이지chroot_local_userchroot_list_enable옵션에 대한 설명을 읽어보세요 chroot_list_file.

모든(또는 대부분) 사용자가 FTP 연결을 홈 디렉토리로 제한하도록 하려면 이를 chroot_local_userYES로 설정하고 /etc/vsftpd.chroot_list파일(또는 이 옵션으로 지정된 파일 chroot_list_file)을 사용하여 예외를 지정할 수 있습니다.

제한 사항 만 test_user필요한 경우 "아니요"로 두고 "예"로 chroot_local_user설정한 후 파일(또는 이 옵션으로 지정된 파일 ) 에 추가합니다. 파일이 아직 존재하지 않으면 생성할 수 있습니다.chroot_list_enabletest_user/etc/vsftpd.chroot_listchroot_list_file

이러한 작업의 결과로 test_userFTP 연결에 로그인할 때 /LD디렉터리가 루트 디렉터리( /)로 표시됩니다. 따라서 /LDFTP 연결을 위한 파일 시스템의 나머지 부분이 존재하지 않기 때문에 디렉토리 트리 외부를 탐색 할 수 없습니다 . 사용자가 계속 액세스할 수 있는 하위 디렉터리는 /LD바람직하지 않은 경우 파일 시스템 권한을 사용하여 차단합니다.


먼저 /LD 하위 디렉터리에 액세스해야 하는 사용자 및/또는 그룹을 식별합니다. 이상적으로는 /LD 하위 디렉터리의 모든 사용자는 하나의 그룹(이라고 부르겠습니다 LDsub) 에 속해야 하며 test_user해당 그룹에 속해서는 안 됩니다. 다른 그룹에만 있어야 합니다 test_user(예로 사용하겠습니다 LDftp). 이 그룹의 구성원은 디렉터리 자체에 대한 쓰기 권한이 필요한지 여부에 따라 이 그룹의 구성원 LDsub일 수도 있고 아닐 수도 있습니다 .LDftp/LD

또는 명령이 없는 경우 을 usermod편집하거나 편집만으로 groupmod그룹 멤버십을 편집 할 수 있습니다.vigr/etc/group

이제 다음 명령을 사용하여 chown디렉터리의 소유권을 설정 /LD하고 chmod권한을 설정할 수 있습니다.

chown root:LDftp /LD
chmod 775 /LD        #this will be drwxrwxr-x 

이제 test_user그룹 멤버십을 통해 디렉토리에 대한 쓰기 권한을 갖게 되지만 /LD디렉토리의 소유자는 아니므로 권한을 변경할 수 없습니다. "everyone rx" 권한을 사용하면 그룹 구성원이 LDsub자신의 권한이 허용하는 디렉터리를 통해 하위 디렉터리에 액세스할 수 있습니다.

/LD의 하위 디렉토리는 그렇지 않은 한 원하는 경우 누구나 소유할 수 있습니다 . test_user이러한 하위 디렉토리에 대한 그룹 LDsub및 권한은 다음과 같이 설정되어야 합니다.

chgrp LDsub /LD/subdirectory  # or chown <not_test_user>:LDsub /LD/subdirectory
chmod 770 /LD/subdirectory   # this will be drwxrwx---

test_user에 대한 쓰기 액세스 권한이 있다는 것은 /LD하위 디렉터리의 이름을 바꾸고, 새 디렉터리를 만들고, 하위 디렉터리를 삭제할 수 있음을 의미합니다.비어 있는하위 디렉토리.

요구 사항이 이보다 더 복잡한 경우 파일 시스템에서 ACL 지원이 활성화되어 있는지 확인하고 ACL/LD를 사용하여 하위 디렉터리에 액세스할 수 있는 사용자 및/또는 그룹을 지정하는 것이 더 쉬울 수 있습니다. getfacl및 명령의 매뉴얼 페이지를 참조하십시오 setfacl. 및/또는이 페이지더 알아보기.


또는 하위 디렉터리를 /LD다른 위치로 이동하고 기호 링크를 사용하여 디렉터리 경로가 이전처럼 작동하도록 만드는 것을 고려할 수 있습니다.

mv /LD/subdirectory /elsewhere/subdirectory
ln -s /elsewhere/subdirectory /LD/subdirectory

FTP 세션 외부의 모든 사용자에 대해 test_user이러한 기호 링크는 평소대로 작동합니다. 그러나 test_userFTP 세션은 chroot되기 때문에 /LD이러한 심볼릭 링크는 사용할 수 없는 끊어진 링크로 나타납니다. test_user쓰기 권한이 있는 경우 /LD'깨진' 링크를 삭제할 수 있습니다.

관련 정보