특정 하위 디렉토리에 액세스하여 vsftpd에 대한 가상 사용자를 설정하는 방법은 무엇입니까?


24

하위 폴더에만 액세스 할 수있는 vsftpd에 가상 사용자를 추가 할 수 있어야합니다. 가상 사용자를 사용하려는 이유는 서버에 실제 사용자가 1 명뿐이기 때문입니다.

FTP 구조는 다음과 같습니다.

  • www
    • website_name1
      • sub_folder1
    • website_name2
      • sub_folder2
      • sub_folder3
    • website_name3
    • website_name4

기본 계정은 www 폴더와 모든 하위 디렉토리에 액세스 할 수 있으며 sub_folder1sub_folder1 에만 액세스 할 수있는 가상 사용자를 추가하고 싶습니다

또한 나는 또한 액세스에 다른 사용자가 필요로 약간의 혼동 방지하기 sub_folder3sub_folder3을 . 요점은 사용자별로 사용자별로 어떤 폴더와 하위 폴더를 선택할 수 있어야한다는 것입니다.

사용자를 추가하여 전체 strucutre 또는 설정 사용자 이름의 폴더를 볼 수있는 방법을 찾았습니다.

비슷한 질문을 여기에 게시했습니다.

특정 디렉토리 추가를 포함하여 여러 사용자에 대해 VSFTPD를 설정하는 방법

그러나 그것은 proftpd일반적으로 덜 안전 하다고 추천 합니다.
아니면 여기서 요점을 놓쳤습니까?


serverfault.com/questions/450214/를 찾을 때까지 가장 오랫동안 인증에 문제가있었습니다. PAM에 MD5 해시에 문제가있는 것 같습니다. 이 안내서는 해당 문제를 해결합니다.

답변:


31

약간의 장난으로 나는 세미 솔루션 (완벽하지는 않지만 충분 함)을 생각해 냈습니다.

2707974 답변과 정보를 사용하여 필요한 것을 얻을 수있는 다른 곳에서 얻었습니다.

먼저 vsftp 및 PAM이 설치되어 있어야합니다.

apt-get install vsftpd libpam-pwdfile

/etc/vsftpd.conf 편집

nano /etc/vsftpd.conf

다음에 붙여 넣기

listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
local_root=/var/www
chroot_local_user=YES
allow_writeable_chroot=YES
hide_ids=YES

#virutal user settings
user_config_dir=/etc/vsftpd_user_conf
guest_enable=YES
virtual_use_local_privs=YES
pam_service_name=vsftpd
nopriv_user=vsftpd
guest_username=vsftpd

정확한 사용자 요구 사항에 맞게 편집 가상 사용자에게 가장 중요한 비트는 가상 사용자 설정 설명 다음의 모든 것입니다.

사용자 생성

데이터베이스를 사용하거나 더 빠르고 사용하기 쉽다는 htpasswd것을 알았습니다 htpasswd.

사용자를 저장할 디렉토리를 만드십시오

mkdir /etc/vsftpd
htpasswd -cd /etc/vsftpd/ftpd.passwd user1

추가 사용자를 추가하면 -c

htpasswd -d /etc/vsftpd/ftpd.passwd user2

8 문자 이상으로 제한하는 CRYPT를 사용하여 작동하도록했습니다 .8 문자 이상을 사용하려면 openssl을 사용하여 호환되는 해시를 생성하고 htpasswd로 직접 파이프하십시오.

htpasswd -c -p -b /etc/vsftpd/ftpd.passwd user1 $(openssl passwd -1 -noverify password)

사용자가 생성되면 PAM 구성 파일을 변경할 수 있습니다

nano /etc/pam.d/vsftpd

이 파일 내부의 모든 것을 제거하고 다음으로 바꿉니다.

auth required pam_pwdfile.so pwdfile /etc/vsftpd/ftpd.passwd
account required pam_permit.so

그러면 정의 된 가상 사용자에 대한 로그인이 활성화 /etc/vsftpd/ftpd.passwd되고 로컬 사용자가 비활성화됩니다.

다음으로 이러한 가상 사용자가 사용할 사용자를 추가해야합니다. 이 사용자는 쉘에 액세스 할 수 없으며 호출됩니다.vsftpd

useradd --home /home/vsftpd --gid nogroup -m --shell /bin/false vsftpd

사용자는 guest_username=vsftpdvsftpd conf 파일에서 일치해야 합니다

디렉토리 액세스 정의

여기서 중요한 라인은 다음과 같습니다

user_config_dir=/etc/vsftpd_user_conf

이것은 user1로그인 할 때 다음 파일을 찾습니다.

