Linux 클라이언트는 Samba 공유에 로그인할 수 없지만 Windows 및 Mac에서는 로그인할 수 있습니다(Active Directory 환경).

Linux 클라이언트는 Samba 공유에 로그인할 수 없지만 Windows 및 Mac에서는 로그인할 수 있습니다(Active Directory 환경).

설정

섬기는 사람

  • 센토스 7.6
  • 삼바 4.8
  • 윙바인더
  • SSD
  • 케르베로스

이 컴퓨터는 회사 Active Directory에 구성원 서버로 연결되어 있지만 도메인 컨트롤러는 아닙니다. (저는 RadHat 설명서에 따라 컴퓨터를 도메인에 가입시키고 smb를 구성했습니다.)

이것도 추가함

net ads keytab add cifs

웹 광고 테스트 참여 및 상태를 통해 긍정적인 결과를 얻었습니다.

  • Windows 클라이언트는 DOMAIN\사용자 이름 및 비밀번호 자격 증명을 사용하여 연결할 수 있습니다.
  • Mac OSX 클라이언트는 다음을 사용하여 연결할 수 있습니다.[이메일 보호됨]및 비밀번호 자격 증명(DOMAIN\username과 같은 다른 옵션은 허용되지 않음)
  • Linux 클라이언트가 mount.cifs를 사용하여 연결할 수 없습니다. 다음 옵션을 시도했습니다.
    • 사용자 이름 = 사용자 이름, 도메인 = 도메인
    • 사용자 이름=사용자 이름,도메인=FULL.DOMAIN.TLD(대문자 여부)
    • 사용자 이름=도메인\사용자 이름
    • 사용자 이름=FULL.DOMAIN.TLD\사용자 이름
    • 사용자 이름=사용자 이름@DOMAIN
    • ...등

이번 테스트에 사용된 클라이언트는

  • 윈도우 10
  • 센토스 7
  • 데비안 9
  • 우분투 18
  • OSX 모하비 사막

일부 클라이언트는 Active Directory의 일부이고 일부는 그렇지 않습니다. 어쨌든 결과는 동일하며 Windows와 OSX만 공유를 마운트할 수 있습니다.

나는 또한 모든 가능성을 덜 사용하여 sec= 및 vers=를 사용했으며, files_mode 및 dir_mode를 777 또는 644/755로 설정했지만 성공하지 못했습니다. 또한 자격 증명 파일과 fstab의 줄을 사용해 보았습니다.

나는 항상 다음을 받습니다:설치 오류(13): 권한이 거부되었습니다.

흥미롭게도 서버에 설정된 로컬 smbpasswd 계정을 사용하여 공유를 마운트할 수 있습니다. 하지만 이는 분명히 제가 원하는 것이 아닙니다.

또 다른 흥미로운 점은 smb://user@를 사용하여 XFCE에서 Thunar의 서버에 연결할 수 있다는 것입니다. 이것은 smbclient에서도 작동합니다.

이것은 내 conf 파일입니다

smb 구성 파일

[global]
 workgroup = DOMAIN
 security = ads
 client signing = yes
 client use spnego = yes
 realm = DOMAIN.DOM.CH
 server role = MEMBER SERVER
 passdb backend = tdbsam
 kerberos method = secrets and keytab
 idmap config * : range = 10000-99999999
 idmap config * : backend = tdb
 wins server = xx.xx.xx.xx
 winbind use default domain = yes

 load printers = no
 disable spoolss = yes
 show add printer wizard = No

 local master = No
 dns proxy = No
 logging = file
 log file = /var/log/samba/smb-%I.log
 log level = 4
 max log size = 10000
 follow symlinks = yes

 min protocol = SMB2
 client min protocol = SMB2

 debug hires timestamp = No
 acl group control = yes
 delete readonly = yes
 acl allow execute always = yes
 dos filemode = Yes
 inherit permissions = Yes
 store dos attributes = Yes

 vfs objects = acl_xattr

