web-dev-qa-db-fra.com

Montage des cifs: "Opération non prise en charge"

Contrairement à la question similaire , je ne peux même pas me connecter avec smbclient.

Le partage samba fonctionne bien dans Windows et fonctionne automatiquement, mais sous Linux, je ne peux pas le monter du tout et le message d'erreur est au mieux crypté. Voici mon samba.conf:

[global]
    dos charset = CP437
    netbios name = REDACTED
    server string = Lab
    server role = standalone server
    map to guest = Bad User
    obey pam restrictions = Yes
    smb passwd file = /var/etc/private/smbpasswd
    private dir = /var/etc/private
    max log size = 51200
    server min protocol = SMB2
    time server = Yes
    deadtime = 15
    max open files = 11070
    hostname lookups = Yes
    load printers = No
    printcap name = /dev/null
    disable spoolss = Yes
    dns proxy = No
    pid directory = /var/run/samba
    panic action = /usr/local/libexec/samba/samba-backtrace
    idmap config * : backend = tdb
    acl allow execute always = Yes
    create mask = 0666
    directory mask = 0777
    directory name cache size = 0
    kernel change notify = No
    map archive = No
    map readonly = no
    store dos attributes = Yes
    strict locking = No

[common]
    comment = Lab Common share
    path = /mnt/pool/common
    read only = No
    inherit acls = Yes
    hosts allow = XXX.XXX.XX.X/24, XXX.XX.XX.X/24 <-- redacted
    hide dot files = No
    veto files = /.snap/.windows/.zfs/
    vfs objects = zfsacl, streams_xattr, aio_pthread
    zfsacl:acesort = dontcare
    nfs4:chown = yes
    nfs4:acedup = merge
    nfs4:mode = special
    recycle:subdir_mode = 0700
    recycle:directory_mode = 0777
    recycle:touch = yes
    recycle:versions = yes
    recycle:keeptree = yes
    recycle:repository = .recycle/%U

Le message d'erreur est:

[as@localhost ~]$ Sudo mount -t cifs -o username=removed,password=removed  //server.ip.address/common /media/windowsshare/
mount error(95): Operation not supported

Un message parfaitement inutile.

Le dmesg activé pour le débogage:

[237179.795551] fs/cifs/cifsfs.c: Devname: //132.239.27.172/common flags: 0
[237179.795563] fs/cifs/connect.c: Username: lauria
[237179.795565] fs/cifs/connect.c: file mode: 0x1ed  dir mode: 0x1ed
[237179.795600] fs/cifs/connect.c: CIFS VFS: in cifs_mount as Xid: 44 with uid: 0
[237179.795600] fs/cifs/connect.c: UNC: \\132.239.27.172\common
[237179.795605] fs/cifs/connect.c: Socket created
[237179.795606] fs/cifs/connect.c: sndbuf 16384 rcvbuf 87380 rcvtimeo 0x1b58
[237179.795897] fs/cifs/fscache.c: cifs_fscache_get_client_cookie: (0xffff8803e0aa4800/0xffff880035d25580)
[237179.795898] fs/cifs/connect.c: Demultiplex PID: 25817
[237179.795902] fs/cifs/connect.c: CIFS VFS: in cifs_get_smb_ses as Xid: 45 with uid: 0
[237179.795903] fs/cifs/connect.c: Existing smb sess not found
[237179.795907] fs/cifs/cifssmb.c: Requesting extended security.
[237179.795910] fs/cifs/transport.c: For smb_command 114
[237179.795912] fs/cifs/transport.c: Sending smb: smb_len=78
[237179.801062] fs/cifs/connect.c: RFC1002 header 0x25
[237179.801067] fs/cifs/misc.c: checkSMB Length: 0x29, smb_buf_length: 0x25
[237179.801090] fs/cifs/transport.c: cifs_sync_mid_result: cmd=114 mid=1 state=4
[237179.801093] fs/cifs/cifssmb.c: Dialect: 65535
[237179.801094] fs/cifs/cifssmb.c: negprot rc -95
[237179.801097] fs/cifs/connect.c: CIFS VFS: leaving cifs_get_smb_ses (xid = 45) rc = -95
[237179.801100] fs/cifs/fscache.c: cifs_fscache_release_client_cookie: (0xffff8803e0aa4800/0xffff880035d25580)
[237179.801262] fs/cifs/connect.c: CIFS VFS: leaving cifs_mount (xid = 44) rc = -95
[237179.801263] CIFS VFS: cifs_mount failed w/return code = -95

