Монтирование сетевой папки в Linux
В одной из прошлых статей мы рассматривали как настраивать сетевые папки в Linux с помощью NFS. Если в Windows используется для этих целей Samba, то в Linux принято организовывать общие папки с помощью сетевой файловой системы NFS.
В этой статье мы поговорим о том как монтировать такие папки вручную, а также как настроить их монтирование при обращении с помощью autofs. Так вы будете экономить трафик между серверами и получите неплохую производительность.
Монтирование сетевой папки в Linux
Для того чтобы примонтировать сетевую папку в системе должен быть установлен пакет nfs-commons. В Ubuntu его можно установить такой командой:
sudo apt install nfs-common
Затем можно выполнять монтирование с помощью обычной команды mount, которой надо передать адрес сервера NFS и путь к папке в файловой системе сервера. Например, чтобы смонтировать папку /var/nfs выполните:
sudo mount ip_адрес:/var/nfs /mnt
Никакой авторизации в NFS нет, поддерживается только ограничение доступа по IP адресу, поэтому монтирование должно пройти успешно. Если статическое монтирование работает хорошо, можно переходить к настройке autofs. Не забудьте размонтировать сетевую папку:
sudo umount /mnt
Сначала нужно установить этот сервис. Для этого в Ubuntu выполните команду:
sudo apt install autofs
Все настройки сетевых папок, которые надо монтировать находятся в файле /etc/auto.master. Каждая строчка представляет из себя отдельную папку и имеет такой синтаксис:
/точка/монтирования /файл/с/карты —timeout=значение
Здесь файл карты, обычно это /etc/auto.misc — файл в котором более подробно описано что и куда надо монтировать. Синтаксис одной записи в файле /etc/auto.misc такой:
/точка/монтирования опции_монтирования ip_адрес:/путь/к/сетевой/папке
Для примера будем монтировать ту же сетевую папку /var/nfs на сервере 185.117.155.209 в локальную папку /mnt. В файл /etc/auto.master надо добавить такую строчку:
sudo vi /etc/auto.master
/mnt /etc/auto.nfs —timeout=100

Здесь мы сообщаем, что общая папка монтирования для всех ресурсов, описанных в файле /etc/auto.nfs — /mnt и если к ресурсу не обращаются на протяжении 100 секунд, то её следует размонтировать. Далее надо добавить описание монтирования в файл /etc/auto.nfs:
sudo vi /etc/auto.nfs
share -fstype=nfs4,rw 185.117.155.209:/var/nfs

Здесь — share это точка монтирования нашей сетевой папки в папке /mnt, затем идут опции монтирования, а потом адрес сервера и путь к папке на удалённой машине. Далее надо перезапустить сервис autofs:
sudo systemctl restart autofs
Затем можно попытаться обратиться к этой папке и она автоматически смонтируется:

Как видите, всё достаточно просто. Так и выполняется автоматическое монтирование сетевых папок в Linux. Но чтобы у вас появилась возможность создавать файлы в этой папке, надо чтобы сервер NFS был правильно настроен. Об этом смотрите предыдущую статью про настройку NFS.
HackWare.ru
Этичный хакинг и тестирование на проникновение, информационная безопасность
SMB и Samba в Linux: подключение к общей папке Windows, создание сетевых папок в Linux
Книга по SMB и Samba на русском языке. Оглавление
Samba — это SMB для Linux
SMB — это протокол, технология, которая позволяет создать файловые сервер. В первой части я говорил, что в Linux функции сервера и клиента SMB выполняет Samba. Это не совсем так, на самом деле, в настоящее время Samba не только реализует возможности SMB, но и дублирует функционал сервера Доменов Active Directory (технология Windows, позволяющая управлять множеством компьютеров — кстати, про Active Directory скоро будет большой материал на HackWare.ru).
Далее мы будем говорить про Samba, но мы затронем только вопросы SMB.
Начните с установки пакетов samba и smbclient.
В Debian, Linux Mint, Ubuntu, Kali Linux и их производных для установки samba выполните команду:
sudo apt install samba smbclient
В Arch Linux, BlackArch и их производных выполните команду:
sudo pacman -S samba smbclient
Как в Linux увидеть все компьютеры Windows с совместными ресурсами
Для показа всех совместных сетевых ресурсов Windows выполните команду:
smbtree -N
В этой и последующих командах используется флаг -N, который означает не использовать пароль. Если же вы используете пароль, то укажите опцию -U с именем пользователя, пароль нужно будет ввести интерактивно.
WORKGROUP \\VYACHESLAV \\VYACHESLAV\Users \\VYACHESLAV\IPC$ Удаленный IPC \\VYACHESLAV\1 Для Принтера \\RT-N66U RT-N66U \\RT-N66U\IPC$ IPC Service (RT-N66U) \\HACKWARE-SERVER \\HACKWARE-MIAL
В начале идёт имя рабочей группы WORKGROUP. Затем следует список компьютеров. Для тех из них, для которых удаётся получить список сетевых папок, они выводятся.
Как можно увидеть выше, для компьютера \\VYACHESLAV получен список совместно используемых ресурсов, а для компьютера \\HACKWARE-MIAL — нет. При этом если я включал на компьютере \\HACKWARE-MIAL поддержку протокола SMB 1, а при запуске команды указывал хоть какое-то имя пользователя, например:
smbtree -U qqwee -N
либо просто запускал smbtree с правами администратора:
sudo smbtree -N
то мне удавалось получить список файлов также и для компьютера \\HACKWARE-MIAL. UDP: видимо, такое поведение в том, что совпадали имена польозвателей на компьютерах с Linux и Windows.
Как в Linux вывести доступные по сети ресурсы (совместные папки и принтеры Windows)
Предыдущая команда показала нам несколько компьютеров с сетевыми папками. Предположим, меня интересует компьютер \\HACKWARE-MIAL, чтобы вывести его сетевые папки я запускаю команду вида:
sudo smbclient -L \\ИМЯ-КОМПЬЮТЕРА -N
в моём случае это:
sudo smbclient -L \\HACKWARE-MIAL -N
Кстати, вместо имени компьютера можно указать IP адрес.
В полученном выводе половину информации составляют сообщения о различных проблемах. Значимые данные:
Sharename Type Comment --------- ---- ------- ADMIN$ Disk Удаленный Admin C$ Disk Стандартный общий ресурс IPC$ IPC Удаленный IPC Share Disk Users Disk
В полученном выводе Share и Users являются общими сетевыми папками.
Unable to initialize messaging context smbclient: Can't load /etc/samba/smb.conf - run testparm to debug it
исчезнут, если создать файл /etc/samba/smb.conf.
Reconnecting with SMB1 for workgroup listing. protocol negotiation failed: NT_STATUS_CONNECTION_RESET Unable to connect with SMB1 -- no workgroup available
пропадут, если на компьютере с сетевой папкой включить поддержку протокола SMB1.
Как я уже говорил чуть выше, флаг -N означает не использовать пароль. Если же вы используете пароль, то укажите опцию -U с именем пользователя, пароль нужно будет ввести интерактивно.
Как и для smbtree, для smbclient необязательно использовать sudo, но без sudo для некоторых компьютеров программа срабатывает нормально, а для некоторых завершается ошибкой:
session setup failed: NT_STATUS_ACCESS_DENIED
Как подключиться к сетевой папке Windows из Linux
Программа smbclient умеет не только показывать общие ресурсы, но и имеет интерактивный режим, во время которого можно копировать файлы между локальным компьютером и общей папкой, удалять файлы, создавать папки и переходить по каталогам, просматривать содержимое файлов и их свойств и выполнять другие действия в файловой системе совместно используемой сетевой папки.
Кроме интерактивного режима, можно просматривать содержимое сетевых папок и в проводнике Linux — об этом будет рассказано позже, а пока остановимся на подключении в командной строке.
Для входа в интерактивный режим запустите команду вида:
sudo smbclient //ИМЯ-КОМПЬЮТЕРА/Папка -N
Например, я хочу подключиться к компьютеру //HACKWARE-MIAL/ и выполнить действия с файлами в сетевой папке Share, тогда моя команда следующая:
sudo smbclient //HACKWARE-MIAL/Share -N
Если вы хотите, чтобы при подключении была изменена текущая рабочая директория в сетевой папке, то есть чтобы была открыта другая папка, то используйте опцию -D. К примеру, я хочу подключиться к папке NewFolder, тогда команда следующая:
sudo smbclient //HACKWARE-MIAL/Share -N -D NewFolder
Подключение к SMB папке, требующий авторизации
К примеру, на компьютере //HACKWARE-MIAL/ имеется сетевая папка ShareRestricted, права на просмотр которой есть у пользователя ShareOverlord. Для просмотра шары, защищённой паролем, нужно использовать команду вида:
sudo smbclient //ИМЯ-КОМПЬЮТЕРА/Папка -U ИМЯ-ПОЛЬЗОВАТЕЛЯ
В моём случае это команда:
sudo smbclient //HACKWARE-MIAL/ShareRestricted -U ShareOverlord
Команды SMB в Linux
Доступны следующие интерактивные команды:
Выводит все доступные команды:
help
Для показа справки по определённой команде, выполните
help КОМАНДА
Переход в другой каталог (смена текущей рабочей директории) на удалённой системе:
cd ПАПКА
Переход в другую директорию на локальной системе:
Удаление файла в шаре:
del ИМЯ_ФАЙЛА
Имеется псевдоним этой команды:
rm ИМЯ_ФАЙЛА
И ещё одна команда со схожей функцией:
deltree ШАБЛОН_ИМЕНИ
Эта команда рекурсивно удалить все совпавшие с шаблоном имени файлы и директории.
Показ файлов и папок в текущей папке:
Имеется псевдоним этой команды:
И ещё один, даже более короткий псевдоним:
Скачать файлы с общей папки:
get [ЛОКАЛЬНОЕ_ИМЯ]
Для повторного скачивания файла:
reget [ЛОКАЛЬНОЕ_ИМЯ]
Для скачивания всех файлов, чьём имя совпадает с шаблоном:
mget ШАБЛОН_ИМЕНИ
Например, чтобы скачать все файлы с файловым расширением .exe нужно запустить такую команду:
mget "*.exe"
Для каждого файла, совпавшего с шаблоном, будет выполнен запрос на скачивание. Если вы действительно хотите его скачать, то нажмите клавишу «y»:
Get file ChromeSetup.exe? y
Также имеется команда newer, которая скачивает файлы (mget), которые новее, чем указанный локальный файл. Используется она так:
newer ФАЙЛ
Выгрузка файла на общую папку:
put [ИМЯ_УДАЛЁННОГО_ФАЙЛА]
Следующая команда скопирует локальный файл в шару:
print ИМЯ_ФАЙЛА
Повторная закачка файла:
reput [ИМЯ_УДАЛЁННОГО_ФАЙЛА]
Для закачки всех файлов, чьём имя совпадает с шаблоном:
mput ШАБЛОН_ИМЕНИ
К примеру, чтобы закачать в шару все файлы (из локальной текущей рабочей директории), которые имеют расширение *.cap, нужно запустить команду:
mput "*.cap"
Для каждого файла, совпавшего с шаблоном, будет выполнен запрос подтверждения, если вы действительно хотите его закачать, то нажмите клавишу «y»:
Put file wpa.cap? y putting file wpa.cap as \wpa.cap (335,2 kb/s) (average 277,8 kb/s) Put file wep.cap? y putting file wep.cap as \wep.cap (0,6 kb/s) (average 169,1 kb/s)
Включение и отключение рекурсии
recurse
Можно включать и отключать рекурсивный режим для mget и mput.
Показ всей возможной информации о файле:
allinfo ФАЙЛ
allinfo all-databases.sql altname: ALL-DA~1.SQL create_time: Чт авг 29 12:29:51 2019 MSK access_time: Вс янв 5 23:31:47 2020 MSK write_time: Ср авг 1 09:51:25 2018 MSK change_time: Вс янв 5 19:48:36 2020 MSK attributes: A (20) stream: [::$DATA], 381945262 bytes
В выводимой информации можно увидеть альтернативное (DOS) имя, временные метки (дата создания, доступа, записи и изменения файла), атрибуты.
Копирование файла на сервере:
scopy
Создание директории:
md ДИРЕКТОРИЯ
mkdir ДИРЕКТОРИЯ
Удаление директории:
rd ДИРЕКТОРИЯ
rmdir ДИРЕКТОРИЯ
Удаление файлов
Следующая команда удалит все совпавшие с МАСКОЙ файлы:
rm МАСКА
Псевдоним команды для удаления файлов:
del МАСКА
С помощью команды wdel можно удалить все совпавшие файлы по подстановочным символам:
wdel АТРИБУТЫ МАСКА
Переименование файлов:
rename ИСХОДНОЕ_ИМЯ НОВОЕ_ИМЯ
Ссылки
Создание жёсткой ссылки Windows:
hardlink ИСТОЧНИК НАЗНАЧЕНИЕ
Создание жёсткой ссылки UNIX:
link СТАРОЕ_ИМЯ НОВОЕ_ИМЯ
Создание символьной ссылки UNIX:
symlink СТАРОЕ_ИМЯ НОВОЕ_ИМЯ
Выход с сервера:
quit
exit
Вывод истории команд текущей сессии:
history
Просмотр содержимого текстового файла:
more УДАЛЁННЫЙ_ФАЙЛ
Показ текущей рабочей директории:
Current directory is \\HACKWARE-MIAL\Share\
Другой вариант показа текущей рабочей директории — это команда cd без аргументов:
Current directory is \
Создание и извлечение архивов tar
Программа tar используется для объединения нескольких файлов в один файл. Объединение происходит без сжатия. Для того, чтобы несколько файлов из сетевой папки объединить в архив и скачать на локальную систему запустите команду вида:
tar c АРХИВ.tar ФАЙЛ1 ФАЙЛ2 ФАЙЛ3
К примеру, я хочу скачать файлы all-databases.sql besside.log ChromeSetup.exe из совместной папки и объединить их в архив all.tar, тогда моя команда следующая:
tar c all.tar all-databases.sql besside.log ChromeSetup.exe
Если нужно разархивировать файл на локальной системе и всё его содержимое отправить на удалённую общую папку, то запустите команду вида:
tar x АРХИВ.tar
К примеру, я хочу отправить содержимое архива all.tar в общую папку:
tar x all.tar
Для установления режимов tar используется команда
tarmode
Установка таймаута операций:
timeout
Таймаут устанавливается в секундах и по умолчанию равен 20.
Установка нового соединения:
logon []
Закрытие сессии, выход:
logoff
Вывод списка открытых подключений:
listconnect
Отображение текущего активного подкючения:
showconnect
Изменение удалённой директории (переход на одну папку выше):
Выполнение команд в локальной системе:
!КОМАНДА
Чтобы команда выполнялась не на удалённой системе, а на локальной, поставьте перед ней ! (восклицательный знак), например^
!ls -l
Автоматическое выполнение команд в сетевой папке Windows
Необязательно каждый раз вводить все команды вручную — вы можете перечислить их через запятую и указать в двойных кавычках с опцией -c, например:
sudo smbclient //HACKWARE-MIAL/Share -N -c "cd NewFolder; tar c captures.tar *.cap"
Как смонтировать общую папку Windows/Samba в Linux
Сетевая папка Windows может быть доступна в файловых менеджерах Linux как любая другая локальная папка. Для этого её нужно смонтировать. После монтирования не придётся использовать консоль для просмотра списка файлов и скачивания или закачивания файлов.
Начните с установки пакета cifs-utils.
В Debian, Linux Mint, Ubuntu, Kali Linux и производных выполните:
sudo apt install cifs-utils
В Arch Linux, BlackArch и производных выполните:
sudo pacman -S cifs-utils
Предыдущие команды smbtree и smbclient понимали имена компьютеров Windows, такие имена как HACKWARE-MIAL. Монтирование выполняется с помощью команды mount, которая такие имена не умеет обрабатывать без помощи преобразования имён DNS. Поэтому при монтировании можно либо:
- Использовать вместо имён компьютеров IP адрес. В этом случае у компьютера с сетевой папкой должен быть постоянный (статичный) IP адрес
- Либо настроить преобразование имён для компьютеров Windows. Это можно сделать, например, с помощью файла /etc/hosts. Кстати, в этом случае у компьютера с общей папкой также должен быть постоянный IP адрес (смотрите Как настроить локальный DNS используя файл /etc/hosts в Linux)
В общем, в любом случае настройте в роутере или в самой Windows постоянный локальный IP.
Если вы хотите настроить преобразование имён с помощью файла /etc/hosts, то откройте его:
sudo gedit /etc/hosts
И добавьте туда запись вида
IP_АДРЕС ИМЯ_КОМПЬЮТЕРА
Например, у меня IP_АДРЕС это 192.168.0.101, а именем компьютера является HACKWARE-MIAL, тогда я добавляю следующую запись:
192.168.0.101 HACKWARE-MIAL
Пингуем по имени компьютера Windows, чтобы убедиться, что всё сработало:
ping HACKWARE-MIAL
Теперь нам нужно создать точку монтирования — папку, где появятся файлы из шары. Я создаю папку /mnt/share:
sudo mkdir /mnt/share
Чтобы не возникало проблем с правами доступа, папка, куда монтируется шара (например, /mnt/share/), должна принадлежать текущему пользователю Linux — если вы создавали папку без sudo, то она уже принадлежит обычному пользователю. Но если вы создавали папку с sudo (например, иначе это невозможно сделать в /mnt/), то вам нужно поменять её владельца командой вида::
sudo chown ПОЛЬЗОВАТЕЛЬ /ПУТЬ/ДО/ТОЧКИ/МОНТИРОВАНИЯ/ШАРЫ
Чтобы узнать имя текущего пользователя выполните команду:
echo $USER
Например, чтобы поменять владельца папки /mnt/share/ на mial:
sudo chown mial /mnt/share/
Теперь для монтирования сетевой шары Windows нужно запустить команду вида:
sudo mount -t cifs -o username=guest,password=,uid=1000,iocharset=utf8 //ИМЯ-КОМПЬЮТЕРА/Папка /точка/монтирования
В этой команде вы должны вставить свои значения для
Значение других элементов команды:
- sudo — монтировать шару можно и без прав суперпользователя, но использовать опцию -o, после которой указываются опции для монтирования, можно только с правами root
- -t cifs выбор файловой системы для монтирования
- -o означает, что после этой опции будут перечислены опции для монтирования:
- username=guest,password= — произвольное имя пользователя без пароля — используется для подключение к общей папки, для которой не требуется вход. Вместо этой конструкции можно указать просто guest, но в этом случае на некоторых системах всё равно запрашивается пароль. По моим наблюдениям, пароль запрашивается когда имя текущего пользователя на Linux совпадает с именем пользователя на Windows
- uid=1000 — в качестве владельцев всех файлов в шаре будет указан текущий пользователь Linux
- iocharset=utf8 — эта кодировка позволяет работать с именами файлов, в которых используются не только латинские буквы
К примеру, путь до сетевой шары у меня //HACKWARE-MIAL/Share, её я хочу смотрировать в папку /mnt/share, тогда команда будет следующей:
sudo mount -t cifs -o username=guest,password=,uid=1000,iocharset=utf8 //HACKWARE-MIAL/Share /mnt/share
Вид сетевой папки Windows в Double Commander:
Вид сетевой папки в стандартном проводнике Linux:
Для размонтирования нужно запустить следующую команду (укажите либо точку монтирования, либо ресурс, который был смонтирован):
sudo umount /mnt/share
Напомню, что в предыдущей части я не только настроил папку для входа без пароля, но на том же самом компьютере и настроил вторую папку с именем ShareRestricted. У этой папки владелец ShareOverlord, а пароль для входа 1234. Для подключения папки, доступ к которой возможен только по паролю, используется та же самая команда, но нужно указать реальные учётные данные:
sudo mount -t cifs -o username=ShareOverlord,password=1234,uid=1000,iocharset=utf8 //HACKWARE-MIAL/ShareRestricted /mnt/share
Чуть дальше очень похожий набор опций, в том числе пароль в открытом виде, мы будем использовать в файле /etc/fstab для настройки автоматического монтирования сетевой папки. Файл /etc/fstab доступен для чтения всем а, следовательно, также доступен всем ваш пароль от Windows в нём. Чтобы обойти эту проблему, можно использовать файл с учётными данными. Это файл содержит только имя пользователя и пароль.
Используя текстовый редактор, создайте файл с учётными данными для входа на ваш удалённый сервер:
gedit ~/.smbcredentials
В этот файл введите имя пользователя и пароль от Windows:
username=ИМЯ-ПОЛЬЗОВАТЕЛЯ password=ПАРОЛЬ
В моём примере это:
username=ShareOverlord password=1234
Сохраните файл и закройте редактор.
Измените права доступа к этому файлу, чтобы предотвратить нежелательный доступ к вашим учётным данным:
chmod 600 ~/.smbcredentials
Посмотрите абсолютный путь до этого файла:
realpath ~/.smbcredentials
В моём случае абсолютный путь:
/home/mial/.smbcredentials
Теперь вместо двух опций:
username=ПОЛЬЗОВАТЕЛЬ,password=ПАРОЛЬ
нужно использовать одну опцию, в качестве значения которой нужно указать абсолютный путь до файла с логином и паролем:
credentials=/home/ПОЛЬЗОВАТЕЛЬ/.smbcredentials
Моя команда стала выглядеть так:
sudo mount -t cifs -o credentials=/home/mial/.smbcredentials,uid=1000,iocharset=utf8 //HACKWARE-MIAL/ShareRestricted /mnt/share
Настройка автоматического монтирования сетевой папки в Linux
Автоматически монтируемые файловые системы прописываются в файле /etc/fstab. Откроем этот файл:
sudo gedit /etc/fstab
Теперь в него нужно добавить строку вида:
//ИМЯ-КОМПЬЮТЕРА/Папка /точка/монтирования cifs credentials=/home/mial/.smbcredentials,uid=1000,iocharset=utf8,nofail,_netdev 0 0
Мы добавили опцию nofail, чтобы ОС нормально загружалась даже если не удалось смонтировать данную файловую систему. Ещё добавьте опцию _netdev, эта опция означает, что файловая система находится на устройстве, которому требуется доступ к сети (используется для предотвращения попыток системы смонтировать эти файловые системы до тех пор, пока в системе не будет включена сеть).
Для моего примера это строка:
//HACKWARE-MIAL/ShareRestricted /mnt/share cifs credentials=/home/mial/.smbcredentials,uid=1000,iocharset=utf8,nofail,_netdev 0 0
Сохраним и закроем этот файл. Для проверки выполним:
sudo mount -a
Если сетевая папка успешно смонтировалась, значит можно выполнить проверку перезагрузкой.
Если нужно смонтировать папку для входа в которую не требуется пароль, то используйте в качестве опции учётные данные «username=guest,password=»:
//ИМЯ-КОМПЬЮТЕРА/Папка /точка/монтирования cifs username=guest,password=,uid=1000,iocharset=utf8,nofail,_netdev 0 0
Либо можно по-прежнему использовать файл .smbcredentials, как это было показано выше:
//ИМЯ-КОМПЬЮТЕРА/Папка /точка/монтирования cifs credentials=/home/mial/.smbcredentials,uid=1000,iocharset=utf8,nofail,_netdev 0 0
Но в файл ~/.smbcredentials запишите следующее:
username=guest password=
Как создать общую сетевую папку в Samba
Если в этой статье вы пропустили предыдущие части, так как вам нужно только настроить файловый сервер на Linux, то начните с установки пакета samba.
Следующая команда не сработает, если отсутствует файл /etc/samba/smb.conf. Если у вас тоже нет этого файла, то создаёте его заглушку — к настройке самого файла smb.conf мы вернёмся позже:
sudo touch /etc/samba/smb.conf
Теперь нужно добавить пароль для пользователя Samba. Действует следующее правило: имя пользователя должно быть таким же, как у вашего текущего пользователя, а пароль можно установить иной, отличный от вашего системного пароля.
Для установки пароля Samba, выполните следующую команду:
sudo smbpasswd -a $USER
Если вы хотите, чтобы у пользователя не было пароля, то укажите опцию -n.
Создайте папку, которая станет совместно используемой:
mkdir ~/linuxshare
Узнаем абсолютный путь до папки ~/linuxshare:
realpath ~/linuxshare
/home/mial/linuxshare
Откройте для редактирования файл /etc/samba/smb.conf:
sudo gedit /etc/samba/smb.conf
Добавьте туда строки вида:
[ИМЯ_ПАПКИ] comment = Samba на Linux path = /home/ИМЯ_ПОЛЬЗОВАТЕЛЯ/ИМЯ_ПАПКИ valid users = ИМЯ_ПОЛЬЗОВАТЕЛЯ read only = no browsable = yes
Обратите внимание, что все пробелы в строках выше являются обязательными.
Для моих данных это строки:
[linuxshare] comment = Samba на Linux path = /home/mial/linuxshare valid users = mial read only = no browsable = yes
Теперь запустим службу SMB:
sudo systemctl start smb.service
Для добавления службы в автозагрузку выполните:
sudo systemctl enable smb.service
На самом деле, мы настроили не полноценную Samba, а только файловый сервер SMB. Одно из следствий этого — показанные выше способы обнаружения сетевых папок, такие как команда smbtree в Linux или переход во вкладку «Сеть» в проводнике Windows, не обнаружат нашу шару.
Для подключения к этой общей сетевой папке на Linux нужно использовать IP адреса компьютера Linux вместо имени компьютера, как это мы делали раньше. Кстати, поэтому нужно настроить статичный IP (смотрите статью «Как настроить Linux на использование статичного IP адреса»).
Создадим файл, чтобы сетевая папка не была пустой:
echo "Документ на Linux" > ~/linuxshare/document.txt
Посмотрите локальный IP адрес компьютера, на котором запущена Linux:
ip a
У меня этим IP является 192.168.0.89, а папку, как мы помним, я создал с именем linuxshare, тогда в Windows я перехожу в проводнике во вкладку «Сеть» и подключаюсь к этой папке следующим образом:
\\192.168.0.89\linuxshare
Вводим учётные данные (которые мы установили командой smbpasswd):
Видим содержимое совместно используемой папки, размещённой на Linux с помощью SMB:
Для подключения к сетевой папке из консоли Linux, запустите команду вида:
sudo smbclient //IP_АДРЕС/Папка -U ПОЛЬЗОВАТЕЛЬ
Для моего примера это:
sudo smbclient //192.168.0.89/linuxshare -U mial
После ввода пароля нам становится доступным содержимое сетевой папки.
Эту папку можно смонтировать как это было показано в предыдущем разделе, либо подключать в Windows как сетевой диск, как это было показано в первой части.
Ошибки smbtree
Из-за разнообразия версий протокола SMB и возможных настроек, запуск программы smbtree довольно часто завершается ошибками. Здесь собраны ошибки smbtree и возможные пути решения проблем.
smbc_opendir: No such file or directory
smbtree -N
завершает работу с ошибкой
smbc_opendir: No such file or directory
Одна из причин данной ошибки: в локальной сети отсутствуют компьютеры с совместными ресурсами.
Если компьютеры с совместными ресурсами присутствуют в сети, но вы всё равно получаете эту ошибку, то попробуйте активировать на них SMB 1.
Segmentation fault
smbtree -N
приводит к ошибке
=============================================================== INTERNAL ERROR: Signal 11: Segmentation fault in pid 20313 (4.15.3) If you are running a recent Samba version, and if you think this problem is not yet fixed in the latest versions, please consider reporting this bug, see https://wiki.samba.org/index.php/Bug_Reporting =============================================================== PANIC (pid 20313): Signal 11: Segmentation fault in 4.15.3 BACKTRACE: 13 stack frames: #0 /usr/lib/libsamba-util.so.0(log_stack_trace+0x31) [0x7f7e7d8ef8c1] #1 /usr/lib/libsamba-util.so.0(smb_panic+0xa) [0x7f7e7d8efb2a] #2 /usr/lib/libsamba-util.so.0(+0xdbc5) [0x7f7e7d8efbc5] #3 /usr/lib/libc.so.6(+0x3cda0) [0x7f7e7d711da0] #4 /usr/lib/libbsd.so.0(strlcpy+0x10) [0x7f7e7d8bdf60] #5 /usr/lib/libsmbclient.so.0(+0x13886) [0x7f7e7db03886] #6 /usr/lib/libsmbclient.so.0(+0x13e21) [0x7f7e7db03e21] #7 /usr/lib/libsmbclient.so.0(+0x13f46) [0x7f7e7db03f46] #8 /usr/lib/libsmbclient.so.0(+0x14ab0) [0x7f7e7db04ab0] #9 /usr/lib/libsmbclient.so.0(+0xc08d) [0x7f7e7dafc08d] #10 smbtree(main+0x27f) [0x55876ec6f29f] #11 /usr/lib/libc.so.6(__libc_start_main+0xd5) [0x7f7e7d6fcb25] #12 smbtree(_start+0x2e) [0x55876ec6f73e] Can not dump core: corepath not set up
Точная причина не ясна, возможно это ошибка конкретной версии smbtree, попробуйте обновить эту программу.
Попробуйте запуск с другими опциями.
smbtree ничего не выводит и «подвисает»
Если smbtree не выводит явных ошибок, то для того, чтобы разобраться, на каком именно этапе стопорится работа программы, добавьте к вашей команде опцию -d и укажите число от 0 (выводить только критические ошибки) до 10 (выводить все сообщения).
Связанные статьи:
- Руководство по SMB и Samba (100%)
- Аудит безопасности SMB и Samba (83.1%)
- SMB: настройка общей сетевой папки в Windows (68.2%)
- Всё о монтировании: от системного администрирования до IT криминалистики (54.6%)
- Азы работы в командной строке Linux (часть 5) (54.3%)
- Полное руководство по Active Directory, от установки и настройки до аудита безопасности. Ч. 5: Добавление компьютеров в Active Directory. Проверка и удаление из Active Directory (RANDOM — 51%)
факультете информационной безопасности от GeekBrains? Комплексная годовая программа практического обучения с охватом всех основных тем, а также с дополнительными курсами в подарок. По итогам обучения выдаётся свидетельство установленного образца и сертификат. По этой ссылке специальная скидка на любые факультеты и курсы!
Рекомендуется Вам:
18 комментариев to SMB и Samba в Linux: подключение к общей папке Windows, создание сетевых папок в Linux
просто фантастика. я столько шлака прочитал за последние несколько дней о том как получить доступ с линукса к расшареным папкам в винде. спасибо огромное за проделанную работу. есть правда пара моментов: 1. при открытии файлов из расшареных папок винды в линуксе отсутствую права доступа, 2. автоматическое монтирование не происходить. монтиру.тся папки только командой «sudo mount -a» тем не менее огромное спасибо.

