Tidak dapat mengakses folder berbagi samba pada Windows 7

2

Saya memiliki server yang menjalankan RHEL. Dalam jaringan ada tiga workstation: dua linux (RHEL) dan satu Windows 7. Saya menggunakan samba untuk berbagi perangkat penyimpanan (terhubung ke server) dengan workstation. Selama lebih dari setahun ini berjalan dengan baik. Namun, setelah memperbarui server kemarin, saya tidak dapat mengakses folder bersama di workstation Windows.

Secara khusus, Windows tidak mengenali kata sandi lagi. Ketika saya mengklik "Peta drive jaringan", masukkan path ke folder bersama, dan masukkan kredensial saya, Windows memberi tahu saya "Kata sandi jaringan yang ditentukan tidak benar". Saya dapat mengakses folder bersama di kedua workstation Linux.

Inilah yang telah saya periksa dan konfirmasi:

  • Memastikan bahwa tingkat otentikasi LAN Manager diatur ke "Kirim LM & NTLM - gunakan keamanan sesi NTLMv2 jika dinegosiasikan." [dari sini]
  • Memastikan bahwa saya dapat mengakses folder bersama di kedua workstation Linux
  • Membuat folder bersama baru dan dapat mengaksesnya juga di kedua workstation Linux
  • Memastikan bahwa saya dapat melakukan ping server dari workstation Windows saya
  • Memastikan bahwa tanggal dan waktu sudah benar pada semua mesin
  • Sudah mencoba me-reboot semuanya (dan berharap masalah itu hilang)

Perilaku yang diharapkan: Saya ingin Windows mengakses folder bersama

Apa yang tidak terjadi: Windows tidak dapat mengakses folder bersama

Saya ingin mengulangi bahwa folder itu dapat diakses sebelum pembaruan (dua hari yang lalu). Versi samba saya saat ini adalah 4.6.2 dan RHEL 7.4.

Berikut ini beberapa bagian dari file smb.conf (file lengkap di bawah):

#======================= Global Settings =====================================

[global]

# ----------------------- Network-Related Options -------------------------
    workgroup = MSHOME
    server string = Samba Server Version %v

# ----------------------- Standalone Server Options ------------------------
    security = user
    passdb backend = tdbsam

    [MBIAL_STORAGE]
    path = /run/media/MBIAL/MBIAL_STORAGE
    guest ok = yes
    browseable = yes
    writable = yes
    valid_users = MBIAL
    # write list = test
    # valid users = test

di mana MBIAL_STORAGE adalah nama folder yang dibagikan. Workstation Linux mengaksesnya menggunakan smb: // IP_ADDRESS / mbial_storage dengan MBIAL sebagai nama pengguna dan MSHOME sebagai workgroup. Saya telah mencoba memberikan Windows MSHOME \ MBIAL sebagai nama pengguna tetapi itu tidak berhasil.

Ini adalah file smb.conf lengkap:

