Как в линукс подключиться к сетевой папке windows

В этой статье мы рассмотрим, как в Linux смонтировать общую сетевую папку, расположенную на хосте Windows. В Windows для доступа к общим сетевым папкам используется протокол SMB (Server Message Block), который ранее назывался CIFS (Сommon Internet File System). В Linux для доступа к сетевым папкам Windows по протоколу SMB можно использовать клиент cifs-utils или Samba.

    Содержание:

  • Смонтировать сетевую папку в Linux с помощью cifs-util
  • Автоматическое монтирование сетевой папки в Linux
  • Linux: подключиться к сетевой папке с помощью клиента samba

Совет. Для доступа к сетевым папкам по SMB/CIFS используется порт TCP/445. Для разрешения имени используются порты UDP 137, 138 и TCP 139. Если эти порты закрыты, вы сможете подключиться к сетевой папке Windows только по IP адресу.

Смонтировать сетевую папку в Linux с помощью cifs-util

Вы можете смонтировать сетевую папку, находящуюся на Windows хосте, с помощью утилит из пакета cifs-util. Для установки пакета выполните команду:

  • В Ubuntu/Debian: $ sudo apt-get install cifs-utils
  • В CentOS/Oracle/RHEL: $ sudo dnf install cifs-utils

Создайте точку монтирования:

$ sudo mkdir /mnt/share

Теперь вы можете смонтировать сетевую папку с компьютера Windows под пользователем User03с помощью команды:

$ sudo mount.cifs //192.168.31.33/backup /mnt/share -o user=User03

Укажите пароль пользователя Windows для подключения к сетевой папке.

mount.cifs подключить сетевую папку smb в linux

При подключении сетевой SMB папки можно задать дополнительные параметры:

$ sudo mount -t cifs -o username=User03,password=PasswOrd1,uid=1000,iocharset=utf8 //192.168.31.33/backup /mnt/share

  • //192.168.31.33/backup – сетевая папка Windows
  • /mnt/share – точка монтирования
  • -t cifs – указать файловую систему для монтирования
  • -o опции монтирования (эту опцию можно использовать только с правами root, поэтому в команде используется sudo)
  • username=User03,password=PasswOrd1 – имя и пароль пользователя Windows, у которого есть права доступа к сетевой папке. Можно указать имя пользователя guest, если разрешен анонимный доступ к сетевой папке
  • iocharset=utf8 – включить поддержку кодировки UTF8 для отображения имен файлов
  • uid=1000 – использовать этого пользователя Linux в качестве владельца файлов в папке

команда mount cifs в linux

По умолчанию шары Windows монтируются в Linux с полными правами (0755). Если вы хотите изменить права по-умолчанию при монтировании, добавьте в команду опции:

dir_mode=0755,file_mode=0755

Если вы хотите использовать имя компьютера при подключении сетевого каталога Windows, добавьте в файл /etc/hosts строку:

IP_АДРЕС    ИМЯ_КОМПЬЮТЕРА

Чтобы не указывать учетные данные пользователя Windows в команде монтирования сетевой папки, их можно сохранить в файле.

Например:

$ mcedit ~/.windowscredentials

Добавьте в файл:

username=User03
password=PasswOrd1

Для подключения к папке под анонимным пользователем:

username=guest
password=

Если нужно указать учетную запись пользователя из определенного домена Active Directory, добавьте в файл третью строку:

domain = vmblog.ru

Измените права на файл:

$ chmod 600 ~/.windowscredentials

Теперь при подключении сетевой папки вместо явного указания имени пользователя и пароля можно указать путь к файлу:

$ sudo mount -t cifs -o credentials=/home/sysops/.windowscredentials,uid=1000,iocharset=utf8 //192.168.31.33/backup /mnt/share

Отмонтировать сетевую SMB папку:

$ sudo umount /mnt/share

Автоматическое монтирование сетевой папки в Linux

Можно настроить автоматическое монтирование сетевой папки Windows через /etc/fstab.

$ sudo mcedit /etc/fstab

Добавьте в файл следующую строку подключения SMB каталога:

//192.168.31.33/backup /mnt/share cifs user,rw,credentials=/home/sysops/.windowscredentials,iocharset=utf8,nofail,_netdev 0 0
  • rw – смонтировать SBM папку на чтение и запись
  • nofail – продолжить загрузку ОС если не удается смонтировать файловую систему
  • _netdev – указывает что подключается файловая система по сети. Linux не будет монтировать такие файловые системы пока на хосте не будет инициализирована сеть.

Вы можете указать версию протокола SMB, которую нужно использовать для подключения (версия SMB 1.0 считается небезопасной и отключена по-умолчанию в современных версиях Windows). Добавьте в конец строки с настройками подключения параметр vers=3.0.

//192.168.31.33/backup /mnt/share cifs user,rw,credentials=/home/sysops/.windowscredentials,iocharset=utf8,nofail,_netdev,vers=3.0 0 0

Если на стороне хоста Windows используется несовместимая (старая версия) SMB, при подключении появится ошибка:

mount error(112): Host is downилиmount error(95): Operation not supported

Чтобы сразу смонтировать сетевую папку, выполните:

$ mount -a

Linux: подключиться к сетевой папке с помощью клиента samba

Установите в Linux клиент samba:

  • В Ubuntu/Debian: $ sudo apt-get install smbclient
  • В CentOS/Oracle/RHEL: # dnf install smbclient

Для вывода всех SMB ресурсов в локальной сети:

$ smbtree -N

Вывести список доступных SMB папок на удаленном хосте Windows:

smbclient -L //192.168.31.33 -N

Если в Windows запрещен анонимный доступ, появится ошибка:

session setup failed: NT_STATUS_ACCESS_DENIED

В этом случае нужно указать учетную запись пользователя Windows, которую нужно использовать для подключения:

smbclient -L //192.168.31.33 -U User03

Если нужно использовать учетную запись пользователя домена, добавьте опцию –W:

smbclient -L //192.168.31.33 -U User03 –W Domain

smbclient вывести список общих папок на компьютере windows

Для интерактивного подключения к сетевой папке Windows используется команда:

smbclient //192.168.31.33/backup -U User03 -W Domain

или

smbclient //192.168.31.33/backup -U User03

Для анонимного доступа:

smbclient //192.168.31.33/backup -U Everyone

После успешного входа появится приглашение:

smb: \>

Вывести список файлов в сетевой папке:

dir

smbclient вывести список файлов в сетевой папке linux

Скачать файл из сетевой папки Windows:

get remotefile.txt /home/sysops/localfile.txt

Сохранить локальный файл из Linux в SMB каталог:

put /home/sysops/localfile.txt  remotefile.txt

Можно последовательно выполнить несколько команд smbclient:

$ smbclient //192.168.31.33/backup -U User03 -c "cd MyFolder; get arcive.zip /mnt/backup/archive.zip"