Alexey :
Приветствую! По поводу второй проблемы — не происходит автоматическое монтирование. Одной из причин может быть то, что когда обрабатываются записи в файле /etc/fstab, ещё не выполнено подключение к сети — в этом случае монтирование завершится неудачей. Но вы можете использовать опцию _netdev, которую можно указать в файле /etc/fstab, эта опция означает, что файловая система находится на устройстве, которому требуется доступ к сети (используется для предотвращения попыток системы смонтировать эти файловые системы до тех пор, пока в системе не будет включена сеть). И ещё, конечно, Windows должен быть уже включен на момент загрузки Linux, поскольку монтирование из /etc/fstab срабатывает при загрузке системы. Вы также можете посмотреть причины неудачного монтирования командой:
journalctl -b | grep mount
По поводу первой проблемы — посмотрите командой ls -l какому пользователю принадлежат файлы. Для файловой системы cifs/smb3 есть опции uid= и gid= — возможно с их помощью удастся решить проблему. Папка, куда монтируется шара (например, /mnt/share/), должна принадлежать текущему пользователю Linux — если вы создавали папку без sudo, то она уже принадлежит обычному пользователю. Но если вы создавали папку с sudo (например, иначе это невозможно сделать в /mnt/), то вам нужно поменять её владельца командой вида::
sudo chown /ПУТЬ/ДО/ТОЧКИ/МОНТИРОВАНИЯ/ШАРЫ $USER
Например, чтобы поменять владельца папки /mnt/share/ на текущего пользователя:
sudo chown /mnt/share/ $USER
Здравствуйте. Огромное спасибо за развернутый ответ по моим вопросам. 1. по поводу поводу доступа к файлам: да действиетльно проблема в правах на линуксе. создал папки от обычного пользователя в них смонтировал шары и все открывается и редактируется(ну по крайней мере то что открывал и редактировал). 2. по поводу автоматического монтирования: да действительно похоже что проблема в подключении к сети. Wicd долго ищет сеть и подключается к ней, поэтому навреное и не монтируются папки автоматически. назрел еще один вопрос: возможно ли сделать макрос или скрип для автоматической настройки параметров для доступа к удаленным папкам? это нужно для того чтобы настроить рабочий комп: не лазить в консоли с ковыряниями а просто файлик запустить чтобы он по сценарию и папки создал и смонтировал их и настройки сделал. сейчас я все отрепетировал на тестовом ноуте и все работает в удовлетворительном режиме. Теперь мне надо те же манипуляции сделать с рабочим компом. есть ли смысл искать информацию по этому вопросу?

