Linux 삼바 서버 : cifs_mount 실패 (반환 코드 = -12)


16

서버 : RHEL 5.9 / smbd 3.0.33-클라이언트 : 모두 현재 mount.cifs (5.2)를 사용하고 있지만 다양 함

이미이 문제를 해결했지만 보편적 인 문서화가 필요하다고 느낀 이러한 오류 코드를 찾아내는 것은 악몽이었습니다.

증상 : 특정 cifs 클라이언트에서 Linux samba 서버로의 예측 불가능하고 간헐적 인 마운트 실패 모든 리눅스 클라이언트는 pam_mount 사용자 홈에 로그인합니다. 무작위로, 산발적으로 홈 디렉토리는 하나의 머신 에서 실패하기 시작했습니다 . 로그인 및 마운트는 다른 모든 클라이언트에서 계속 작동합니다. 처음에는 손상된 클라이언트에 대한 비정상적인 활동이 smbd를 괴롭히는 것이라고 생각했지만 사용량이 줄어든 후에도 간헐적 인 오류가 남아 있습니다.

수동 마운트 시도가 실패하고보고합니다.

Errors from underlying mount program
mount error(12): Cannot allocate memory
Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)

<debug enable="1"/>pam_mount에서 자세한 정보를 얻으려면 /etc/security/pam_mount.conf.xml에 설정하십시오 .