J'ai essayé de nombreux -sec options --- elles échouent toutes, tout a le même message d'erreur. smbclient n'est pas non plus utile:

smbclient //132.239.27.172/common -U username%password
protocol negotiation failed: NT_STATUS_INVALID_NETWORK_RESPONSE

Comment cela fonctionne-t-il sur Windows mais pas du tout sur Linux?

17
paul

OK "je" compris - pour une raison quelconque, l'ajout de "vers = 3.0" le fait fonctionner. Je ne sais pas pourquoi il y avait des problèmes sans cela, ni pourquoi cela fonctionne. mais pour référence future si d'autres ont ce problème avec leurs configurations de freenas.

9
paul

Pour remplir les réponses de @Ken et @Paul: La version SMB doit être spécifiée lorsqu'elle est supérieure à v1:

mount -t cifs \
  -o username=USERNAME,vers=3.0 \
  //server/share \
  /mnt/point

Le client du noyau Linux cifs est inclus dans le noyau depuis la 2.5.42. Le protocole cifs (et les versions antérieures SMB dialectes)) est le protocole par défaut ("vers = 1.0") mais la prise en charge des nouveaux dialectes (SMB2.02, SMB2.1 et SMB3 et SMB3.02) peut être sélectionné en spécifiant "vers = 2.0" ou "vers = 2.1" ou "vers = 3.0" ou "vers = 3.02" sur le montage. - https://wiki.samba.org/index.php/ LinuxCIFSKernel

Pour smbclient, l'incantation est -m, --max-protocol=LEVEL:

smblcient -L server -U username -m SMB2

Je n'ai pas trouvé de liste des niveaux autorisés pour smbclient. Selon Marc Muehlfeld dans ce fil les versions utilisées par Windows sont:

  • SMB 2.0 a été introduit par Vista/2008
  • SMB 2.1 par Win7/2008R2
  • SMB 2.2 aka 3.0 par Win8/2012
  • SMB 3.02 par 8.1/2012R2

Il existe plusieurs différents messages d'erreur mount qui peuvent être retracés au niveau de protocole non concordant. Une liste non exhaustive (n'hésitez pas à modifier la réponse et à en ajouter plus):

mount error(13): Permission denied
mount error(95): Operation not supported
mount error(121): Remote I/O error

Enfin, j'ai vu quelques commentaires qui indiquent les conseils souvent cités pour utiliser l'option sec=ntlmv2 et similaires ne devraient plus être suivis. Donc probablement une bonne idée de ne pas mélanger et faire correspondre sec et vers.

14
matt wilkie

Je lutte contre cela depuis plus d'un mois maintenant. Le client étant Xenserver 6.2 et 6.5, ne peut pas monter le répertoire ISO sur CIFS.

Le vers = 3.0 a finalement fonctionné.

Où avez-vous trouvé cette option ??!

Mon domaine est Windows 2012 R2. Je n'ai pas abaissé les exigences d'authentification dans le registre - elles sont toujours par défaut (j'étais sur le point de l'ouvrir grand quand j'ai trouvé cela).

Je n'avais pas du tout besoin de spécifier un paramètre sec =.

I DID dois spécifier un domaine. J'ai spécifié le domaine en majuscules - peut-être pas nécessaire cependant.

Ma commande suit.

mount -t cifs "//192.168.92.25/shared" -o username=administrator,password=<your_password>,domain=<YOUR DOMAIN IN CAPS>,vers=3\.0 /root/tmp

Maintenant, pour comprendre comment ajouter des options à l'authentification.

Merci Paul, qui que tu sois.

5
Ken Finch

FreeNas vous permet de configurer des partages plus sécurisés. Si vous autorisez les protocoles de sécurité Windows les plus bas (Windows NT 4.0), cela fonctionnera avec Samba. Si vous l'avez défini, dites Windows XP et ci-dessus, vous réapprenez le vers = 3.0 comme je l'ai découvert après avoir lutté pendant 40 minutes pour obtenir la connexion FreeNas avec CentOS 7. Le problème est que les clients (et l'interface graphique) devrait vérifier la version la plus élevée. Au lieu de cela, elle va de la version la plus basse disponible. Cela peut avoir du sens une fois, mais beaucoup de choses ont changé. Je pense qu'il est particulièrement ennuyeux que dans Gnome vous ne puissiez pas ajouter d'options, CIFS ou pour spécifier les versions des protocoles de sécurité. Je suppose qu'ils pensent que ces personnes sont en ligne de commande ou rien, mais cela empêche Linux d'être utilisé plus largement par les bureaux. Ce qui est vraiment dommage.

0
Jonah Libster