# This is the main Samba configuration file. For detailed information about the
# options listed here, refer to the smb.conf(5) manual page. Samba has a huge
# number of configurable options, most of which are not shown in this example.
#
# The Official Samba 3.2.x HOWTO and Reference Guide contains step-by-step
# guides for installing, configuring, and using Samba:
# http://www.samba.org/samba/docs/Samba-HOWTO-Collection.pdf
#
# The Samba-3 by Example guide has working examples for smb.conf. This guide is
# generated daily: http://www.samba.org/samba/docs/Samba-Guide.pdf
#
# In this file, lines starting with a semicolon (;) or a hash (#) are
# comments and are ignored. This file uses hashes to denote commentary and
# semicolons for parts of the file you may wish to configure.
#
# Note: Run the "testparm" command after modifying this file to check for basic
# syntax errors.
#
#---------------
# Security-Enhanced Linux (SELinux) Notes:
#
# Turn the samba_domain_controller Boolean on to allow Samba to use the useradd
# and groupadd family of binaries. Run the following command as the root user to
# turn this Boolean on:
# setsebool -P samba_domain_controller on
#
# Turn the samba_enable_home_dirs Boolean on if you want to share home
# directories via Samba. Run the following command as the root user to turn this
# Boolean on:
# setsebool -P samba_enable_home_dirs on
#
# If you create a new directory, such as a new top-level directory, label it
# with samba_share_t so that SELinux allows Samba to read and write to it. Do
# not label system directories, such as /etc/ and /home/, with samba_share_t, as
# such directories should already have an SELinux label.
#
# Run the "ls -ldZ /path/to/directory" command to view the current SELinux
# label for a given directory.
#
# Set SELinux labels only on files and directories you have created. Use the
# chcon command to temporarily change a label:
# chcon -t samba_share_t /path/to/directory
#
# Changes made via chcon are lost when the file system is relabeled or commands
# such as restorecon are run.
#
# Use the samba_export_all_ro or samba_export_all_rw Boolean to share system
# directories. To share such directories and only allow read-only permissions:
# setsebool -P samba_export_all_ro on
# To share such directories and allow read and write permissions:
# setsebool -P samba_export_all_rw on
#
# To run scripts (preexec/root prexec/print command/...), copy them to the
# /var/lib/samba/scripts/ directory so that SELinux will allow smbd to run them.
# Note that if you move the scripts to /var/lib/samba/scripts/, they retain
# their existing SELinux labels, which may be labels that SELinux does not allow
# smbd to run. Copying the scripts will result in the correct SELinux labels.
# Run the "restorecon -R -v /var/lib/samba/scripts" command as the root user to
# apply the correct SELinux labels to these files.
#
#--------------
#
#======================= Global Settings =====================================

[global]

# ----------------------- Network-Related Options -------------------------
#
# workgroup = the Windows NT domain name or workgroup name, for example, MYGROUP.
#
# server string = the equivalent of the Windows NT Description field.
#
# netbios name = used to specify a server name that is not tied to the hostname.
#
# interfaces = used to configure Samba to listen on multiple network interfaces.
# If you have multiple interfaces, you can use the "interfaces =" option to
# configure which of those interfaces Samba listens on. Never omit the localhost
# interface (lo).
#
# hosts allow = the hosts allowed to connect. This option can also be used on a
# per-share basis.
#
# hosts deny = the hosts not allowed to connect. This option can also be used on
# a per-share basis.
#
# max protocol = used to define the supported protocol. The default is NT1. You
# can set it to SMB2 if you want experimental SMB2 support.
#
    workgroup = MSHOME
    server string = Samba Server Version %v

;   netbios name = MYSERVER

;   interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24 10.11.1.152 10.11.1.151 127.0.0.1
;   hosts allow = 127. 192.168.12. 192.168.13. 10.11.1.152 10.11.1.151

;   max protocol = SMB2

# --------------------------- Logging Options -----------------------------
#
# log file = specify where log files are written to and how they are split.
#
# max log size = specify the maximum size log files are allowed to reach. Log
# files are rotated when they reach the size specified with "max log size".
#

    # log files split per-machine:
    log file = /var/log/samba/log.%m
    # maximum size of 50KB per log file, then rotate:
    max log size = 50
    debuglevel = 7
# ----------------------- Standalone Server Options ------------------------
#
# security = the mode Samba runs in. This can be set to user, share
# (deprecated), or server (deprecated).
#
# passdb backend = the backend used to store user information in. New
# installations should use either tdbsam or ldapsam. No additional configuration
# is required for tdbsam. The "smbpasswd" utility is available for backwards
# compatibility.
#

    security = user
    passdb backend = tdbsam