/etc/vsftpd_user_conf/user1

이 파일과 동일 vsftpd.conf하므로 새 파일 을 정의 할 수 있습니다local_root

user1액세스 권한 만 갖고 싶은 질문으로 돌아가서 폴더 var/www/website_name1/sub_folder1를 만들어야 vsftpd_user_conf합니다.

mkdir /etc/vsftpd_user_conf

이제 사용자 파일을 작성하십시오.

nano /etc/vsftpd_user_conf/user1

다음 줄을 입력하십시오

local_root=/var/www/website_name1/sub_folder1

이제 vsftp를 다시 시작하십시오.

service vsftpd restart

이제 볼 수있는 user1 var/www/website_name1/sub_folder1과 그 안에있는 모든 폴더와 파일 로 로그인 할 수 있습니다.

이제 원하는만큼 많은 사용자를 추가하고 원하는 폴더에 대한 액세스를 제한 할 수 있습니다.

사용자 conf 파일을 만들지 않으면 var / www 폴더가 루트로 기본 설정됩니다 (위 예에서).

하위 폴더를 사용자가 수정할 수 있도록하려면 공유 하위 폴더의 소유자를 변경해야합니다.

chown vsftpd:nogroup /var/www/website_name1/sub_folder1

1) 절대 경로를 사용하십시오 ( "var /"로 시작하는 경로를 "/ var"로 바꾸십시오. 2) 우분투 12.04에있는 vsftpd 2.3.5는 allow_writeable_chroot 옵션을 지원하지 않으므로 패치설치하여 해결할 수 있습니다 vsftpd .
gadelat

안녕하세요, ssl 비밀번호로 -d와 함께 -c를 생략하거나 -c를 생략합니까? 또한 두 번째로, 비밀번호를 변경하기 위해 쿼리를 다시 실행합니까? 아니면 다른 방법이 있습니까? 감사합니다
mdixon18

useradd --home을 사용하여 홈 디렉토리를 작성해야하는 이유는 무엇입니까? 필요합니까?
e-info128

1
추가 : 보안 TLS 연결을 활성화하십시오. digitalocean.com/community/tutorials/…
e-info128

1
apache2-utils는 일부 설치에 필요할 수 있습니다. 모든 설치와 관련이 없기 때문에 답변에 포함하지 않았습니다.
Avenyet

12

이 매뉴얼을 사용해보십시오. 아마도 당신을 위해 일할 것입니다.

그것을하는 방법

vsftpd 및 PAM 라이브러리 설치

편집 /etc/vsftpd.conf/etc/pam.d/vsftpd

사용자 정의 디렉토리를 사용하여 사용자 계정 작성 (예 : / var / www /)

올바른 디렉토리를 설정 chmod하고chown

서버에 대한 전체 액세스 권한이있는 관리자를 만듭니다.

  1. 설치 vsftpd(Very Secure FTP Deamon) 및 libpam-pwdfile가상 사용자 생성

FTP 사용자를 만들고 싶었지만 로컬 유닉스 사용자 (쉘 액세스, 홈 디렉토리 등)를 추가하고 싶지 않았습니다. PAM (Pluggable Authentication Modules)은 가상 사용자를 만드는 데 도움이됩니다.

sudo apt-get install vsftpd libpam-pwdfile

  1. 편집하다 vsftpd.conf

먼저 원본 파일을 백업해야합니다

sudo mv /etc/vsftpd.conf /etc/vsftpd.conf.bak

그런 다음 새로운 것을 만드십시오

sudo vim /etc/vsftpd.conf

다음 줄을 복사하여 붙여 넣습니다. 파일에는 다음 줄만 포함되어야합니다.

listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
nopriv_user=vsftpd
virtual_use_local_privs=YES
guest_enable=YES
user_sub_token=$USER
local_root=/var/www/$USER
chroot_local_user=YES
hide_ids=YES
guest_username=vsftpd
  1. 가상 사용자 등록

사용하는 사용자를 등록하려면 서버에서 작업하고 htpasswd있다고 가정 apache2합니다. 크리에이트 vsftpd다음 폴더를 거기에 구성 파일을 넣어.

sudo mkdir /etc/vsftpd

그때

sudo htpasswd -cd /etc/vsftpd/ftpd.passwd user1

-c는 파일이 아직 존재하지 않으면 파일을 생성한다는 것을 의미합니다 -d는 MD5를 강제합니다. 우분투 12.04에서 필요합니다. 항상 사용하십시오.

이 명령은 암호를 묻는 메시지를 표시합니다.

나중에 새 사용자를 추가하려면 다음을 수행하십시오.