Полный список команд в smbclient можно вывести с помощью команды help. Команды smbclient схожи с командами ftp клиента.

При использовании команды smbclient может появиться ошибка:

Unable to initialize messaging contextsmbclient: Can't load /etc/samba/smb.conf - run testparm to debug it.

Чтобы исправить ошибку, создайте файл /etc/samba/smb.conf.

Если на хосте Windows отключен протокол SMB 1.0, то при подключении с помощью smbclient появится ошибка:

Reconnecting with SMB1 for workgroup listing.
protocol negotiation failed: NT_STATUS_CONNECTION_RESET
Unable to connect with SMB1 -- no workgroup available.

In the Windows operating system, there is a feature called file sharing. On one computer, you can set up windows-shared folder that will be accessible to all computers on the local network. This is done using the SMB protocol, which has several versions. In Linux, you can open and create shared folders using Samba.

The Samba server supports all versions of the SMB protocol. However, there are some compatibility issues. In this article, I will explain how to access a Windows Shared folder in Linux using popular desktop environments and the command line.

Table of Contents

  • Why It May Not Work?
  • Ensure that Everything is Set Up Correctly in Windows
  • Finding Shares in Linux Terminal
  • Open Shared Folder in KDE Dolphin
  • Open Share in GNOME Nautilus
  • Mounting a Shared Folder in the Terminal
  • Wrapping Up

Why It May Not Work?

In older versions of Linux distros and Windows 7 everything worked fine because they used the SMB1 protocol. However, there have been several changes recently. In 2017, the Wannacry virus emerged, which exploited vulnerabilities in the SMB1 protocol. As a result, modern versions of Windows have disabled support for SMB1 and now use SMB3 by default. Samba has also disabled SMB1 since version 4.11. However, SMB2 and SMB3 lack support for device discovery in the local network.

In general, this is no longer necessary because there is a network discovery protocol called Zeroconf. In Linux, its open-source implementation, Avahi, is used. Linux servers and NAS storage can publish themselves on the local network using this protocol. So that, there is no need to support it in SMB. However, Microsoft decided to use its own protocol called WS-Discovery, and that’s where the problems began.

At the time of writing this article, Linux system has issues with discovering shared folders in the local network. The Nautilus file manager in GNOME does not support WS-Discovery at all, and there are no production-ready terminal utilities for it either. You can track the current status of implementing WS-Discovery support in this GVFS issue. However, in 2020, the KDE team added support for this protocol in the Dolphin file manager using kdsoap-ws-discovery-client.

Later, a program for KDE called Smb4k appeared, which can discover network resources using Avahi and the WS-Discovery protocol, but it needs to be compiled with a special option. So that, in GNOME, you can only open a Windows shared folder by knowing the IP address of the computer where it is located. Whereas in KDE, it is a bit more convenient to do so.

Ensure that Everything is Set Up Correctly in Windows

Previously, it was enough to go to File Explorer and enable file sharing there. But it no longer works that way. First, you need to make your current network private in Windows. By default, only private networks are considered secure, and Windows machines can be discovered in them. To do this, open Settings -> Network & Internet -> Ethernet and select Network Profile Type -> Private Network:

If your current network is wireless, you should do the pretty same thing. Next, go back and select Advanced Sharing Settings. In this window, enable Network discovery and File and printer sharing:

Finally, you need to ensure that the firewall is configured correctly and allows SMB connections. To do this, go back to the main Settings menu, then open Privacy & Security -> Firewall & network protection. Click on Allow an app through the firewall:

Make sure that File and printer sharing and Network discovery are enabled for Private networks:

That’s it. Now you can go to your Linux machine.

Although there are no command-line tools for working with WS-Discovery, you can try to find devices with shared resources using Nmap. This program cannot search for resources like Avahi does, but it can help you find IP addresses with an open port 445. This port is used by SMB. To do this, you need to install the following packages (Ubuntu):

sudo apt install nmap smbclient

Or Fedora:

sudo dnf install nmap samba-client

Also, you need to find out the IP address range of your local network. You can take your IP address and mask and just replace the fourth digit with zero. For example:

ip -br a

The command for the search will look like this. Replace 192.168.124.0/24 with your local network address range and run it in the the terminal window with sudo privileges:

nmap -p 445 --open -n -Pn 192.168.124.0/24

The -p option specifies the port 445, -Pn option disables ICMP discovery and treats all IP addresses as alive, -n disables DNS hostname resolution. The command may take quite a while, but as a result, it will find hosts with open port 445 if such hosts exist in your local network:

This can’t be considered as normal network discovery, but it works. Now you can use smbclient to see which shared folders are on the server that you found. For example:

smbclient -L 192.168.124.63

The command will ask you to enter the share password. Usually, it is password for your Windows user, and then it will show all available shared folders:

Now let’s have a look at how to mount them.

To open a shared folder in KDE, you can use the Dolphin file manager. As I mentioned earlier, here you can see all available computers that have network drive on the local network. To do this, run Dolphin, then open Network, and then Shared Folders (SMB):

Click on one of the resources and enter the username and password to view the available folders:

This is what shared folders from Windows 11 look like. Here you can find windows files:

If network discovery does not work in your case, you can still enter the IP address of the resource in the text field at the top of the window and connect to it. For example, smb://192.168.124.63/

If you want to connect to a Windows shared folder in the GNOME graphical interface, you can use the Nautilus file manager. Open Other Locations and find at the bottom of the window the inscription Connect to Server and a field for entering an address.

There’s no point in opening the Windows Network item, because GVFS, which is used in GNOME for disk mounting, does not support the WS-Discovery protocol. To connect to a remote windows share located on a server with IP 192.168.124.63, enter this address and press the Connect button:

smb://192.168.124.63

In the next window, you need to enter a password and after that, you can view the files of the shared folder:

After this, you can browse your windows folders.

Additionally, you can use a shortcut on the left panel to access a remote share which is already mounted.

If you want to mount windows share in the terminal, you can use cifs-utils and the mount command. Firstly, install the cifs-utils package. The command for Ubuntu:

sudo apt install cifs-utils

In Fedora:

sudo dnf install cifs-utils

Now, you can execute the mount command specifying the cifs file system type and the username option. Note that you can’t mount the root of the cifs share, you need to add any folder in the path. For example, Users on 192.168.124.63:

sudo mount -t cifs -o username=losst //192.168.124.63/Users /mnt/

If you want to have write access to the windows share folder, you need to add the uid option with the identifier of your user. For the first user, it’s usually 1000:

sudo mount -t cifs -o username=losst,uid=1000 //192.168.124.63/Users /mnt/

You can find the identifier of the current user in the UID environment variable:

echo $UID

If you want to mount share automatically at system startup, you need to save the share username and password in a credentials file, for example, /etc/share/windows-credentials. For instance:

sudo mkdir -p /etc/share/

username=losst
password=password
domain=workgroup

And then add the following line to the /etc/fstab file:

//192.168.124.63/Users /mnt/share cifs credentials=/etc/share/windows-credentials,uid=1000,nofail 0 0

The nofail option is needed to allow your computer to boot even if the remote folder could not be mounted. After this, reload systemd settings:

sudo systemctl daemon-reload

Create the mount point directory:

sudo mkdir -p /mnt/share

You can check that everything is working using the following command:

sudo mount /mnt/share

If everything is ok, you could see contents of mounted share in the /mnt/share folder:

Wrapping Up

In this article, we looked at how to mount Windows network share in Linux using a graphical interface or in the terminal. Despite some difficulties, this can be used quite effectively. Do you know any other applications or scripts which can help with that? Share their names in the comments section below.

The article is distributed under Creative Commons ShareAlike 4.0 license. Link to the source is required.

Introduction

In this lab, we will explore the Linux smbclient command and its practical applications. The smbclient utility is a powerful tool that allows Linux systems to interact with Windows file shares (SMB/CIFS shares). SMB (Server Message Block) is a network protocol that Windows uses for file sharing, and smbclient allows Linux users to access these shares.

We will start by installing smbclient on our Ubuntu 22.04 system, learn the basic syntax of the command, and then demonstrate how to connect to Windows shares, navigate directories, and transfer files.

By the end of this lab, you will be able to:

  • Install and configure the smbclient utility
  • Connect to Windows shares from Linux
  • Navigate and list files on Windows shares
  • Transfer files between Linux and Windows systems

Linux Commands Cheat Sheet


Skills Graph

%%%%{init: {‘theme’:’neutral’}}%%%%
flowchart RL
linux((«Linux»)) -.-> linux/BasicSystemCommandsGroup([«Basic System Commands»])
linux((«Linux»)) -.-> linux/BasicFileOperationsGroup([«Basic File Operations»])
linux((«Linux»)) -.-> linux/FileandDirectoryManagementGroup([«File and Directory Management»])
linux((«Linux»)) -.-> linux/SystemInformationandMonitoringGroup([«System Information and Monitoring»])
linux((«Linux»)) -.-> linux/PackagesandSoftwaresGroup([«Packages and Softwares»])
linux/BasicSystemCommandsGroup -.-> linux/echo(«Text Display»)
linux/BasicSystemCommandsGroup -.-> linux/help(«Command Assistance»)
linux/BasicFileOperationsGroup -.-> linux/ls(«Content Listing»)
linux/BasicFileOperationsGroup -.-> linux/cp(«File Copying»)
linux/FileandDirectoryManagementGroup -.-> linux/cd(«Directory Changing»)
linux/FileandDirectoryManagementGroup -.-> linux/mkdir(«Directory Creating»)
linux/SystemInformationandMonitoringGroup -.-> linux/service(«Service Managing»)
linux/PackagesandSoftwaresGroup -.-> linux/apt(«Package Handling»)
subgraph Lab Skills
linux/echo -.-> lab-422922{{«Linux команда smbclient с примерами практического применения»}}
linux/help -.-> lab-422922{{«Linux команда smbclient с примерами практического применения»}}
linux/ls -.-> lab-422922{{«Linux команда smbclient с примерами практического применения»}}
linux/cp -.-> lab-422922{{«Linux команда smbclient с примерами практического применения»}}
linux/cd -.-> lab-422922{{«Linux команда smbclient с примерами практического применения»}}
linux/mkdir -.-> lab-422922{{«Linux команда smbclient с примерами практического применения»}}
linux/service -.-> lab-422922{{«Linux команда smbclient с примерами практического применения»}}
linux/apt -.-> lab-422922{{«Linux команда smbclient с примерами практического применения»}}
end

Installing smbclient on Ubuntu 22.04

The smbclient package is a command-line tool that enables Linux systems to interact with SMB/CIFS file shares commonly used in Windows environments. In this step, we’ll install this package on our Ubuntu system.

Let’s first update the package index to ensure we get the latest version:

sudo apt update

You should see output similar to this:

Hit:1 http://archive.ubuntu.com/ubuntu jammy InRelease
Get:2 http://security.ubuntu.com/ubuntu jammy-security InRelease [110 kB]
Get:3 http://archive.ubuntu.com/ubuntu jammy-updates InRelease [114 kB]
Get:4 http://archive.ubuntu.com/ubuntu jammy-backports InRelease [99.8 kB]
Fetched 324 kB in 1s (324 kB/s)
Reading package lists... Done

Now, let’s install the smbclient package:

sudo apt install -y smbclient

The output will look something like this:

Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
  libsmbclient
Suggested packages:
  samba-common
The following NEW packages will be installed:
  libsmbclient smbclient
0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Need to get 479 kB of archives.
After this operation, 1,711 kB of additional disk space will be used.
Get:1 http://archive.ubuntu.com/ubuntu jammy/main amd64 libsmbclient amd64 2:4.15.5+dfsg-1ubuntu2 [222 kB]
Get:2 http://archive.ubuntu.com/ubuntu jammy/main amd64 smbclient amd64 2:4.15.5+dfsg-1ubuntu2 [257 kB]
Fetched 479 kB in 0s (1,030 kB/s)
Selecting previously unselected package libsmbclient.
(Reading database ... 26536 files and directories currently installed.)
Preparing to unpack .../libsmbclient_2%3a4.15.5+dfsg-1ubuntu2_amd64.deb ...
Unpacking libsmbclient (2:4.15.5+dfsg-1ubuntu2) ...
Selecting previously unselected package smbclient.
Preparing to unpack .../smbclient_2%3a4.15.5+dfsg-1ubuntu2_amd64.deb ...
Unpacking smbclient (2:4.15.5+dfsg-1ubuntu2) ...
Setting up libsmbclient (2:4.15.5+dfsg-1ubuntu2) ...
Setting up smbclient (2:4.15.5+dfsg-1ubuntu2) ...
Processing triggers for man-db (2.10.2-1) ...
Processing triggers for libc-bin (2.35-0ubuntu3) ...

To verify that smbclient has been installed correctly, run:

smbclient --version

You should see output showing the version of smbclient that was installed:

Version 4.15.5-Ubuntu

Now that we have installed smbclient, we can start using it to interact with SMB/CIFS shares.

Understanding smbclient Basics

Now that we have installed smbclient, let’s understand its basic usage and syntax before connecting to actual SMB shares.

Command Syntax

The basic syntax for the smbclient command is:

smbclient //server/share -U username%password [options]

Where:

  • //server/share is the UNC (Universal Naming Convention) path to the SMB share
  • -U username%password specifies the username and password for authentication
  • [options] are additional parameters you can provide

Creating a Local Directory for Practice

Let’s create a directory where we can store files that we might want to transfer to or from SMB shares:

mkdir -p ~/project/smb-files

Let’s create a sample file in this directory that we can use later:

echo "This is a test file for SMB transfer" > ~/project/smb-files/test.txt