# ----------------------- Domain Members Options ------------------------
#
# security = must be set to domain or ads.
#
# passdb backend = the backend used to store user information in. New
# installations should use either tdbsam or ldapsam. No additional configuration
# is required for tdbsam. The "smbpasswd" utility is available for backwards
# compatibility.
#
# realm = only use the realm option when the "security = ads" option is set.
# The realm option specifies the Active Directory realm the host is a part of.
#
# password server = only use this option when the "security = server"
# option is set, or if you cannot use DNS to locate a Domain Controller. The
# argument list can include My_PDC_Name, [My_BDC_Name], and [My_Next_BDC_Name]:
#
# password server = My_PDC_Name [My_BDC_Name] [My_Next_BDC_Name]
#
# Use "password server = *" to automatically locate Domain Controllers.

;   security = domain
;   passdb backend = tdbsam
;   realm = MY_REALM

;   password server = <NT-Server-Name>

# ----------------------- Domain Controller Options ------------------------
#
# security = must be set to user for domain controllers.
#
# passdb backend = the backend used to store user information in. New
# installations should use either tdbsam or ldapsam. No additional configuration
# is required for tdbsam. The "smbpasswd" utility is available for backwards
# compatibility.
#
# domain master = specifies Samba to be the Domain Master Browser, allowing
# Samba to collate browse lists between subnets. Do not use the "domain master"
# option if you already have a Windows NT domain controller performing this task.
#
# domain logons = allows Samba to provide a network logon service for Windows
# workstations.
#
# logon script = specifies a script to run at login time on the client. These
# scripts must be provided in a share named NETLOGON.
#
# logon path = specifies (with a UNC path) where user profiles are stored.
#
#
;   security = user
;   passdb backend = tdbsam

;   domain master = yes
;   domain logons = yes

    # the following login script name is determined by the machine name
    # (%m):
;   logon script = %m.bat
    # the following login script name is determined by the UNIX user used:
;   logon script = %u.bat
;   logon path = \\%L\Profiles\%u
    # use an empty path to disable profile support:
;   logon path =

    # various scripts can be used on a domain controller or a stand-alone
    # machine to add or delete corresponding UNIX accounts:

;   add user script = /usr/sbin/useradd "%u" -n -g users
;   add group script = /usr/sbin/groupadd "%g"
;   add machine script = /usr/sbin/useradd -n -c "Workstation (%u)" -M -d /nohome -s /bin/false "%u"
;   delete user script = /usr/sbin/userdel "%u"
;   delete user from group script = /usr/sbin/userdel "%u" "%g"
;   delete group script = /usr/sbin/groupdel "%g"


# ----------------------- Browser Control Options ----------------------------
#
# local master = when set to no, Samba does not become the master browser on
# your network. When set to yes, normal election rules apply.
#
# os level = determines the precedence the server has in master browser
# elections. The default value should be reasonable.
#
# preferred master = when set to yes, Samba forces a local browser election at
# start up (and gives itself a slightly higher chance of winning the election).
#
;   local master = no
;   os level = 33
;   preferred master = yes

#----------------------------- Name Resolution -------------------------------
#
# This section details the support for the Windows Internet Name Service (WINS).
#
# Note: Samba can be either a WINS server or a WINS client, but not both.
#
# wins support = when set to yes, the NMBD component of Samba enables its WINS
# server.
#
# wins server = tells the NMBD component of Samba to be a WINS client.
#
# wins proxy = when set to yes, Samba answers name resolution queries on behalf
# of a non WINS capable client. For this to work, there must be at least one
# WINS server on the network. The default is no.
#
# dns proxy = when set to yes, Samba attempts to resolve NetBIOS names via DNS
# nslookups.

;   wins support = yes
;   wins server = w.x.y.z
;   wins proxy = yes

;   dns proxy = yes

# --------------------------- Printing Options -----------------------------
#
# The options in this section allow you to configure a non-default printing
# system.
#
# load printers = when set you yes, the list of printers is automatically
# loaded, rather than setting them up individually.
#
# cups options = allows you to pass options to the CUPS library. Setting this
# option to raw, for example, allows you to use drivers on your Windows clients.
#
# printcap name = used to specify an alternative printcap file.
#

    load printers = no
    cups options = raw