sudo htpasswd -d /etc/vsftpd/ftpd.passwd user2

  1. 에서 PAM 구성 /etc/pam.d/vsftpd

다시, orignal 파일을 백업해야합니다

sudo mv /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak

새로운 것을 만들어

sudo vim /etc/pam.d/vsftpd

이 두 줄을 복사하여 붙여 넣습니다 (이것이 유일한 내용이어야 함). 나는이 두 줄만 주장하고 원본을 유지하는 데 많은 시간을 낭비하고 방금 추가했습니다.

auth required pam_pwdfile.so pwdfile /etc/vsftpd/ftpd.passwd
account required pam_permit.so
  1. 쉘 액세스 권한이없는 로컬 사용자 작성

sudo useradd --home /home/vsftpd --gid nogroup -m --shell /bin/false vsftpd

id 명령 id vsftpd를 사용하여 생성되었는지 확인할 수 있습니다. check_shell 매개 변수로 인해 사용자를 / bin / false 쉘로 정의합니다 (사용하지 않더라도). 최종 사용자가 FTP 서버에 연결하면 권한 및 소유권에 사용됩니다.

chmod그리고 chown.

  1. 재시작 vsftpd

일반적인 방법은 모든 데몬처럼 init.d를 사용하는 것입니다

sudo /etc/init.d/vsftpd restart

sudo service vsftpd restart

  1. 디렉토리 만들기

구성에 따라 모든 사용자가 / var / www / user1 폴더에 배치됩니다.

특정 권한으로 작성해야합니다. 루트 폴더는 쓸 수 없습니다!

 / [root = /var/www/user1] => 555
www [ /var/www/user1/www ] => 755
docs [ /var/www/user1/docs ] => 755

참고 : 사용자는 루트 디렉토리에 파일 또는 폴더를 작성할 수 없습니다.

에서 vsftpd.conf우리는이 chroot_local_user=YES사용자가 자신의 폴더의 아무것도 외부를 볼 수 있습니다. 그에게 서버는 다음과 같습니다.

따라서 다음 명령을 실행하십시오.

mkdir /var/www/user1`
chmod -w /var/www/user1
mkdir www/user1/www
chmod -R 755 /var/www/user1/www
chown -R vsftpd:nogroup /var/www/user1

/var/www/user1폴더가 존재하는 또는 연결이 실패합니다.

지금 당신은 당신의 FTP와 연결을 시도 할 수 있습니다

  1. 전체 서버에 액세스 할 관리자를 만듭니다.

관리자를 만들려면에 새 사용자를 등록해야합니다 htpasswd.

그렇게하기 전에 /etc/ftpusersftp로 연결할 수없는 특정 사용자를 정의 하는 파일 을 확인 하는 것이 좋습니다. 가상 사용자가 아닌 로컬 사용자만이 파일에 포함 된 이름을 선택하지 않는 경우를 생각합니다.

sudo htpasswd -d /etc/vsftpd/ftpd.passwd theadmin

이제 새로운 줄을 추가해야합니다 /etc/vsftpd.conf

chroot_list_enable=YES

이는 사용자가 / etc /의 사용자를 제외한 자신의 폴더에 감옥에 배치됨을 의미합니다.

vsftpd.chroot_list

이 파일을 만들고 사용자를 추가하겠습니다. 파일은“theadmin”을 포함하는 간단한 줄입니다. 한 줄에 한 명의 사용자를 추가하십시오. 즉, /var/www/theadmin폴더 를 만들 필요가 없습니다 . 사용자가 로그인하여 시작 /home/vsftpd합니다.

서버를 다시 시작하면 완료됩니다!


local_root = / var / www / $ USER를 시행하기 때문에 이미 유연하지 않았습니다. 사용자를 위해 단일 디렉토리를 지정할 수 없습니다. 이 디렉토리는 일반적으로 클라이언트에 따라 목적과 위치가 다릅니다. 그래도 답변 주셔서 감사합니다.
Avenyet

0

예, 유연성있게 userconfig 디렉토리 및 파일을 작성 mkdir /var/www/userconfs하거나 userconfs 이름을 변경하려는 경우 특정 파일을 작성하십시오.

vi /var/www/userconfigs/ftpuseraccount

내부 유형 local_root=/var/www(또는 dir로 액세스하려는 모든 것) guest_username=www-data(파일 상단의 우분투 소유자

업데이트 후 vsftpd.conf를 추가 한 후 user_config_dir=/var/www/userconfigs(또는 대체 한대로이 계정은 지정된 모든 디렉토리에 액세스합니다)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.