[MyShare]
 inherit acls = Yes
 path = /srv/samba/partage
 read only = no
 admin users = @"DOMAIN\GROUP-AdminsU" "DOMAIN\user"
 vfs objects = acl_xattr

krb5.conf

# Configuration snippets may be placed in this directory as well
includedir /etc/krb5.conf.d/


includedir /var/lib/sss/pubconf/krb5.include.d/
[logging]
 default = FILE:/var/log/krb5libs.log
 kdc = FILE:/var/log/krb5kdc.log
 admin_server = FILE:/var/log/kadmind.log


[libdefaults]
 dns_lookup_realm = false
 dns_lookup_kdc = true
 ticket_lifetime = 24h
 renew_lifetime = 7d
 forwardable = true
 rdns = false
 default_ccache_name = KEYRING:persistent:%{uid}


default_realm = DOMAIN.DOM.CH
[realms]
 DOMAIN.DOM.CH = {
  kdc = domain.dom.ch
  admin_server = domain.dom.ch
 }


[domain_realm]
 domain.dom.ch = DOMAIN.DOM.CH
 .domain.dom.ch = DOMAIN.DOM.CH

SSD 구성 파일

[sssd]
domains = domain.dom.ch
config_file_version = 2
services = nss, pam
default_domain_suffix = DOMAIN.DOM.CH

[domain/domain.dom.ch]
ad_domain = domain.dom.ch
krb5_realm = DOMAIN.DOM.CH
realmd_tags = manages-system joined-with-samba 
cache_credentials = True
id_provider = ad
krb5_store_password_if_offline = True
default_shell = /bin/bash
ldap_id_mapping = True
use_fully_qualified_names = True
fallback_homedir = /home/%u@%d
access_provider = ad

삼바 로그 레벨 10을 확인했는데 악용 가능한 오류는 다음과 같습니다. 좀 더 명확하게 하기 위해 로그를 모듈별로 분할했습니다.

권한 부여:

 Got user=[user] domain=[DOMAIN] workstation=[] len1=0 len2=166
 Mapping user [DOMAIN]\[user] from workstation []
 ...
 check_ntlm_password:  Checking password for unmapped user [DOMAIN]\[user]@[] with the new password interface
 check_ntlm_password:  mapped user is: [DOMAIN]\[user]@[]
 check_ntlm_password: auth_context challenge created by random
 challenge is:
 Check auth for: [user]
 auth_check_ntlm_password: guest had nothing to say
 Check auth for: [user]
 check_samstrict_security: DOMAIN is not one of my local names (ROLE_DOMAIN_MEMBER)
 auth_check_ntlm_password: sam had nothing to say
 Check auth for: [user]
 check_winbind_security: wbcAuthenticateUserEx failed: WBC_ERR_WINBIND_NOT_AVAILABLE
 auth_check_ntlm_password: winbind authentication for user [user] FAILED with error NT_STATUS_LOGON_FAILURE, authoritative=1
 check_ntlm_password:  Authentication for user [user] -> [user] FAILED with error NT_STATUS_LOGON_FAILURE, authoritative=1
 ntlmssp_server_auth_send: Checking NTLMSSP password for DOMAIN\user failed: NT_STATUS_LOGON_FAILURE
 gensec_update_done: ntlmssp[0x55ad6e4aba70]: NT_STATUS_LOGON_FAILURE tevent_req[0x55ad6e4ab680/../auth/ntlmssp/ntlmssp.c:181]: state[3] error[-7963671676338569107 (0x917B5ACDC000006D)]  state[struct gensec_ntlmssp_update_state (0x55ad6e4ab810)] timer[(nil)] finish[../auth/ntlmssp/ntlmssp.c:239]
 gensec_update_done: spnego[0x55ad6e4aaf00]: NT_STATUS_LOGON_FAILURE tevent_req[0x55ad6e4ac860/../auth/gensec/spnego.c:1601]: state[3] error[-7963671676338569107 (0x917B5ACDC000006D)]  state[struct gensec_spnego_update_state (0x55ad6e4ac9f0)] timer[(nil)] finish[../auth/gensec/spnego.c:2065]