Exploring smbclient Help

To see all the available options for smbclient, use the help command:

smbclient --help

This will display a lengthy help text with all the available options. Here’s a snippet of what you might see:

Usage: smbclient [OPTION...] service <password>
  -M, --message=HOST                           Send message
  -I, --ip-address=IP                          Use this IP to connect to
  -E, --stderr                                 Write messages to stderr instead of stdout
  -L, --list=HOST                              Get a list of shares available on a host
  -T, --tar=<c|x>IXFvgbNan                     Command line tar
  -D, --directory=DIR                          Start from directory
...

Common smbclient Commands

When you’re connected to an SMB share with smbclient, you can use various commands to navigate and operate on files. Here are some common commands:

  • ls or dir: List files and directories
  • cd directory: Change to a different directory
  • get file [localfile]: Download a file from the share
  • put file [remotefile]: Upload a file to the share
  • mget files...: Download multiple files
  • mput files...: Upload multiple files
  • mkdir directory: Create a directory
  • rmdir directory: Remove a directory
  • rm file: Delete a file
  • help or ?: Display help
  • quit or exit: Exit smbclient

Now that we understand the basics of smbclient, in the next step, we’ll see how to connect to an actual SMB share.

Setting Up a Test SMB Environment

In a real-world scenario, you would connect to an actual Windows or Samba server. However, for this lab, we’ll simulate an SMB environment using a local Samba server. This approach allows us to practice smbclient commands without requiring access to an external server.

Installing Samba Server

First, let’s install the Samba server package:

sudo apt install -y samba

You should see output indicating the installation process:

Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
  attr python3-dnspython python3-gpg python3-ldb python3-markdown python3-pygments python3-samba samba-common samba-common-bin samba-dsdb-modules samba-libs samba-vfs-modules tdb-tools
Suggested packages:
  bind9 bind9utils ctdb ldb-tools ntp | chrony python-markdown-doc python-pygments-doc
The following NEW packages will be installed:
  attr python3-dnspython python3-gpg python3-ldb python3-markdown python3-pygments python3-samba samba samba-common samba-common-bin samba-dsdb-modules samba-libs samba-vfs-modules tdb-tools
0 upgraded, 14 newly installed, 0 to remove and 0 not upgraded.
Need to get 10.1 MB of archives.
After this operation, 51.3 MB of additional disk space will be used.
...

Now, let’s create a simple Samba share configuration. First, let’s back up the original configuration file:

sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.backup

Create a directory to share:

mkdir -p ~/project/samba-share

Let’s create a test file in this shared directory:

echo "This is a test file in our Samba share" > ~/project/samba-share/shared-test.txt

Now, let’s create a simplified Samba configuration:

sudo bash -c 'cat > /etc/samba/smb.conf << EOF
[global]
   workgroup = WORKGROUP
   server string = Samba Server
   log file = /var/log/samba/log.%m
   max log size = 50
   security = user
   map to guest = bad user

[testshare]
   path = /home/labex/project/samba-share
   browseable = yes
   read only = no
   guest ok = yes
   force user = labex
EOF'

Add the current user to Samba users and set a password for testing:

sudo smbpasswd -a labex

When prompted, enter a simple password like password (you’ll need to type it twice):

New SMB password:
Retype new SMB password:
Added user labex.

Restart the Samba service to apply the changes:

sudo service smbd restart

Now we have a local Samba share called testshare set up on our system. We can use smbclient to connect to it as if it were a remote Windows share.

Now that we have our test SMB environment set up, let’s connect to the share using smbclient.

Listing Available Shares

First, let’s list all available shares on our local machine:

smbclient -L localhost -U labex

When prompted, enter the password you set for the Samba user (e.g., password):

Enter WORKGROUP\labex's password:

You should see output similar to this:

        Sharename       Type      Comment
        ---------       ----      -------
        testshare       Disk
        IPC$            IPC       IPC Service (Samba Server)
Reconnecting with SMB1 for workgroup listing.

        Server               Comment
        ---------            -------
        UBUNTU               Samba Server

        Workgroup            Master
        ---------            -------
        WORKGROUP            UBUNTU

This shows our newly created testshare share is available.

Now, let’s connect to the testshare share:

smbclient //localhost/testshare -U labex

Enter the password when prompted:

Enter WORKGROUP\labex's password:

Upon successful connection, you’ll see the smbclient prompt:

Try "help" to get a list of possible commands.
smb: \>

Navigating and Listing Files

Now that we’re connected to the share, let’s explore some basic commands:

To list files in the current directory:

smb: \> ls

You should see the test file we created earlier:

  .                                   D        0  Tue Nov 30 12:00:00 2022
  ..                                  D        0  Tue Nov 30 12:00:00 2022
  shared-test.txt                     N       37  Tue Nov 30 12:00:00 2022

                8467839 blocks of size 4096. 3524491 blocks available

Creating a Remote Directory

Let’s create a new directory on the SMB share:

smb: \> mkdir test-directory

List the contents again to verify the directory was created:

smb: \> ls

You should see the new directory:

  .                                   D        0  Tue Nov 30 12:01:00 2022
  ..                                  D        0  Tue Nov 30 12:00:00 2022
  shared-test.txt                     N       37  Tue Nov 30 12:00:00 2022
  test-directory                      D        0  Tue Nov 30 12:01:00 2022

                8467839 blocks of size 4096. 3524491 blocks available

Changing Directories

Let’s change to the directory we just created:

smb: \> cd test-directory

Verify we’re in the new directory:

smb: \test-directory\> ls

The output should show an empty directory:

  .                                   D        0  Tue Nov 30 12:01:00 2022
  ..                                  D        0  Tue Nov 30 12:01:00 2022

                8467839 blocks of size 4096. 3524491 blocks available

To go back to the parent directory:

smb: \test-directory\> cd ..

Getting Help Within smbclient

To see the available commands within smbclient:

smb: \> help

You’ll see a list of all available commands:

?              allinfo        altname        archive        backup
blocksize      cancel         case_sensitive cd             chmod
chown          close          del            dir            du
echo           exit           get            getfacl        geteas
hardlink       help           history        iosize         lcd
link           lock           lowercase      ls             l
mask           md             mget           mkdir          more
mput           newer          notify         open           posix
posix_encrypt  posix_open     posix_mkdir    posix_rmdir    posix_unlink
print          prompt         put            pwd            q
queue          quit           readlink       rd             recurse
reget          rename         reput          rm             rmdir
showacls       setea          setmode        stat           symlink
tar            tarmode        timeout        translate      unlock
volume         vuid           wdel           logon          listconnect
showconnect    tcon           tdis           tid            utimes
logoff         ..             !

When you’re done exploring, you can exit the smbclient session:

smb: \> quit

In the next step, we’ll learn how to transfer files between the Linux system and SMB shares.

Transferring Files with smbclient

In this final step, we’ll learn how to transfer files between our Linux system and the SMB share.

