매우 이상한 질문입니다 ...
원격 삼바 공유:
[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
것을 알 수 있습니다 .open
utimes
전화(또는 Linux에서는utimensat
시스템 호출)은 시간을 설정할 수 없습니다.
사실 이게 좀 이상한데 왜냐면utimes
~해야 한다touch
NULL 인수("타임스탬프를 현재 시간으로 설정"을 의미)를 사용하여 호출되고 임의의 타임스탬프 설정과 같은 소유자뿐만 아니라 파일에 쓸 수 있는 모든 호출자를 허용해야 하기 때문에 성공합니다 . 나는 이것이 utimensat
실제로 권한 기반 검사를 수행하고 파일 시스템이 실제 권한에 관계없이 쓰기를 허용하더라도 권한이 파일에 쓸 수 없음을 나타내는 것으로 판단하고 있다고 생각합니다.
CIFS POSIX 확장의 주요 장점은 서버측이 루트가 아닌 사용자의 권한으로 실행될 때 실행 가능 비트 및 그룹 소유권을 상속한다는 것입니다. forceuid
마운트 옵션을 사용하여 사용자 소유권을 개별 클라이언트 사용자에 매핑하면 덜 혼란스러울 수 있습니다.