command: 'mount' '-t' 'cifs' '//my_server/watdo' '/home/watdo' '-o' 'user=watdo,uid=666,gid=666'
pam_mount(misc.c:38): set_myuid<pre>: (ruid/rgid=0/0, e=0/0)
pam_mount(misc.c:38): set_myuid<post>: (ruid/rgid=0/0, e=0/0)
pam_mount(mount.c:64): Errors from underlying mount program:
pam_mount(mount.c:68): mount error(12): Cannot allocate memory
pam_mount(mount.c:68): Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)`

/var/log/kern.log도이 이벤트에 대해보고했습니다.

kernel: [4316790.256149] CIFS VFS: cifs_mount failed w/return code = -12

'echo 1> / proc / fs / cifs / cifsFYI' 는 mount.cifs 디버그를 크랭크 합니다 (/ var / log / debug에 기록). 다음은 좋은 부분입니다 (친숙해 보이는가?).

CIFS Session Established successfully
For smb_command 117
Sending smb:  total_len 88
cifs_sync_mid_result: cmd=117 mid=54307 state=4
Mapping smb error code 0xc0000205 to POSIX err -12

이 시점에서 말 그대로 클라이언트 측에서 사용 가능한 다른 정보는 없습니다. cifs 마운트 요청이 종료되고 클라이언트가 거의 즉시 죽습니다. mount.cifs error (12)는 매우 유익하지 않습니다 (man page는 도움이되지 않습니다, thx guys). 광범위한 인터넷 검색에서이 오류는 일반적인 오류 코드이며 정보가없는 것으로 확인되었습니다.

서버 확인 시간! log level = 3/etc/samba/smb.conf에서 smbd로 설정 합니다 (Samba 사용하기 책에서 : "3 이상의 레벨은 개발자가 사용하고 엄청난 양의 암호 정보를 덤프합니다."lol!). 관련 행은 다음과 같습니다.

[2013/02/08 10:18:03, 3] smbd/error.c:error_packet_set(106) error packet at smbd/reply.c(514) cmd=117 (SMBtconX) NT_STATUS_INSUFF_SERVER_RESOURCES

거의 .mbs 메일 링리스트 아카이브 에서 개인 smb 연결에 대한 공유 제한이있는 것으로 확인 된 유사한 문제를보고하는 사람이 있다는 것을 발견했습니다. 서버에서 열린 공유를 나열하십시오.

smbstatus -S | grep <serverIP> | wc -l2048을 반환했습니다 . 매우 눈에.니다.

실제로 'IPC $'에 대한 smbstatus -S공개 된 수천 개의 항목 의 출력을 검사합니다 . IPC $의 Samba 문서 는 익명 공유 브라우징 및 "일부 다른 리소스"에 대한 액세스와 관련이 있다고 밝혔다. /etc/samba/smb.conf의 서버에서 호스트 거부를 설정했습니다.

[IPC$]
hosts deny = 0.0.0.0/0

지금 잘 작동합니다. 자, 여기에 뭔가가 미래에 가난한 영혼을 도울 수 있기를 바랍니다.

나는 사이트의 정신에서 질문을 할 것 같다 : 왜 smbd가 IPC $ 주식을 정리하지 않을까? 클라이언트 연결 당 하나가 아닌 공유에 대한 사용자 연결 당 하나의 IPC $를 설정하는 이유는 무엇입니까? 클라이언트 측에서 IPC $ 공유 생성을 비활성화 할 수 있습니까? 주당 최대 연결 수를 늘리는 방법이 있습니까 (이 경우에는 도움이되지 않았습니까)? 나는 문서에서 그것을 보지 못했다.


"무작위, 산발적으로", "간헐적으로 실패"메모리 할당 오류 - 당신은 않았다 확인 (물리적) 메모리 오류?
ckujau

1
IPC $ 공유는 실제로는 사용자 별 컨텍스트에서 액세스 할 수 있습니다 (MSC에서는 실제로 원격 프로 시저 호출 (RPC) 인터페이스이기 때문에). 즉, IPC $ 공유는 사용자에게 RPC를 호출 할 수 있도록 서버 서비스에 대해 인증 할 채널을 제공합니다. 당신이 그것을 필요로하지 않는다면 그것을 비활성화하는 것이 좋은 보안 관행입니다.
AlwaysLearning

삼바 문제 해결에 대한 자세한 예를 주셔서 감사합니다. 추상 오류 메시지는 악몽입니다.
mmv-ru 1

답변:


1

이것은 oldie이지만 답이 없다는 것을 고려할 때 IPC $와 Samba를 조사하고 있으므로 문서화를 위해 시험해 볼 것입니다.

smbd가 IPC $ 공유를 정리하지 않는 이유는 무엇입니까?

귀하의 질문에 대한 의견에서 위에서 언급했듯이 서비스는 서버 간의 원격 관리 및 통신에 사용되며 특히 Samba에서는 일부 브라우징 및 tcp / ip 목적으로 사용됩니다. 어떤 이유로 든 필요하지 않거나 작동하지 않는 경우 비활성화해도 안전합니다. [1]

클라이언트 연결 당 하나가 아닌 공유에 대한 사용자 연결 당 하나의 IPC $를 설정하는 이유는 무엇입니까?

사용자는 여러 클라이언트 연결을 가질 수 있기 때문입니다.

클라이언트 측에서 IPC $ 공유 생성을 비활성화 할 수 있습니까?

예, 아니오 IPC $ 공유 생성을 실제로 비활성화하는 것은 아니지만 Windows 클라이언트에서 액세스를 비활성화 할 수 있습니다. [2]

Windows Vista, Windows 7, Windows 8 및 Windows 10의 경우 다음 레지스트리 편집을 수행 할 수 있습니다.

  1. 시작을 클릭하고 검색 상자에“regedit”를 입력 한 다음 검색 결과에서 regedit.exe를 클릭하십시오. 사용자 계정 컨트롤 대화 상자가 나타납니다.
  2. UAC 프롬프트에 "예"라고 말하면 레지스트리 편집기가 열립니다.
  3. HKEY_LOCAL_MACHINE 지점을여십시오.
  4. SYSTEM 분기를 엽니 다.
  5. CurrentControlSet 분기를 엽니 다.
  6. 서비스 분기를여십시오.
  7. LanmanServer 분기를여십시오.
  8. 매개 변수 분기를 선택하십시오.
  9. 편집, 새로 만들기, "DWORD (32 비트) 값"을 선택하십시오.
  10. “AutoShareWks”를 입력하고 Enter를 누르십시오. (기본값은 0으로 두십시오.)
  11. 명령 프롬프트 (DOS 또는 터미널)를 사용하여 서비스를 재부팅하거나 다시 시작하십시오 :“net stop server”,“net start server”.

주당 최대 연결 수를 늘리는 방법이 있습니까 (이 경우에는 도움이되지 않았습니까)? 나는 문서에서 그것을 보지 못했다.

예 [3]. 공유 바로 아래 입력 :

[share]
   max connections = ##

여기서 XX는 연결 수입니다.

출처 :

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.