Let’s connect again to our SMB share:

smbclient //localhost/testshare -U labex

Enter the password when prompted:

Enter WORKGROUP\labex's password:

You should see the smbclient prompt:

Try "help" to get a list of possible commands.
smb: \>

Let’s upload the test file we created earlier to the SMB share. First, we need to check our current local directory:

smb: \> !pwd

This runs the pwd command on your local system and should display:

/home/labex/project

We need to change to the directory where our test file is located:

smb: \> lcd ~/project/smb-files

Verify we’re in the correct directory:

smb: \> !ls

You should see:

test.txt

Now, let’s upload the file to the SMB share:

smb: \> put test.txt

You should see a message indicating the file was transferred:

putting file test.txt as \test.txt (38.5 kb/s) (average 38.5 kb/s)

Verify the file was uploaded:

smb: \> ls

You should see:

  .                                   D        0  Tue Nov 30 12:02:00 2022
  ..                                  D        0  Tue Nov 30 12:00:00 2022
  shared-test.txt                     N       37  Tue Nov 30 12:00:00 2022
  test-directory                      D        0  Tue Nov 30 12:01:00 2022
  test.txt                            N       33  Tue Nov 30 12:02:00 2022

                8467839 blocks of size 4096. 3524491 blocks available

Now, let’s download a file from the SMB share to our local system. First, let’s create a new directory to store the downloaded files:

smb: \> !mkdir -p ~/project/smb-downloads

Change to that directory:

smb: \> lcd ~/project/smb-downloads

Now, download the file:

smb: \> get shared-test.txt

You should see a message indicating the file was transferred:

getting file \shared-test.txt of size 37 as shared-test.txt (37.0 KiloBytes/sec) (average 37.0 KiloBytes/sec)

Verify the file was downloaded:

smb: \> !ls

You should see:

shared-test.txt

Using mget and mput for Multiple Files

The mget and mput commands allow you to transfer multiple files at once. Let’s try creating a few more files on our local system:

smb: \> !cd ~/project/smb-files && touch file1.txt file2.txt file3.txt

Now, let’s upload all .txt files at once:

smb: \> lcd ~/project/smb-files
smb: \> mput *.txt

For each file, you’ll be asked for confirmation. Type Y to confirm each transfer:

mput test.txt? Y
putting file test.txt as \test.txt (38.5 kb/s) (average 38.5 kb/s)
mput file1.txt? Y
putting file file1.txt as \file1.txt (0.0 kb/s) (average 19.2 kb/s)
mput file2.txt? Y
putting file file2.txt as \file2.txt (0.0 kb/s) (average 12.8 kb/s)
mput file3.txt? Y
putting file file3.txt as \file3.txt (0.0 kb/s) (average 9.6 kb/s)

If you want to transfer all files without confirmation, you can turn off prompting:

smb: \> prompt
smb: \> mput *.txt

Similarly, to download multiple files:

smb: \> lcd ~/project/smb-downloads
smb: \> mget *.txt

When you’re done, exit the smbclient session:

smb: \> quit

Non-Interactive Commands

You can also use smbclient to execute commands without entering the interactive shell. For example, to list the contents of a share:

smbclient //localhost/testshare -U labex -c 'ls'

Enter the password when prompted, and you’ll see the directory listing:

Enter WORKGROUP\labex's password:
  .                                   D        0  Tue Nov 30 12:03:00 2022
  ..                                  D        0  Tue Nov 30 12:00:00 2022
  file1.txt                           N        0  Tue Nov 30 12:03:00 2022
  file2.txt                           N        0  Tue Nov 30 12:03:00 2022
  file3.txt                           N        0  Tue Nov 30 12:03:00 2022
  shared-test.txt                     N       37  Tue Nov 30 12:00:00 2022
  test-directory                      D        0  Tue Nov 30 12:01:00 2022
  test.txt                            N       33  Tue Nov 30 12:03:00 2022

                8467839 blocks of size 4096. 3524491 blocks available

To download a file in a single command:

smbclient //localhost/testshare -U labex -c 'get test.txt /home/labex/project/test-download.txt'

This command downloads the test.txt file from the share and saves it as test-download.txt in your project directory.

You now have a good understanding of how to use smbclient to connect to SMB shares, navigate directories, and transfer files. These skills are essential when working in mixed Windows/Linux environments.

Summary

In this lab, we explored the smbclient command in Linux, which provides an essential tool for connecting Linux systems to Windows (SMB/CIFS) file shares. We covered several key aspects of working with smbclient:

  1. Installation: We installed the smbclient package on Ubuntu 22.04, which included its dependencies.

  2. Command Basics: We learned about the basic syntax and commands available in smbclient, including how to connect to shares and navigate within them.

  3. Setting Up a Test Environment: We created a test SMB environment using a local Samba server to practice our commands without requiring access to an external Windows server.

  4. Connecting to Shares: We connected to our test SMB share and explored navigation commands such as ls, cd, and mkdir.

  5. Transferring Files: We learned how to upload files to an SMB share using put and download files using get. We also explored multiple file transfers with mput and mget.

The skills you’ve gained from this lab are directly applicable to real-world scenarios where you need to interact with Windows systems or servers from Linux environments. Whether you’re transferring files between systems, automating backups, or integrating Linux systems into Windows networks, smbclient provides a powerful command-line interface for these tasks.

For more complex or frequent file operations, you may want to explore mounting SMB shares directly into your Linux filesystem using the mount command with the cifs filesystem type, which builds upon the concepts we’ve learned here.

Linux Commands Cheat Sheet

Для работы бывает необходимо подключаться из Linux к общей папке Windows, чтобы забрать или передать файлы. В организациях в 99% используются компьютеры под управлением Windows, поэтому приходится подключаться из Linux к Windows.

Установка Samba клиента в Linux

sudo apt-get update
sudo apt-get install samba-client
sudo apt-get install cifs-utils

Для удобства просмотра сетевого окружения в GUI удобен файловый менеджер Nautilus с дополнением Nautilus-share

sudo apt-get install nautilus nautilus-share

Просмотр общих сетевых ресурсов с помощью командной строки

Вызов клиента Samba для просмотра ресурсов сервера из командной строки:

1) просмотр общих папок, предоставленных в общий доступ по сети для локальных пользователей сервера

smbclient -L //192.168.100.10 -U Username%Password

либо

smbclient -L //servername -U Username%Password

где: 192.168.100.10 — IP адрес сервера, servername — имя сервера, Username — локальный пользователь сервера, Password — пароль пользователя Username

2) просмотр общих папок, предоставленных в общий доступ по сети для пользователей домена

smbclient -L //192.168.100.10 -U Domain/Username%Password

либо

smbclient -L //192.168.100.10 -U Username%Password -W Domain

или по имени

smbclient -L //servername -U Username%Password -W Domain

где Domain — имя домена Active Directory.

