삼바 공유 권한이 파일 작성을 거부했지만 여전히 표시 -t cifs -o username=guest,rw,exec,auto //10.0.0.2/javaerpm ./javaerpm 루트는 전혀

매우 이상한 문제 …

원격에서 삼바 공유 :

[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했지만 전혀 작동하지 않으며 root 또는 shawn 사용자를 사용하는 것이 없습니다.



답변

참고 : 나는 단지 여기에서 추측하고 있습니다. 나는 삼바 전문가가 아닙니다.

적어도 여기에서 사용하는 방식 인 Samba / CIFS는 서버와 클라이언트간에 자격 증명을 재생성하지 않습니다. force user서버 의 지시문으로 인해 모든 작업은 erpm서버 에서 사용자로 수행됩니다 . 그러나 클라이언트와 서버 모두 유닉스 시스템을 실행하고 있기 때문에 CIFS POSIX 확장 을 자동 협상했습니다 . 이것은 유닉스 권한이 어느 정도까지 작동하는 것처럼 보이지만 서버가 허용하는 한 유닉스 권한이 주장하는 것과 서버가 허용하는 것이 다른 경우가 있습니다.

모든 파일은 사용자 ID 501로 나타납니다. 이것이 서버의 uid입니다.

파일을 만들거나 제거하려고하면 디렉토리에 대한 쓰기 권한이 필요합니다. 모든 액세스는 서버의 단일 사용자에게 맵핑되므로 쓰기 권한 erpm은 서버의 해당 디렉토리에 쓸 수 있는지 여부로 축소됩니다 . 대답은 ‘예’입니다.

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

을 실행 strace touch test하면 open호출 (파일 작성)이 성공하고 utimes호출 (또는 Linux에서는 utimensat시스템 호출)이 시간을 설정하지 못합니다.

NULL 인수를 사용하여 호출 하기 때문에 ( “현재 시간으로 타임 스탬프 설정”을 의미 하므로) 실제로 성공 utimes 해야 하기 때문에 약간 이상 touch합니다. 임의의 타임 스탬프를 설정하는 것과 같이 소유자에게 나는 의심 utimensat실제로 권한을 기반 검사를 수행하고, 권한을 사용하면 파일 시스템에 관계없이 실제 권한에 쓰기 작업을 허용 할 경우에도 해당 파일에 쓸 수 없습니다 말할 것을 결정하는 것입니다.

루트 사용자가 아닌 사용자의 권한으로 서버 측을 실행할 때 CIFS POSIX 확장의 주요 장점은 실행 가능 비트 및 그룹 소유권을 전달하는 것입니다. forceuidmount 옵션을 사용하여 사용자 소유권을 단일 클라이언트 측 사용자에 매핑하면 혼동이 줄어 듭니다 .


답변