Samba 공유 권한이 사용자 쓰기 파일을 거부했지만 여전히 표시됩니다.

Samba 공유 권한이 사용자 쓰기 파일을 거부했지만 여전히 표시됩니다.

매우 이상한 질문입니다 ...

원격 삼바 공유:

[javaerpm]
    path = /u/abas/erpm/java
    force user = erpm
    guest ok = yes
    read only = no
    writeable = yes

명령을 로컬로 마운트하려면 루트를 사용하십시오.

root@crunchbang:/mnt/abas# mount -t cifs -o username=guest,rw,exec,auto //10.0.0.2/javaerpm ./javaerpm

루트는 문제 없이 읽기/쓰기/cd를 수행할 수 있습니다.

root@crunchbang:/mnt/abas# cd javaerpm
root@crunchbang:/mnt/abas/javaerpm# touch test
root@crunchbang:/mnt/abas/javaerpm# ll
total 1
-rw-r--r--  1  501 users   0 Sep 24 09:55 test
root@crunchbang:/mnt/abas/javaerpm# rm test

하지만 일반 사용자로 전환하여 동일한 작업을 수행하면 다음과 같은 결과가 나타납니다.

shawn@crunchbang:/mnt/abas/javaerpm$ touch test
touch: cannot touch `test': Permission denied

나는 할 수 ll있고 어쨌든 파일을 쓰는 것을 볼 수 있습니다.

shawn@crunchbang:/mnt/abas/javaerpm$ ll
total 1
-rw-r--r--  1  501 users   0 Sep 24 09:55 test

rm문제 없이 이 작업을 수행할 수도 있습니다 .

shawn@crunchbang:/mnt/abas/javaerpm$ rm test
shawn@crunchbang:/mnt/abas/javaerpm$

다양한 설치 옵션을 시도했습니다. uid=501아무것도 바꾸지 않았습니다. 시도해 보았지만 nounix전혀 작동하지 않으며 루트 또는 shawn 사용자를 사용할 때 아무것도 볼 수 없습니다.

답변1

참고: 저는 단지 추측일 뿐입니다. 저는 삼바 마스터가 아닙니다.

최소한 여기서 사용하는 방식으로 Samba/CIFS는 서버와 클라이언트 간에 자격 증명을 복사하지 않습니다. 지시어 force user가 서버에 있으므로 모든 작업은 erpm서버의 사용자로 수행됩니다. 그러나 클라이언트와 서버 모두 Unix 시스템을 실행하고 있으므로 자동으로 협상합니다.CIFS POSIX 확장. 이로 인해 UNIX 권한이 어느 정도 작동하는 것처럼 보이지만 서버가 허용하는 범위 내에서만 작동하며 UNIX 권한이 서버가 허용하는 것과 다른 것을 선언하는 상황에 직면하게 됩니다.

모든 파일이 사용자 ID 501로 표시되는 것을 확인할 수 있습니다. 이것은 서버의 uid입니다.

파일을 생성하거나 삭제하려면 해당 디렉터리에 대한 쓰기 권한이 필요합니다. 모든 액세스 권한은 서버의 단일 사용자에게 매핑되므로 쓰기 권한은 erpm서버의 해당 디렉터리에 대한 쓰기가 허용되는지 여부에 따라 결정됩니다. 대답은 '예'입니다.

실행하면 touch파일이 생성되고 수정 시간이 변경됩니다. 파일의 수정 시간을 변경하려면 소유권이 필요하며 이는 클라이언트의 일반 파일 시스템 코드로 테스트됩니다.

실행하면 호출(파일 생성)이 성공한 strace touch test것을 알 수 있습니다 .openutimes전화(또는 Linux에서는utimensat시스템 호출)은 시간을 설정할 수 없습니다.

사실 이게 좀 이상한데 왜냐면utimes ~해야 한다touchNULL 인수("타임스탬프를 현재 시간으로 설정"을 의미)를 사용하여 호출되고 임의의 타임스탬프 설정과 같은 소유자뿐만 아니라 파일에 쓸 수 있는 모든 호출자를 허용해야 하기 때문에 성공합니다 . 나는 이것이 utimensat실제로 권한 기반 검사를 수행하고 파일 시스템이 실제 권한에 관계없이 쓰기를 허용하더라도 권한이 파일에 쓸 수 없음을 나타내는 것으로 판단하고 있다고 생각합니다.

CIFS POSIX 확장의 주요 장점은 서버측이 루트가 아닌 사용자의 권한으로 실행될 때 실행 가능 비트 및 그룹 소유권을 상속한다는 것입니다. forceuid마운트 옵션을 사용하여 사용자 소유권을 개별 클라이언트 사용자에 매핑하면 덜 혼란스러울 수 있습니다.

관련 정보