Либо (чтобы каждый раз не сообщать пароль в параметрах команды) создать файл ~/.smbcredentials
с данными входа:

username=имя_пользователя
password=пароль
domain=имя_standalone_сервера_или_домена

Тогда, присоединение к сетевому каталогу:

smbclient //server/share --authentication-file=/home/vladimir/.smbcredentials 

Подключение к общей папке Samba в интерактивном режиме

То же самое, но без ключа -L, но с параметром — именем общей папки, в данном случае «share»

smbclient //192.168.100.10/share -U Domain/Username%Password

либо

smbclient //servername/share -U Domain/Username%Password

либо

smbclient //servername/share -U Username%Password -W Domain

После успешного входа появится приглашение

smb: \>

можно вводить команды, например, help или dir. Интерфейс для управления smbclient с помощью команд напоминает ftp клиент.

Подключение к общим папкам с помощью файлового менеджера Nautilus

После запуска nautilus, выберите в левой части окна «+ Другие места» — откроется просмотр локальной сети, где можно просматривать компьютеры в сети, у которых имеются общие папки.

Решение проблемы с подключением: избавляемся от ошибки -13 Access Denied, либо NT_STATUS_ACCESS_DENIED

Ошибка: CIFS: VFS: cifs_mount failed w/return code = -13"

Данную ошибку можно решить только настройкой прав на сервере. Чтобы открыть общую папку на просмотр, нужны три условия:
1) Пользователь указан среди пользователей сервера или домена (либо доступ типа guest разрешён)
2) Предоставлен (не ограничен) доступ к файловой системе.
3) Дан доступ к конкретной сетевой папке — например, пользователь входит в группу пользователей, к которой дан доступ к общей папке.

Последнее, третье условие самое строгое. Нужно, чтобы Администратор сервера предоставил права пользователю (включил его в группу пользователей общей папки).

Самое интересное, что права Администратора не гарантируют даже ему полных прав доступа к общей папке, т.к. необходимо, чтобы пользователь «Администратор» входил в группу, которой предоставлены права к данной сетевой папке. В этом плане администратор не отличается от группы other/nobody: получит ошибку mount error(13): Permission denied, потому что он не входит в группу пользователей сетевой папки.

Использование команды «mount»

Вместо smbclient можно использовать команду mount.

Вначале нужно создать точки монтирования и дать права доступа к папке, например:

sudo mkdir /mnt/cifs
sudo chmod 0777 /mnt/cifs

Примеры использования команды mount с сетевым папками:

sudo mount -t cifs //192.168.20.222/share /mnt/cifs -o user=Vlad,pass=Str0ngPa$$word
ls  /mnt/cifs
sudo umount //192.168.20.222/share
ls  /mnt/cifs

Либо то же самое с файлом .smbcredentials :

sudo mount -t cifs //192.168.20.222/share /mnt/cifs -o credentials=/home/vladimir/.smbcredentials

Если имя сетевой папки содержит пробелы («share with spaces in name»), нужно вводить следующим образом:

sudo mount -t cifs //192.168.20.222/share\ with\ spaces\ in\ name /mnt/cifs -o credentials=/home/vladimir/.smbcredentials

Примечание: Чтобы после выполнения команды mount примонтированная папка работала бы не только на чтение, но и на запись в удалённую общую папку, нужно сопоставить удаленного пользователя с локальным пользователем Linux, при помощи параметров uid=1000,gid-1000. Где 1000 — заменить на uid и gid пользователя Linux (выводятся командой id).
Либо добавить в параметры -o noperm,iocharset=utf8.
В ключах команды можно задать версию Samba, которую используем для подключения. Например,
для SMB2: vers=2.0 или для SMB3 vers=3.0.

Примеры:

sudo mount -t cifs //192.168.20.222/share\ with\ spaces\ in\ name /mnt/cifs -o user=username,pass=password,uid=1000,gid=1000

sudo mount -t cifs //192.168.20.222/share\ with\ spaces\ in\ name /mnt/cifs -o credentials=/home/vladimir/.smbcredentials,vers=2.0,noperm 

Если заданная версия Samba (например, SMB3) не поддерживается сервером, будет выведена ошибка "mount error(95): Operation not supported.".

Добавление параметра «nofail» пригодится, когда не известно, включен ли удалённый компьютер (сервер) или нет.

Монтирование сетевой папки во время загрузки (файл /etc/fstab)

Синтаксис строки в /etc/fstab:

//[URL]/[sharename] /mnt/[mountpoint] cifs vers=3.0,credentials=/home/username/.sharelogin,iocharset=utf8,file_mode=0777,dir_mode=0777,uid=[username],gid=[username],nofail 0 0

где:
//[URL]/[sharename] — имя сервера и сетевой папки
/mnt/[mountpoint] — точка монтирования на локальном компьютере
vers=3.0 — принудительно установить версию протокола SMB3 (либо vers=2.0 — если клиент и сервер поддерживают лишь SMB2)
credentials=/home/username/.sharelogin — указание файла с именем пользователя, паролем и доменом для входа
iocharset=utf8 — прямое указание набора символов utf8 (не обязательно, если без него работает)
file_mode=0777,dir_mode=0777 — права доступа при выполнении mount
uid=[username],gid=[username] — данные uid и gid из результата вывода команды cat /etc/passwd | grep username
nofail — загрузка ОС будет продолжена даже в случае недоступности сервера URL

