Windows 파일 서버에서 계정을 얻었습니다. (나에게) 매우 이상한 상황은
- 에 연결하거나
smbclient
(깊은) 하위 디렉터리로 변경하거나 해당 내용을 표시할 수 있습니다. - 공유를 마운트할 수 있지만(오류 메시지 없음, 마운트 지점은 에 있음
/proc/mounts
) 동일한 경로로 변경하거나 해당 내용을 나열할 수 없습니다. 알겠어요No such file or directory
.
하위 수준 하위 디렉터리에 대한 "콘텐츠 표시" 권한이나 "다음으로 변경" 권한이 없습니다. 이는 문제가 되지 않으며 적절하지도 않습니다 smbclient
.
Windows 관리자는 이제 마운트 지점의 내용을 볼 수 있도록 사용자에게 추가 권한을 부여했습니다. 이제 마운트를 통해 더 깊은 하위 디렉터리에 접근할 수도 있습니다.
현재 구성에서 실행하는 데 필요한 최소 Windows 권한 집합이 무엇인지 확인하지 못했습니다. 어쨌든 문제는 확실히 Linux 측에 있습니다.
smbclient
Windows 공유에 대한 액세스 방법 과 액세스 방법의 차이점은 무엇입니까?mount.cifs
- 어떻게
mount.cifs
하면 그렇게 행동 할 수 있나요smbclient
?
결론적으로
답변의 제안 사항을 테스트할 수 있도록 Windows 관리자에게 공유에 대한 권한을 재설정하도록 요청했습니다. 불행히도 문제는 사라졌습니다. 이전과 마찬가지로 공유 내용을 볼 수 없지만 이제 마운트가 깊은 하위 디렉터리에 액세스할 수 있습니다. 아주 이상한.
댓글 @intika: 귀하의 답변에 대해 추가 포상금을 제공하려고 했는데, 그렇게 했을 때 어떤 이유로 귀하의 답변을 삭제하셨는지...
댓글 및 답변에 대한 응답
윈도우 서버
서버 2016, SMB 3.1.1
삼바 버전
4.5.16 도메인의 구성원이 아닙니다.
사용된 명령
/etc/fstab
://fs-p01.dnsdomain/Data /data cifs credentials=/root/fs-p01.credentials 0 0
smbclient //fs-p01.dnsdomain/Data -U username -W windowsdomain
windowsdomain
방금 명령이 불완전하다는 것을 깨달았습니다 smbclient
. 아마도 이것이 작동하기 때문에 관련이 없을 것입니다. 그것은 단지 그것을 name
대체합니다 name.local
. 그러나 이는 명령 간의 구성 차이입니다. 안타깝게도 mount
Windows 서버에 대한 권한을 원래 설정으로 다시 변경할 수 없기 때문에 잘못된 도메인을 사용하면 작동하는지 확인할 수 없습니다. 월요일에 Windows 관리자가 이 작업을 수행할 때까지 기다려야 합니다.
길
작업하려는 디렉터리의 경우 공유 내 경로 길이는 85자입니다. 또한 다음보다 적은 상위 디렉터리에 액세스할 수 있어야 합니다.
xxxxxxxxxxxxxxxxxxx/xxxxxxxxxxxxxxxxxxxxx/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/2020/2020_06
구성 파일
/root/fs-p01.credentials
username=username
password=...
domain=name.local
/etc/smb/smb.conf
(아마 클라이언트 기능과 관련이 없을 수도 있음)
[global]
workgroup = MERCHANTINVOICE
dns proxy = no
log file = /var/log/samba/log.%m
max log size = 1000
# panic action = /usr/share/samba/panic-action %d
server role = standalone server
passdb backend = tdbsam
encrypt passwords = yes
unix password sync = no
passwd program = /usr/bin/passwd %u
passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
pam password change = no
map to guest = bad user
usershare allow guests = no
답변1
intika가 댓글에서 지적했듯이, 귀하는 우리에게 충분한 세부 정보를 제공하지 않았습니다.
경로 제한
악명 높은 260을 만날 수도 있습니다최대 경로 길이 제한. API에 액세스하는 유니코드 방식이 있습니다.32,767한정. Windows 세계에서는 \\server\share
(260 제한 적용) 또는 \\?\UNC\server\share
(32767 제한 적용) 으로 액세스하는지 여부에 따라 다릅니다 .
이제 문제는 나열하려는 경로의 길이입니다. 두 번째 질문은 어느 것을 smbclient
사용할 것인가와 mount.cifs
.
에서 인용smbclient
매뉴얼 페이지:
smbclient는 서버가 LANMAN2 프로토콜 이상을 지원하는 경우 긴 파일 이름을 지원합니다.
그러나 mount.cifs가 긴 경로를 지원한다는 내용은 찾을 수 없으므로 지금은 mount.cifs
긴 경로가 지원되지 않는다고 해도 무방합니다.
SMB 프로토콜 버전
smb1
안전하지 않은 것으로 간주되어 사용하지 않는 것으로 가정합니다 . /를
사용 중이 smb2
거나 smb3
연결 중 입니까 ?smbclient
mount.cifs
프로토콜을 사용하는 경우 smb3
NTLM 보안에 영향을 미쳐 디렉터리를 나열하지 못할 수 있습니다.
노트:무슨 일이 일어나고 있는지 보려면 클라이언트가 아닌 서버의 로그(이벤트 뷰어)를 확인해야 합니다.
편집하다:업데이트와 의견에 감사드립니다.
내 생각엔 당신이 다음과 같은 일을 겪을 수도 있을 것 같아요가리키다 smbv2
오류(설치 사용 시).
간단히 말해서:
드라이브의 루트인 Windows 공유(예: C$)를 탑재할 때 서버는
.
디렉터리..
항목을 반환하지 않습니다. 이로 인해 smb2 코드 경로가 처음 2개 항목을 잘못 건너뛰게 됩니다.
알아내는 방법? /etc/fstab
예를 들어 (smbv3)를 추가하여 항목에 사용해야 하는 smb 버전을 지정할 수 있습니다 vers=3.0
. 가능하다면(지원되는 경우) vers=1.0
모든 것이 표시되는지 확인하기 위해 버전을 다운그레이드하여 문제를 해결하겠습니다.
따라서 마운트 코드는 다음과 같습니다( sec
적용 도 추가했습니다 ntlm
.mount.cif 매뉴얼 페이지:
//fs-p01.dnsdomain/Data /data cifs credentials=/root/fs-p01.credentials,vers=1.0,sec=ntlm 0 0
smbv1
비활성화되어 있고 테스트 목적으로 활성화할 수 없는 경우 다음을 사용하여 SMB 디버깅을 활성화할 수 있습니다.
echo 1 > /proc/fs/cifs/traceSMB
ls -la
그런 다음 로그에서 디렉터리를 볼 수 있는지 간단히 확인할 수 있습니다 . 그렇다면 이 오류의 영향을 받는 것입니다.
세 번째로 염두에 두어야 할 옵션은 마운트 루트에 두 개 이상의 항목을 갖는 것입니다. 이는 보려는 항목보다 먼저 시작되어야 합니다.
보고된 오류
이 버그가 보고되었습니다. 다음에서 찾을 수 있습니다:삼바 버그질라
해결책
당신은 사용해 볼 수 있습니다이번 패치는 Aurelien이 제작했습니다., 하지만 올바르게 테스트되었는지는 알 수 없습니다.
두 번째 옵션은 위의 세 번째 옵션과 유사한 "해결 방법"을 수행하는 것입니다. 기본적으로 정렬하면 맨 위에 있는 두 개의 디렉터리가 있습니다. 이것은 단지 빠른 수정일 뿐입니다. 제대로 된 수리를 받으려면 패치를 해야 합니다.
답변2
서비스 터미널
서버 측에 대해서도 생각해 볼 수 있습니다. Windows 공유라는 것을 알고 있지만 그게 전부입니다. 이 특별한 경우에 사용 중인 Windows 및 SMB 버전을 아는 것이 도움이 될 것입니다. 서버 구성은 특히 Windows 운영 체제를 클라이언트로 사용하지 않는 경우 큰 차이를 만들 수 있습니다. 아시다시피 Windows 공유가 등장한 이후 Samba와 같은 팀은 Microsoft의 변경 사항을 쫓는 고양이와 쥐 게임이었으며 폐쇄형 시스템이기 때문에 새로운 콘텐츠를 전혀 공개할 필요가 없습니다. 특징.
주요 차이점
smbclient와 mount.cifs가 Windows 공유에 액세스하는 방식의 차이점은 무엇입니까?
smbclient는 네트워크 리소스에 액세스하기 위한 명령줄 유틸리티로 사용하기 위한 것이며, mount.cifs는 일반적으로 루트에서 사용되며, cifs 파일 시스템 유형을 사용할 때 mount 명령에 의해 호출되고, /etc/fstab 파일에서 파일 시스템에 대한 영구적인 액세스.
~에서매뉴얼 페이지주요 차이점은 다음과 같습니다.mount.cifs는 smb.conf를 완전히 무시합니다.
smbclient(8)와 같은 Samba 클라이언트 도구는 smb.conf에 있는 클라이언트 구성 매개변수를 존중합니다. 이러한 클라이언트 도구와 달리 mount.cifs는 smb.conf를 완전히 무시합니다.
smbclient는 기존 프로토콜의 오래된 구현이며 SMB는 CIFS로 대체되었으며 cifs는 새로운 구현을 고려하고 있다고 합니다.
따라서 최신 프로토콜 구현을 사용하는 것이 좋을 수 있지만 사용 가능한 서버 버전에서 이러한 구현 중 어느 것이 더 잘 작동하는지 확인해야 합니다.
그들은 똑같이 행동할 수 있나요?
mount.cifs가 smbclient처럼 작동하도록 하려면 어떻게 해야 합니까?
mount.cifs는 smb.conf 파일을 무시하므로 이 파일의 모든 구성은 호출 명령(예: /etc/fstab의 해당 라인)으로 표현되어야 합니다. 예를 들어, 당신은 이미 고려하고 있습니다-U 사용자 이름옵션은 smbclient에서 사용되지만 smb.conf에는 확인할 수 있는 다른 구성이 있습니다. 특히 로그 구성에서 오류 메시지가 기록될 수 있습니다. smb.conf 파일이 아닌 fstab 파일 중 하나여야 합니다. dmesg, /var/log/boot, /var/log/messeges를 확인하세요.