여기서 이상한 점은 "workstation=[]"입니다. Windows 및 Mac 클라이언트의 경우 항상 괄호 안에 워크스테이션 이름을 포함하지만 Linux 클라이언트의 경우에는 아무것도 포함하지 않습니다.

인증_감사:

 Auth: [SMB2,(null)] user [DOMAIN]\[user] at [Wed, 17 Apr 2019 07:54:56.191467 CEST] with [NTLMv2] status [NT_STATUS_LOGON_FAILURE] workstation [] remote host [ipv4:xxx.xxx.xxx.xxx:57124] mapped to [DOMAIN]\[user]. local host [ipv4:xxx.xxx.xxx.xxx:445]

중소기업 2:

 Selected protocol SMB3_11
 smbd_smb2_request_done_ex: idx[1] status[NT_STATUS_OK] body[64] dyn[yes:156] at ../source3/smbd/smb2_negprot.c:662
 smbd_smb2_request idx[1] of 5 vectors
 smbd_smb2_request_dispatch: opcode[SMB2_OP_SESSSETUP] mid = 1
 smbd_smb2_request_done_ex: idx[1] status[NT_STATUS_MORE_PROCESSING_REQUIRED] body[8] dyn[yes:194] at ../source3/smbd/smb2_sesssetup.c:174
 smbd_smb2_request idx[1] of 5 vectors
 smbd_smb2_request_dispatch: opcode[SMB2_OP_SESSSETUP] mid = 2
 smbd_smb2_request_error_ex: smbd_smb2_request_error_ex: idx[1] status[NT_STATUS_LOGON_FAILURE] || at ../source3/smbd/smb2_sesssetup.c:137
 smbd_smb2_request_done_ex: idx[1] status[NT_STATUS_LOGON_FAILURE] body[8] dyn[yes:1] at ../source3/smbd/smb2_server.c:3219
 smbd_server_connection_terminate_ex: conn[ipv4:xxx.xxx.xxx.xxx:57054] reason[NT_STATUS_END_OF_FILE] at ../source3/smbd/smb2_server.c:3986

내 Linux 클라이언트에서 내 ActiveDirectory 자격 증명을 사용하여 SSH를 통해 서버에 연결할 수 있습니다.

나는 정말로 무엇을 해야할지 모르겠습니다.

업데이트 1

이 공유에 연결할 때 도메인 컨트롤러는 내 로그인 요청을 받고 암호를 수락합니다. 그렇다면 문제는 이쪽에 있지 않습니다. 또한 마운트 옵션에 uid=(id from my account,0,root)를 추가하려고 시도했지만 성공하지 못했습니다.

업데이트 2

kinit를 사용하여 Kerberos 티켓을 생성하고 sec=krb5마운트 옵션을 추가한 후에 이 공유를 마운트할 수 있습니다. 없는 것보다는 나은데 왜 그럴까요? !

업데이트 3

좋아, 모든 문서를 읽은 후에 Active Directory 및 Kerberos에 대해 인증하는 유일한 솔루션은 먼저 kinit를 사용하여 krb 티켓을 만든 다음 다음을 사용하여 공유를 마운트하는 것 같습니다.-o 초=krb5옵션. 저는 솔직히 왜 Linux가 이것을 하고 OSX는 하지 않는지 이해하지 못합니다. 하지만 어쨌든... 지금 당장은 다른 해결책이 없습니다...

답변1

SMB 공유를 마운트하는 데 도움이 될 수 있는 이 기사를 찾았습니다.

https://askubuntu.com/questions/1026316/cifs-mounts-and-kerberos-permissions-on-access-or-best-practice

저는 이 문제가 Kerberos와 관련이 있다고 생각하며 Sebastian Stark는 제가 말하려는 내용을 잘 설명했습니다.

관련 정보