SFTP 디렉터리에 마운트된 gcsfuse를 사용할 때 동기화 문제

SFTP 디렉터리에 마운트된 gcsfuse를 사용할 때 동기화 문제

GCP의 CentOS 7 컴퓨팅 엔진 VM에서 SFTP 업로드에 사용되는 디렉터리에 스토리지 버킷을 마운트하는 gcsfuse를 사용하는 데 문제가 있습니다. 처음에는 다음과 같이 마운트된 기본 지침을 사용하여 마운트하려고 했습니다.

GOOGLE_APPLICATION_CREDENTIALS=/root/service_account.json gcsfuse al-dev-sftp /sftp

하지만 마운트된 디렉터리에 파일/디렉터리를 만들 수 없습니다. 조사한 후 다음과 같이 드라이브를 마운트했습니다.

GOOGLE_APPLICATION_CREDENTIALS=/root/service_account.json gcsfuse -o allow_other --gid 0 --uid 0 --file-mode 777 --dir-mode 777 al-dev-sftp /sftp

파일과 디렉토리 생성이 가능해졌습니다. 그러나 SFTP의 일반적인 사용 사례로 감옥 사용자 디렉터리를 chroot하는 데 필요한 파일이나 디렉터리를 chown/chmod할 수는 없었습니다.

이 문제를 극복하기 위해 마운트된 SFTP 스토리지 드라이브에 대한 심볼릭 링크를 만들었습니다. SFTP에 파일을 배치하는 것이 올바르게 동기화된다는 것을 확인할 때까지는 괜찮았지만, 버킷에 파일을 배치하면 마운트된 SFTP와 다시 동기화되지 않았습니다. 예배 규칙서. 재동기화를 시도했지만 어느 방향으로 시도해도 파일이 손실되었습니다. (나중에 gcsfuse가 연결을 지원하지 않는다는 것을 읽었습니다).

좀 더 조사하다가 github 프로젝트를 찾았습니다.kubernetes gcs sftp 설정의 경우그것은 유망 해 보였습니다. 어떤 방식으로든 컨테이너를 사용하지 않지만 마운트가 수행된 방법과 사용된 SFTP 구성에 관심이 있었습니다. 이로 인해 다음과 같은 마운트를 만들게 되었습니다.

 gcsfuse --uid 1000 --gid 1001 -o nonempty wraheem /test_sftp/wraheem/upload

내 업로드 디렉토리를 각 사용자에 대한 별도의 버킷에 마운트하고(이상적이지는 않지만 작동하게 할 수 있다면 괜찮습니다) 업로드 폴더에 대한 사용자에게 권한을 부여하면서 사용자 폴더에 루트 소유권을 배치할 수 있습니다. SFTP의 사용자입니다.

문제는 사용자가 SFTP(filezilla)를 통해 로그인하고 업로드 폴더로 이동하려고 하면 오류 메시지가 표시된다는 것입니다.

Status:         Retrieving directory listing of "/test_sftp/wraheem/upload"...

Command:    cd "/test_sftp/wraheem/upload"

Error:          Directory /test_sftp/wraheem/upload: no such file or directory

분명히 존재하는 것입니다.

내 sshd 구성 항목은 다음과 같습니다.

Match User wraheem
ForceCommand internal-sftp
PasswordAuthentication yes
ChrootDirectory /test_sftp/wraheem
AllowTcpForwarding no

이는 사용자 디렉터리를 소유한 루트와 하위 디렉터리를 소유한 사용자의 감옥 패턴을 사용하는 다른 일반 디렉터리에서 잘 작동합니다.

나는 마운트 자체를 보고 다음을 보았습니다.

wraheem on /test_sftp/wraheem/upload type fuse (rw,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions)

그리고 눈에 띄는 점은 파일을 추가할 수 있고 ls -l을 수행할 때 폴더와 파일 권한이 설정되어 있음에도 불구하고 user_id와 group_id가 0(루트)으로 설정되어 있다는 것입니다.

drwxr-xr-x. 1 wraheem wraheem 0 Aug 22 20:16 upload

권한이 있어도 마운트 지점을 루트가 소유하므로 상관이 없는지 궁금합니다. 테스트로 기본 원격 디렉토리를 /media(루트 소유)로 설정하려고 시도했는데 filezilla에서 이전과 똑같은 오류가 발생했습니다.

SFTP에 이런 방식으로 gcsfuse를 사용한 사람이 있나요? 아니면 내가 구성 문제의 단계를 놓친 부분을 누구든지 볼 수 있습니까?

여러분이 생각할 수 있는 도움에 감사드립니다. 이 시점에서 이것이 SFTP에도 사용될 수 있는지 궁금합니다.

관련 정보