;   printcap name = /etc/printcap
    # obtain a list of printers automatically on UNIX System V systems:
;   printcap name = lpstat
;   printing = cups

# --------------------------- File System Options ---------------------------
#
# The options in this section can be un-commented if the file system supports
# extended attributes, and those attributes are enabled (usually via the
# "user_xattr" mount option). These options allow the administrator to specify
# that DOS attributes are stored in extended attributes and also make sure that
# Samba does not change the permission bits.
#
# Note: These options can be used on a per-share basis. Setting them globally
# (in the [global] section) makes them the default for all shares.

;   map archive = no
;   map hidden = no
;   map read only = no
;   map system = no
;   store dos attributes = yes


#============================ Share Definitions ==============================

[homes]
    comment = Home Directories
    browseable = no
    writable = yes
;   valid users = %S
;   valid users = MYDOMAIN\%S

[printers]
    comment = All Printers
    path = /var/spool/samba
    browseable = yes
    guest ok = no
    writable = yes
    printable = yes

# Un-comment the following and create the netlogon directory for Domain Logons:
;   [netlogon]
;   comment = Network Logon Service
;   path = /var/lib/samba/netlogon
;   guest ok = yes
;   writable = yes
;   share modes = yes


# Un-comment the following to provide a specific roving profile share.
# The default is to use the user's home directory:
;   [Profiles]
;   path = /var/lib/samba/profiles
;   browseable = yes
;   guest ok = yes

    [MBIAL_STORAGE]
    path = /run/media/MBIAL/MBIAL_STORAGE
    guest ok = yes
    browseable = yes
    writable = yes
    valid_users = MBIAL
    # write list = test
    # valid users = test

Akan sangat menghargai wawasan tentang masalah ini. Saya berharap ini adalah hal yang sangat sepele dan bodoh yang saya abaikan!

Pravesh Parekh
sumber
Saya kira Anda tidak mencoba titik pemulihan, atau mencoba menghapus pembaruan terbaru dalam seminggu terakhir, atau memulihkan gambar sistem? Itu akan menjadi hal pertama yang harus dicoba. Saya berasumsi samba Anda belum berubah dalam beberapa bulan terakhir (atau sejak Anda mem-boot ulang Windows yang terakhir?) ... Juga, apakah samba Anda dibagikan di jaringan publik atau rumah dengan Win7? Atau apakah Win7 mengakses saham melalui jaringan internal atau melalui internet? Oh ... Anda juga menjalankan selinux? Ug ... itu bisa memperumit masalah yang
kuharapkan
@Astara Halo, sebenarnya saya tidak pernah memperbarui workstation Windows saya. Hanya server yang diperbarui. Jadi tidak ada pembaruan untuk dihapus. Memang, konfigurasi samba belum berubah sejak tahun lalu dan Windows WS reboot hanya setelah masalah dimulai. Jaringan berbagi samba ditetapkan sebagai rumah di workstation Windows.
Pravesh Parekh
Halo lagi, ini benar-benar gila tetapi saya mengedit tingkat otentikasi LAN Manager untuk "Kirim respons NTLMv2 saja" dan saya dapat mengakses folder sekarang. Mengaturnya kembali ke "Kirim LM & NTLM - gunakan keamanan sesi NTLMv2 jika dinegosiasikan." membuat folder tidak dapat diakses. Apakah ini mencerminkan beberapa perubahan dalam cara kerja samba sekarang? Atau apakah itu berarti ada sesuatu yang salah dengan konfigurasi samba saya?
Pravesh Parekh
1
Saya melihat jawaban yang sama di sini sekarang: superuser.com/a/1129426 (tidak terjawab sebelumnya).
Pravesh Parekh