Другие параметры:
defaults — включает опции rw, suid, dev, exec, auto, nouser, and async. Обычно идёт первой, т.к. можно переопределить отдельные опции в строке позднее, например: defaults, noexec, ro — нет исполнения, только чтение.
rw — очевидно, чтение-запись со стороны клиента (является противоположностью ro — только чтение (защита от записи).
suid — запрещает использование бит полномочий SUID (Set-User-IDentifier — установка идентификатора владельца) или SGID (Set-Group-IDentifier). Грубо говоря, запрещает передачу части прав при помощи битов SUID и SGID — права должны быть заданы явно.
auto — используется в /etc/fstab — разрешает автоматическое монтирование сетевых ресурсов при выполнении команды mount -a
noauto — запрет для fstab монтировать папку автоматически при выполнении команды mount -a.
nouser — прямой запрет на «ручное» монтирование всеми пользователями, кроме root (не влияет на монтирование во время загрузки ОС)
guest — для доступа к «гостевым» общим папкам, которые доступны по сети без указания имени пользователя и пароля.
async — запись данных в сетевую папку производится по мере возможности — значение по умолчанию. Повышает производительность.
sync — немедленная запись на удаленный компьютер (без использования буферов), не рекомендуется.
noperm — отключает встроенную в клиент проверку прав. Используют noperm в том случае, если права вроде бы есть, но создать файл на запись, например, программно, не получается, из-за несовместимости в реализации CIFS на клиенте и сервере.
noexec — прямой запрет запуска исполнимых файлов из сетевой папки
noatime — не обновлять время создания файла (повышает производительность, но понижает информативность)
nounix — отключение расширений Linux: не использовать символические ссылки. Используется, чтобы отключить символьные ссылки для обеспечения совместимости с Windows.
mfsymlinks — ключ для символьных ссылок в стиле Minshall+French. Этот стиль ссылок поддерживается Windows и Mac.

Примеры строки в fstab (где данные входа указаны в файле /etc/.smbcredentials):

//192.168.20.222/share_name rw,auto,nofail,credentials=/etc/.smbcredentials 0 0

Если в /etc/hosts или локальном DNS сервере прописаны имена машин, вместо IP-адреса можно подключать общую папку по имени: //server/share .

Команда для монтирования на основе fstab:

sudo mount -a

Будет перемонтированы все диски на основе /etc/fstab за исключением помеченных параметром «noauto».

Краткая информация по настройки Samba в Windows (протоколы SMB1, SMB2, SMB3)

Samba протокол имеет три версии 1, 2 и 3.
Протокол SMB1 включают, если в организации имеются машины под Windows XP. В остальных случаях стараются отключить SMB1 как небезопасный.

Включение и выключение в Windows 7 и Windows Server 2008r2 производится с помощью реестра, параметры
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\LanmanServer\Parameters
параметры типа DWORD
SMB1=0
SMB2=1

В Windows 8, Windows 10, 11, Windows Server 2012, 2016 и выше используется командлет PowerShell

Get-SmbServerConfiguration | select EnableSMB1Protocol,EnableSMB2Protocol

Set-SmbServerConfiguration -EnableSMB2Protocol $true

Указанные командлеты не работают в ранний версиях Windows 7 и Windows Server 2008r2.
Также, SMB3 не работает в Win7 — подробнее см. здесь — сайт winitpro.ru.


Ссылки:

  • man mount.cifs

Related publications

Уровень сложностиПростой

Время на прочтение7 мин

Количество просмотров12K

Всем привет я всегда хотел вести свой мини блог и решил начать его на Хабре. Я очень вдохновлен этой платформой, потому что я могу её использовать, как для развития самого себя, так и помогать начинающим специалистам в области IT совершенствовать свои навыки. На данном этапе я не могу писать какие-то сверхсложные статьи в данной области, но я постепенно развиваюсь и буду освещать необычные темы в своей блоге. А пока решил начать с чего-то очень простого чтобы самому въехать, и понять как все будет развиваться.

Samba — это программный комплекс, который позволяет компьютерам на базе Linux и UNIX взаимодействовать с системами Windows через протокол SMB/CIFS (Server Message Block/Common Internet File System). Основное

Основное предназначение Samba — обеспечить совместный доступ к файлам, папкам, принтерам и другим ресурсам между разными операционными системами.

Нам необходимо представить доступ к общей папке и к папке «приватных пользователей» на базе astra linux 1.6. Для этого мы создадим 2 общие папки, к которым в целях безопасности смогут подключаться только пользователи Samba, вторая же папка будет «приватная» к которой смогу подключатся только пользователи Samba, но главное отличие в том, что эти пользователи дополнительно будут аутентифицироваться по паролю. Так же если вам необходимо что бы присутствовал пользователь с правами администратора и имел доступ ко всем папкам то выполняйте команды со звездочкой*

«Samba_users» — где доступ имеют только пользователи Samba без пароля

«Samba_private» — где привилегированные пользователи Samba имеют доступ по паролю.

1. Настройка сети

Для начала назначим статические IP-адреса для сервера и клиентских хостов

  • Сервер Samba192.168.1.200/24 (Astra Linux 1.6/1.7)

  • Хост №1 (Windows 7)192.168.1.10, уч. запись vadim

  • Хост №2 (Windows 10)192.168.1.11, уч. запись dima

  • *Хост №3 (Windows 10)192.168.1.12, уч. запись admin

2. Настройка доменного имени

Присваиваем серверу корректное доменное имя, например: ds1.domain.local. Выполняем команды:

sudo -i 
hostnamectl set-hostname ds1.domain.local
hostname // проверить заданное имя
mcedit /etc/hosts // привести к виду
127.0.0.1	localhost
#127.0.0.1	ds
192.168.1.200	ds1.domain.local	ds1
cat /etc/resolv.conf //проверить что бы были указаны правильные DNS сервераПроверяем наличие сетевого взаимодействия
ping (ip - хоста в сети)

3. Установка Samba

Установите Samba на сервере

Fly-admin-samba — Это специальный инструмент, разработанный для Astra Linux. Его основное назначение — упрощение администрирования Samba через
графический интерфейс.

Astra-samba — Это модифицированная версия Samba, интегрированная специально для Astra Linux. Она включает в себя некоторые изменения, специфичные для ОС Astra Linux 1.6— упрощение администрирования Samba через графический интерфейс. Astra-samba — Это модифицированная версия Samba, интегрированная специально для Astra Linux. Она включает в себя некоторые изменения, специфичные для ОС Astra Linux 1.6 хотя fly-admin-samba и astra-samba разработаны для Astra Linux, их использование зависит от вашего сценария:

  • Если вы работаете через графический интерфейс, fly-admin-samba может быть полезным.

  • Если вы хотите использовать полную функциональность Samba и её расширения, то astra-samba будет предпочтительнее.

  • В некоторых случаях может потребоваться ручная настройка через консоль (например, тонкая настройка прав, которая может быть недоступна через GUI).

После установки графического инструмента он станет доступен в меню
«Пуск» > «Панель управления» > «Сеть» > «Общие папки (Samba)«

sudo apt install fly-admin-samba //Установить графический инструмент
apt install astra-sambadc// Установить инструмент командной строки

4. Проверьте, что Samba установлена и работает

sudo systemctl status smbd 
sudo systemctl enable smbd //Включить автозапуск службы с ОС

5. Необходимо произвести настройки в конфигурационном файле smb.conf

sudo -i
cp -v /etc/samba/smb.conf /var/backups
systemctl stop smbd
mcedit (nano) /etc/samba/smb.conf

Приводим файл к такому виду, остальное содержание можно оставить без изменений или удалить, но вскоре вам понадобится прописать в этом файле сетевые принтеры или что-то ещё, поэтому в контексте данного задания я показываю часть файла, которая отвечает на заданную нами тему.

[global]
log file = /var/log/samba/%m.log
max log size = 1000
workgroup = WORKGROUP
netbios name = SAMBASERVER
wins support = yes
logging = file
panic action = /usr/share/samba/panic-action %d
server role = standalone server
obey pam restriction = yes
unix password sync = yes
passwd program = /usr/bin/passwd %u
passwd chat = Enter\snew\s\spasswdord:* %n\n Retype\snew\s\spasswdord:* %n\n password\supdated\ssuccessfully 
pam password change = yes
map to guest = bad user
security = user
comment = Home Directories
encrypt passwords = yes

[samba_users]
comment = Общая папка для пользователей Samba 
path = /srv/samba_users
read only = no
guest ok = yes
browseable = yes
writable = yes
valid users = @samba_users, @admin //*добавляем @admin если нужен admin над всеми папками

[samba_private]
comment = Приватная папка
path = /srv/samba_private
browseable = yes
guest ok = no
writable = yes
valid users = @samba_private, @admin

Сохранение в редакторе mcedit/nano

mcedit — Выйти и сохранить — F10

nano — ctrl+X

Обозначение команд в конфигурационном файле

comment = Общая папка Samba

Описание: Указывает описание ресурса, которое будет отображаться в сетевом окружении.

path = /srv/samba

Описание: Указывает путь к каталогу на сервере, который предоставляется в общем доступе.
Пример: Файлы, хранящиеся в /srv/samba, будут видны через этот ресурс.

read only = no

Описание: Определяет, доступен ли ресурс только для чтения.
no: Разрешает запись в папку.

guest ok = yes

Описание: Разрешает доступ к папке без аутентификации (гостевой доступ).
yes: Любой пользователь может получить доступ к ресурсу без ввода логина и пароля.

browseable = yes

Описание: Показывать ли папку в сетевом окружении.
yes: Папка будет видна в списке общих ресурсов.

writable = yes

Описание: Разрешать ли запись в папку.
yes: Пользователи смогут добавлять и изменять файлы.

valid users = @samba_private

Описание: Ограничивает доступ к папке только для указанных пользователей или групп.
• @samba_private: Указывает, что доступ имеют только пользователи из группы samba_private.
Пример: Если пользователь не принадлежит к этой группе, доступ будет запрещён.

6. Проверка конфигурации на ошибки

testparm

7. Создадим группы пользователей

groupadd samba_users
groupadd samba_private
groupadd admin //*
groupadd samba_del 
groupdel samba_del//удалите если добавили лишнюю группу

8. Добавим пользователей Linux и создадим учетные записи Samba

adduser vadim //пароль задаем такие же как у учеток windows
adduser dima
adduser admin //*пользователь, имеющий права ко всем папкам
adduser kiril
smbpasswd -a vadim
smbpasswd -a dima
smbpasswd -a admin
userdel kiril // если случайно дабавили пользователя

9. Добавим пользователей в группы

usermod -aG samba_users dima
usermod -aG samba_private vadim
usermod -aG admin admin//*добавление пользователя админ в группу 
gpasswd --delete <пользователь> <группы через запятую> // если необходимо удалить пользователя из группы

10. Создаем папку samba_users с общим доступом для пользователей Samba

sudo -i
mkdir /srv/samba_users (папка с общим доступом где только пользователи Samba могут и читать и записывать)
chmod -R 770 /srv/samba_users
chown -R root:samba_users /srv/samba_users

10.1 Расширение прав и отладка

Практика показала, что пользователи имеют доступ к папкам и все работает отлично.

В моей ситуации получилось так, что данные я переносил с компьютера windows и все файлы получили права admin в группе admin, в связи с чем пользователи не могли получить доступ к файлам внутри расшаренных папок.

Потому если вы столкнулись с данной проблемой или вам необходим доступ как пользователя так и администратора тоже, то это должно вам помочь:

Настройка прав с помощью ACL
Теперь вам необходимо  назначить права одновременно для обеих групп.

Добавьте права для группы admin:
sudo setfacl -R -m g:admin:rwx /srv/samba_users
sudo setfacl -R -m g:samba_users:rwx /srv/samba_users

Настраиваем так, что бы новые файлы и папки наследовали права:
sudo setfacl -R -d -m g:admin:rwx /srv/samba_users
sudo setfacl -R -d -m g:samba_users:rwx /srv/samba_users

Проверка текущих ACL
Проверьте, что права настроены правильно:
getfacl /srv/samba_users

Вы должны увидеть что-то вроде:
makefile
# file: /srv/samba_users
# owner: root
# group: samba_users
user::rwx
group::rwx
group:admin:rwx
group:samba_users:rwx
mask::rwx
other::r-x

Аналогично для папки samba_private

sudo -i
mkdir /srv/samba_private (папка с доступом для пользователей Samba по паролю)
chmod -R 770 /srv/samba_private
chown -R root:samba_private /srv/samba_private
Настройка прав с помощью ACL
Теперь вам необходимо  назначить права одновременно для обеих групп.

Добавьте права для группы admin:
sudo setfacl -R -m g:admin:rwx /srv/samba_private
sudo setfacl -R -m g:samba_private:rwx /srv/samba_private

Настраиваем так, что бы новые файлы и папки наследовали права:
sudo setfacl -R -d -m g:admin:rwx /srv/samba_private
sudo setfacl -R -d -m g:samba_private:rwx /srv/samba_private

Проверка текущих ACL
Проверьте, что права настроены правильно:
getfacl /srv/samba_private

Вы должны увидеть что-то вроде:
makefile
# file: /srv/samba_private
# owner: root
# group: samba_private
user::rwx
group::rwx
group:admin:rwx
group:samba_private:rwx
mask::rwx
other::r-x

11. Проверка работы службы

Необходимо перезапустить службу Samba и проверить с сервера доступ к конкретной папке

systemctl restart smbd// перезапуск службы
systemctl status smbd //Проверка работы службы
smbclient //localhost/samba_users -U dima
smbclient //localhost/samba_private -U vadim

12. Подключение к общим папкам с хостов Windows

Вводим IP-адрес сервера Samba

Вводим IP-адрес сервера Samba

В проводнике отобразится общая папка после чего вы можете создать ярлык этой папки и вынести на рабочий стол для удобства.

Когда вы проверите доступ к папкам с разных компьютеров, то убедитесь что Vadim имеет доступ к 2-м папкам, а dima только к одной (samba_users). При подключении vadim к samba_private, будет затребован пароль для аутентификации, после его ввода он сохраниться и вы будете заходить без дополнительного ввода (Есть смысл делать пароли от учетных записей Windows и Astra Linux одинаковыми).

Вывод

В результате выполнения данной настройки сервера Samba были успешно созданы и настроены общие ресурсы с различными уровнями доступа. Настроены две папки:

  • samba_users — доступна всем пользователям Samba без ввода пароля,

  • samba_private — доступна только определённым пользователям после аутентификации.

Проверка с сервера и клиентских хостов (Windows 7 и Windows 10) подтвердила корректную работу настроек, включая разграничение доступа. Такой подход обеспечивает удобство управления доступом для различных пользователей, а использование групп позволяет гибко управлять правами в будущем. Данный алгоритм демонстрирует простоту настройки Samba и её возможности в организации файлового хранилища с контролем доступа.

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Internet explorer windows 2008 r2
  • Код ошибки программы почта windows live 0x800ccc6a
  • Windows xp media center edition 2006
  • Scsi контроллер для windows xp
  • Максимальное железо для windows xp