Alexey :
Приветствую! Не совсем понял, вам нужно выполнить одноразовое действие? Если так, ИМХО, быстрее получится настроить руками, чем программировать скрипт. В любом случае, как минимум, можно всё, что вы вводите в консоли, поместить в файл скрипта и запускать его вручную или добавить в автозагрузку. Для добавления строк в файл /etc/fstab можно использовать echo вместе с sudo. То есть заскриптовать можно абсолютно любые действия, но на отладку скрипта уйдёт больше времени, чем выполнить один раз вручную. Если затруднение вызывают консольные текстовые редакторы (чтобы добавить строку в /etc/fstab), то самый простой из них это nano, или если доступ к удалённой системы осуществляется по SSH, то можно смонтировать удалённую файловую систему (без SMB, нужен только SSH) и работать с удалённой файловой системой как с локальной, подробности в «Сетевая файловая система SSHFS».
Здравствуйте. Благодарю за ответ. Со скриптом удалось разобраться еще быстрей чем с доступом к папкам виндос. Сделал самый простейший скрипт скопировав в него команды из вашей статьи. Теперь настройка доступа в линуксе занимает 15 сек. Спасибо за вашу работу!
Общие папки
4.Прописываем в smb.conf следующие параметры
Вводим команду, вставляем текст, нажимаем Enter и, затем, Ctrl+D.
cat >>/etc/samba/smb.conf
[global] dos charset = CP866 unix charset = utf8 display charset = cp1251 workgroup = WORKGROUP #имя рабочей группы server string = Filestore #имя сервера security = USER #группа пользователей map to guest = Bad User [Public] #имя ресурса path = /home/docstore #путь к папке read only = Yes guest ok = Yes browseable = yes writable = yes create mask = 0777 force create mask = 0777 directory mask = 0777
Перезапускаем сервис SMB:
service smb restart;service nmb restart
systemctl enable smb.service;systemctl enable nmb.service
Добавление второй папки
Делаем так же как и в первом шаге, только добавляем раздел с описанием второго ресурса ниже первого.
В первом примере у нас Public и папка docstore. Во втором будет Share и files.
mkdir /home/files;chmod 777 /home/files
2.Прописываем в smb.conf следующие параметры (без //комментариев)
Вводим команду, вставляем текст, нажимаем Enter и, затем, Ctrl+D.
cat >>/etc/samba/smb.conf
[Share] path = /home/files read only = Yes guest ok = Yes browseable = yes writable = yes create mask = 0777 force create mask = 0777 directory mask = 0777
3.Перезапускаем сервис SMB:
service smb restart;service nmb restart
Папка с паролем
Создадим пользователя в системе, имя пользователя share, его пароль 1q@W3e, при создании сделаем каталог пользователя (ключ -m) и зададим пароль (ключ -p).
# useradd -m share -p 1q@W3e
Назначим нового владельца, пользователя share, и несколько изменим разрешения:
mkdir /home/kadry;chmod 777 /home/kadry # chown -R share:users /home/kadry # chmod -R ugo+rwx /home/kadry
Примечание: Утилита smbpasswd находится в пакете samba-client
Добавляем пользователя в Samba (вводим пароль 1q@W3e):
smbpasswd -a share
Добавим в samba.cfg следущее:
[Kadry] comment = Кадры path = /home/kadry read only = no guest ok = no browseable= yes writable=yes create mask = 0777 directory mask = 0777 force user = share force group = users
Папка будет доступна пользователю share с паролем 1q@W3e.
Перезапускаем сервис SMB:
service smb restart;service nmb restart
Настройки соединения с сервером
GUI
Введите в адресной строке адрес хранилища:
smb://172.16.0.2
Введите, если нужно, пароль.
Примечание: при подключении с паролем автоматически прописывается рабочая группа WORKGROUP. Проверьте на сервере рабочую группу в файле /etc/samba/smb.conf.
Через командную строку
- С паролем
mount -t cifs //172.16.0.2/kadry /mnt/share -o users,username=share,password="1q@W3e",file_mode=0777,dir_mode=0777
mount -t cifs //172.16.0.2/public /mnt/guest -o users,username=guest,password=,file_mode=0777,dir_mode=0777
Через Autofs
Источники:
- Общий каталог — создание, совместный доступ, подключение
- Простой Samba-сервер. Доступ всем на все.
- Samba доступ к папкам с паролем и без
- Включаем службу DHCP на ALT Linux 7.0 Server
Дополнительная информация
- Расшаривание каталогов обычным пользователем
- Пример настройки smb.conf для «файлопомойки»
- Монтирование_ресурса_Самбы_через_/etc/fstab
- Прозрачный доступ к samba-ресурсам с помощью smbnetfs
- Некоторые_типовые_проблемы_при_использовании_samba
Как в операционной системе Linux увидеть сетевую папку Windows?
Чтобы воспользоваться сетевыми папками общей сети в операционной системе Linux нужно ее смонтировать, есть несколько вариантов для достижения цели:
Монтирование сетевой папки Windows в Linux через fstab:
- yum install samba-client samba-common cifs-utils;
- mkdir /mnt/windows (или выбрать и создать любую другую папку, в которой будет доступна сетевая папка);
- Прописать в файле /etc/fstab (для автоматического монтирования при загрузке системы) //адрес_папки_в_сети/win/mnt/gsa cifs. iocharset=utf8,uid=500,gid=500,suid, workgroup=domain.local,credentials=/root/password.txt 0 0;
Допустим сетевая папка находится и доступна по адресу \\192.168.1.2\.
То мы получим такой вид записи : //192.168.1.2/win /mnt/gsa cifs iocharset=utf8,uid=500,gid=500,suid,workgroup=domain.local,credentials=/root/password.txt 0 0.
Монтирование сетевой папки Windows в Linux вручную:
mount -t cifs ‘\\адрес_в_сети\win’ /mnt/win -o sername=user1,password=password1,workgroup=company.local,rw,iocharset=utf8,uid=500,gid=500