Jawaban:

2

Solusi untuk poster adalah dengan mengubah level otentikasi LAN Manager Send NTLMv2 response onlydari Send LM & NTLM - use NTLMv2 session security if negotiated.

Rupanya Samba salah mengatur negosiasi keamanan sesi dengan Windows, jadi mereka tidak bisa menyetujui algoritma untuk kata sandi. Begitu poster itu mendikte metode keamanan, semuanya berjalan baik.

Mengenai mengapa hal ini terjadi - jawaban terbaik yang dapat saya berikan adalah bahwa hal itu disebabkan oleh beberapa ketidakcocokan yang tidak diketahui antara implementasi Linux dan Windows pada protokol SMB


[Jawaban lama]

Coba ini pada klien W7:

Di Editor Kebijakan Grup Lokal, buka:

Kebijakan Komputer Lokal-> Konfigurasi Komputer-> Pengaturan Windows-> Pengaturan Keamanan-> Kebijakan Lokal-> Opsi Keamanan

Temukan kebijakan bernama Microsoft network client: Digitally sign communications (always).

Jika ini Diaktifkan, ubah ke Dinonaktifkan. Pastikan dan mulai ulang komputer Anda agar perubahan diterapkan, karena menekan Terapkan di Editor Kebijakan tidak cukup.

Sebagai catatan tambahan, saya menggunakan pengaturan berikut ini terakhir kali saya mengeksternalisasi share Samba. Cobalah, dan jika mereka memecahkan masalah maka modifikasi mereka satu per satu untuk Anda sampai Anda menemukan masalah:

path = /my/share/path
available = yes
browsable = yes
public = yes
read only = no
writable = yes
harrymc
sumber
Hai, terima kasih atas jawabannya. Saya memeriksa polis tetapi sudah dinonaktifkan. Mengubah tingkat otentikasi Manajer LAN ke "Kirim hanya respons NTLMv2" dari "Kirim LM & NTLM - gunakan keamanan sesi NTLMv2 jika dinegosiasikan." tampaknya menyelesaikan masalah. Apakah Anda punya saran mengapa?
Pravesh Parekh
1
Lihat tautan ini . Rupanya Samba Anda menggunakan metode LAN Manager yang ketinggalan zaman dengan algoritma hash LM yang lemah untuk kata sandi. Alasannya mungkin standar yang buruk di smb.conf .
harrymc
Maafkan kenaifan saya tetapi apa yang saya pahami adalah bahwa hanya menggunakan NTLMv2 lebih baik dan opsi yang disarankan. Jadi itu berarti bahwa setelah samba saya diperbarui (bersama dengan RHEL), itu telah berhenti menggunakan metode hash LM yang lebih tua dan lebih lemah untuk kata sandi? Apakah itu benar? Maka saya tidak perlu melakukan apa-apa lagi, saya kira? Saya diberikan untuk memahami bahwa klien lanman auth dan lanman auth diatur ke tidak secara default dan klien NTLMv2 auth diatur ke ya secara default. Saya tidak melihat entri ini di file conf saya jadi saya kira defaultnya sedang diterapkan?
Pravesh Parekh
1
Komentar saya sebelumnya terlalu tergesa-gesa ditulis. NTLMv2 lebih baik, tetapi ternyata Samba Anda salah mengatur negosiasi keamanan sesi dengan Windows, jadi tidak dapat menyetujui algoritma untuk kata sandi. Setelah Anda menentukan metode keamanan, semuanya berjalan baik. Mengapa? Jawaban terbaik adalah beberapa ketidakcocokan yang tidak diketahui antara implementasi protokol Linux / Windows.
harrymc
Baiklah Terima kasih banyak telah membantu saya. Bisakah Anda memasukkan ini ke dalam jawaban Anda sehingga saya bisa melanjutkan dan menerimanya? Terima kasih lagi
Pravesh Parekh