- Книга по SMB и Samba на русском языке. Оглавление
- Samba — это SMB для Linux
- Как в Linux увидеть все компьютеры Windows с совместными ресурсами
- Как в Linux вывести доступные по сети ресурсы (совместные папки и принтеры Windows)
- Как подключиться к сетевой папке Windows из Linux
- Подключение к SMB папке, требующий авторизации
- Команды SMB в Linux
- Выводит все доступные команды:
- Переход в другой каталог (смена текущей рабочей директории) на удалённой системе:
- Удаление файла в шаре:
- Показ файлов и папок в текущей папке:
- Скачать файлы с общей папки:
- Выгрузка файла на общую папку:
- Включение и отключение рекурсии
- Показ всей возможной информации о файле:
- Копирование файла на сервере:
- Создание директории:
- Удаление директории:
- Удаление файлов
- Переименование файлов:
- Ссылки
- Выход с сервера:
- Вывод истории команд текущей сессии:
- Просмотр содержимого текстового файла:
- Показ текущей рабочей директории:
- Создание и извлечение архивов tar
- Установка таймаута операций:
- Установка нового соединения:
- Закрытие сессии, выход:
- Вывод списка открытых подключений:
- Отображение текущего активного подкючения:
- Изменение удалённой директории (переход на одну папку выше):
- Выполнение команд в локальной системе:
- Автоматическое выполнение команд в сетевой папке Windows
- Как смонтировать общую папку Windows/Samba в Linux
- Настройка автоматического монтирования сетевой папки в Linux
- Как создать общую сетевую папку в Samba
- Ошибки smbtree
- smbc_opendir: No such file or directory
- Segmentation fault
- smbtree ничего не выводит и «подвисает»
- Связанные статьи
- Об авторе
- Подготовка сервера
- 1. Время
- 2. Брандмауэр
- Установка и запуск Samba
- Сетевая корзина
- Подключение к шаре
- Windows
- Linux
- Монтирование
- SMB Browser
- Некоторые опции Samba
- 1. hosts allow
- 2. hosts deny
- 3. interfaces
- 4. Force User/Group
- 5. Include
- Читайте также
- Introduction
- Prerequisites
- Enable Name Resolution
- Install cifs-utils
- Manual mounting from the command line
- Most basic mount command
- Unmounting
- Mount with read/write access
- Mount with authentication — next line
- Mount with authentication — same line
- Mount with authentication — file
- Now we need to create our creds.txt file
- FSTAB
- FSTAB with inline authentication
Книга по SMB и Samba на русском языке. Оглавление
1. SMB: настройка общей сетевой папки в Windows
2. SMB и Samba в Linux: подключение к общей папке Windows, создание сетевых папок в Linux
2.1. Samba — это SMB для Linux
2.2 Как в Linux увидеть все компьютеры Windows с совместными ресурсами
2.3 Как в Linux вывести доступные по сети ресурсы (совместные папки и принтеры Windows)
2.4 Как подключиться к сетевой папке Windows из Linux
2.5 Команды SMB в Linux
2.6 Автоматическое выполнение команд в сетевой папке Windows
2.7 Как смонтировать общую папку Windows/Samba в Linux
2.8 Настройка автоматического монтирования сетевой папки в Linux
2.9 Как создать общую сетевую папку в Samba
3. Аудит безопасности 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
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
sudo smbclient //HACKWARE-MIAL/Share -N
Если вы хотите, чтобы при подключении была изменена текущая рабочая директория в сетевой папке, то есть чтобы была открыта другая папка, то используйте опцию -D. К примеру, я хочу подключиться к папке NewFolder, тогда команда следующая:
sudo smbclient //HACKWARE-MIAL/Share -N -D NewFolder
Подключение к SMB папке, требующий авторизации
sudo smbclient //ИМЯ-КОМПЬЮТЕРА/Папка -U ИМЯ-ПОЛЬЗОВАТЕЛЯ
В моём случае это команда:
sudo smbclient //HACKWARE-MIAL/ShareRestricted -U ShareOverlord
Команды SMB в Linux
Доступны следующие интерактивные команды:
Выводит все доступные команды:
help
Для показа справки по определённой команде, выполните
help КОМАНДА
Переход в другой каталог (смена текущей рабочей директории) на удалённой системе:
cd ПАПКА
Переход в другую директорию на локальной системе:
lcd
Удаление файла в шаре:
del ИМЯ_ФАЙЛА
Имеется псевдоним этой команды:
rm ИМЯ_ФАЙЛА
И ещё одна команда со схожей функцией:
deltree ШАБЛОН_ИМЕНИ
Эта команда рекурсивно удалить все совпавшие с шаблоном имени файлы и директории.
Показ файлов и папок в текущей папке:
dir
Имеется псевдоним этой команды:
ls
И ещё один, даже более короткий псевдоним:
l
Скачать файлы с общей папки:
get <ИМЯ_УДАЛЁННОГО_ФАЙЛА> [ЛОКАЛЬНОЕ_ИМЯ]
Для повторного скачивания файла:
reget <ИМЯ_УДАЛЁННОГО_ФАЙЛА> [ЛОКАЛЬНОЕ_ИМЯ]
Для скачивания всех файлов, чьём имя совпадает с шаблоном:
mget ШАБЛОН_ИМЕНИ
mget "*.exe"
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 СТАРОЕ_ИМЯ НОВОЕ_ИМЯ
Выход с сервера:
q
quit
exit
Вывод истории команд текущей сессии:
history
Просмотр содержимого текстового файла:
more УДАЛЁННЫЙ_ФАЙЛ
Показ текущей рабочей директории:
pwd
Current directory is \\HACKWARE-MIAL\Share\
Другой вариант показа текущей рабочей директории — это команда cd без аргументов:
cd
Current directory is \
Создание и извлечение архивов tar
tar c АРХИВ.tar ФАЙЛ1 ФАЙЛ2 ФАЙЛ3
tar c all.tar all-databases.sql besside.log ChromeSetup.exe
Если нужно разархивировать файл на локальной системе и всё его содержимое отправить на удалённую общую папку, то запустите команду вида:
tar x АРХИВ.tar
К примеру, я хочу отправить содержимое архива all.tar в общую папку:
tar x all.tar
Для установления режимов tar используется команда
tarmode <full|inc|reset|noreset>
Установка таймаута операций:
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
sudo mkdir /mnt/share
sudo chown ПОЛЬЗОВАТЕЛЬ /ПУТЬ/ДО/ТОЧКИ/МОНТИРОВАНИЯ/ШАРЫ
Чтобы узнать имя текущего пользователя выполните команду:
echo $USER
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 — эта кодировка позволяет работать с именами файлов, в которых используются не только латинские буквы
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
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
Если сетевая папка успешно смонтировалась, значит можно выполнить проверку перезагрузкой.
//ИМЯ-КОМПЬЮТЕРА/Папка /точка/монтирования 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
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
\\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%)
- Установка Kali Linux (RANDOM — 50%)
Если вы администрируете какой-либо сервер, у вас может возникнуть необходимость создать общую папку, к которой будут иметь доступ все пользователи на сервере. Например, необходимо, чтобы они имели возможность создавать в ней файлы и все эти файлы были доступны всем пользователям на сервере.
В этой небольшой статье мы рассмотрим как настраиваются общие папки Linux с помощью стандартной системы полномочий Linux.
Как вы знаете, в Linux есть своя система полномочий для файлов и папок, в которой можно разрешить чтение, запись и выполнение для пользователя владельца, определённой группы пользователей и всех остальных. Если вы забыли как это работает ознакомьтесь со статьей Права доступа к файлам и Группы пользователей Linux.
Сначала давайте создадим саму папку:
Если надо разрешить доступ к папке всем, то достаточно установить такие права:
Эти две команды аналогичны. Они включают для владельца файла полный доступ к нему, а для группы и всех остальных — только чтение и запись. Опция -R позволяет применить изменения рекурсивно ко всем подпапкам и файлам в этом каталоге. Для того чтобы разрешить вообще всё используйте маску прав 777:
Теперь все пользователи смогут не только создавать и читать файлы в этой папке, но и выполнять их.
Если же надо чтобы папка была доступна только нескольким пользователям, надо объединить их в группу. Например, в группу project. Если такой группы не существует, создайте её:
sudo groupadd project
Затем группу папки надо изменить на project. Для этого можно воспользоваться командой chgrp:
Осталось сделать права для этой папки. Кроме стандартных прав, которые разрешают чтение, запись и выполнение файлов для группы project нам необходимо установить SGID бит. Если этот флаг устанавливается для файла, то он позволяет выполнять этот файл с правами группы файла, но если он устанавливается для папки, то все файлы и папки, создаваемые в ней будут получать ту же группу что и у этой папки. Это как раз то, что нам надо:
Маска прав 774 разрешает всё группе и владельцу, и разрешает только чтение всем остальным. Можно запретить им и чтение заменив 4 на 0, получится 770. После этого оба пользователя losst и losst1 смогут создавать файлы в этой папке, а также оба получат доступ к созданным файлам.
Как видите всё очень просто. А если вам надо создать общую папку, доступную по сети посмотрите на статью про настройку NFS или Samba.
Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.
Об авторе
Основатель и администратор сайта losst.ru, увлекаюсь открытым программным обеспечением и операционной системой Linux. В качестве основной ОС сейчас использую Ubuntu. Кроме Linux, интересуюсь всем, что связано с информационными технологиями и современной наукой.
Используемые термины: Samba, Ubuntu, SMB.
Samba позволяет настроить файловое хранилище различных масштабов — от малых офисов для крупных организаций. В данной инструкции мы рассмотрим процесс настройки файлового сервера. Сначала мы выполним установку и базовую настройку с предоставлением гостевого доступа. После будет приведены примеры разграничения доступа по пользователям, группам и пользователям Active Directory.
Подготовка сервера
1. Время
Для корректного отображения дат, необходимо позаботиться о синхронизации времени. Для этого будем использовать демон chrony. Установим его:
apt-get install chrony
Разрешим автозапуск сервиса:
systemctl enable chrony
2. Брандмауэр
По умолчанию, в системах на базе Debian брандмауэр разрешает все соединения. Но если в нашем случае мы используем брандмауэр, необходимо открыть порты:
iptables -I INPUT -p tcp —dport 445 -j ACCEPT
iptables -I INPUT -p udp —dport 137:138 -j ACCEPT
iptables -I INPUT -p tcp —dport 139 -j ACCEPT
* где порт 445 используется для samba, а порты 137, 138 и 139 — для работы NetBIOS (использование имени компьютера для доступа).
apt-get install iptables-persistent
Установка и запуск Samba
Установка выполняется из репозитория одной командой:
apt-get install samba
Разрешаем автостарт сервиса:
systemctl enable smbd
И проверим, что сервис запустился:
systemctl status smbd
Проверяем, что сервер самба позволяет к себе подключиться. Для этого можно с компьютера обратиться к серверу по SMB, например, на компьютере с Windows это можно сделать из проводника, прописав путь к серверу с двух слэшей:
Если мы настроили сервер правильно, система откроет пустую папку. На данном этапе проверка закончена и мы можем переходить к созданию первой шары.
Разберем самый простой пример предоставления доступа к папке — анонимный доступ всем пользователям без запроса пароля.
Открываем на редактирование конфигурационный файл samba:
И добавляем настройку для общей папки:
- [Общая папка] — имя общей папки, которое увидят пользователи, подключившись к серверу.
- comment — свой комментарий для удобства.
- path — путь на сервере, где будут храниться данные.
- public — для общего доступа. Установите в yes, если хотите, чтобы все могли работать с ресурсом.
- writable — разрешает запись в сетевую папку.
- read only — только для чтения. Установите no, если у пользователей должна быть возможность создавать папки и файлы.
- guest ok — разрешает доступ к папке гостевой учетной записи.
- create mask, directory mask, force create mode, force directory mode — при создании новой папки или файла назначаются указанные права. В нашем примере права будут полные.
Создаем каталог на сервере и назначим права:
mkdir -p /data/public
chmod 777 /data/public
Применяем настройки samba, перезагрузив сервис:
systemctl restart smbd
Теперь создадим каталог, в который вход будет разрешен только авторизованным пользователям.
Открываем конфигурационный файл samba:
Добавляем настройку для новой папки:
* эти настройки, во многом, похожи на те, что использовались в примере выше. Вот основные различия:
- path = /data/staff — используем новый путь до папки.
- public = no — запрещаем публичный доступ.
- guest ok = no — не разрешаем гостевое подключение.
Создаем каталог для новой папки:
Задаем права на созданный каталог:
chmod 777 /data/staff
Создаем пользователя в системе Linux:
* где staff1 — имя пользователя.
Задаем пароль для пользователя:
Теперь создадим пользователя в samba:
systemctl restart smbd
Если мы авторизованы на компьютере, с которого пытаемся подключиться к серверу, под той же учетной записью, что создали для доступа к папке, samba может и не потребовать аутентификации.
Теперь создадим папку, доступ к которой будут иметь ограниченное количество пользователей.
Открываем конфигурационный файл samba:
Добавляем настройку для новой папки:
* стоит обратить внимание на следующие настройки:
- path = /data/private — используем новый путь до папки.
- writable = no и read only = yes — в данном примере мы разрешим запись в каталог только некоторым пользователям. Поэтому общие настройки, разрешающие запись в папку, должны быть запрещены.
- valid users — список пользователей, которым разрешено подключаться к каталогу. В данном примере разрешения работают для пользователей admin, staff2 и staff3, а также для всех, кто входим в группу privateusers.
- write list — список пользователей, которые имеют доступ к папке на чтение и запись. В данном примере мы разрешаем это только для пользователей admin и staff2.
- inherit owner — опция позволяем включить наследование владельца при создании папок и файлов.
* если мы хотим, чтобы доступ к каталогу был полный у определенных пользователей (без разделения на тех, кто может только читать и тех, кто может также писать в папку), то опцию write list можно не указывать, а опции writable и read only оставить как в примерах выше.
Создаем каталог для новой папки:
Задаем права на созданный каталог:
chmod 777 /data/private
Для применения настроек перезапускаем samba:
systemctl restart smbd
Создать группу пользователей можно командой:
Добавить ранее созданного пользователя в эту группу:
Подробнее о работе с учетными записями в Linux.
Проверяем возможность работы с новым каталогом.
Сетевая корзина
При удалении файлов из общей папки, данные удаляются навсегда. Но мы можем настроить сетевую корзину — скрытый каталог, в который будут перемещаться удаляемые с самбы объекты.
Открываем конфигурационный файл:
- vfs objects = recycle — использовать подсистему recycle.
- recycle:repository — где хранить удаленные объекты. В данном примере удаленные файлы попадут в скрытый каталог .recycle к котором создастся каталог с именем пользователя, удалившего файл или папку.
- recycle:keeptree — удалять объекты с сохранение дерева каталогов.
- recycle:touch — изменить ли дату изменения файла при его перемещении в корзину.
- recycle:versions — при удалении файлов с совпадающими именами, добавлять номер версии.
- recycle:maxsize — не помещать в корзину файлы, размер которых больше заданного параметра (в байтах). В данном примере, помещать файлы любого размера.
- recycle:exclude — исключить файлы.
- recycle:exclude_dir — исключить каталог.
Создаем каталог и задаем права:
systemctl restart smbd
Пробуем зайти в сетевой каталог Recycle и создать, а после удалить файл. Он должен оказаться к скрытой папке .recycle.
Для автоматической чистки сетевой корзины можно создать скрипт:
* в данном скрипте мы ищем все файлы в каталоге /data/recycle/.recycle, которые старше 30 дней и удаляем их.
Разрешаем запуск скрипта:
chmod +x /scripts/cleanrecycle.sh
Создаем задание в планировщике:
0 5 * * * /scripts/cleanrecycle.sh
* в данном примере мы будем запускать скрипт по очистке сетевой корзины каждый день в 05:00.
Подключение к шаре
Теперь разберем примеры подключения к нашим шарам из разных систем.
Windows
Для разового подключения можно использовать проводник, прописав в нем адрес сервера через косые линии:
Для подключения сетевого диска, который будет автоматически создаваться при запуске системы, в проводнике сверху нажимаем Простой доступ — Подключить как диск:
В открывшемся окне прописываем путь до сетевой папки и выбираем имя диска:
Сетевой диск настроен.
Но мы может сделать те же действия из командной строки:
net use x: \\samba.dmosk.local\AD ACL /persistent:yes
* где x: — имя сетевого диска; \\samba.dmosk.local\AD ACL — путь до сетевого каталога; persistent:yes — указывает на то, что нужно восстанавливать данный диск каждый раз при входе в систему.
Linux
Монтирование
В Linux мы можем монтировать удаленный каталог с помощью команды mount, например:
Подробнее, процесс монтирования описан в инструкции Как в Linux монтировать шару CIFS.
SMB Browser
Также мы можем увидеть содержимое удаленных папок на samba при помощи клиента smb. Для начала установим данного клиента:
а) на Red Hat / CentOS / Fedora:
yum install samba-client
б) на Debian / Ubuntu / Mint:
apt-get install samba-client
Также мы можем подключиться к конкретной папке, например:
Мы подключимся клиентом samba — можно выполнить запрос на показ содержимого:
smb: \> ls
Или полный список возможных команд:
Некоторые опции Samba
Рассмотрим некоторые полезные опции, которые могут пригодится при настройке Samba.
1. hosts allow
Пример использования параметра.
hosts allow = comp1, 192.168.1., 192.168.160.0/255.255.252.0
* в нашем примере мы разрешим доступ только для компьютера comp1, компьютеров из сетей 192.168.1.0/24 и 192.168.160.0/22.
2. hosts deny
Параметр аналогичный hosts allow, только он наоборот — запрещает доступ для хостов и сетей. Например:
hosts deny = comp2, 192.168.2., 192.168.164.0/255.255.252.0
hosts deny = ALL EXCEPT 192.168.3.
3. interfaces
По умолчанию samba использует все сетевые интерфейсы, кроме локальной петли (127.0.0.1). Параметр interfaces позволит указать, на каком сетевом адаптере файловый сервер должен принимать запросы. Пример:
interfaces = ens32 192.168.1.15/24 192.168.2.15/255.255.255.0
4. Force User/Group
Прописывается для шары:
* данная настройка позволит подключаться к шаре под пользователем apache.
5. Include
Позволяет подключить дополнительный файл с конфигурацией.
Читайте также
Возможно, эти инструкции будут также Вам полезны:
1. Установка и настройка samba в Linux CentOS.
2. Как настроить автоматическое монтирование дисков в Linux.
3. Настройка дисковых квот в Linux.
В современных дистрибутивах Linux уже можно совершенной спокойно путешествовать по сетевым дискам. Но куда удобнее если смонтировать сетевой диск сразу в папку, да еще и на рабочем столе, красота. Я создал папку с общим доступом на сервере Hyper-V, её и буду монтировать. Монтирование SMB буду делать под специально заведенным пользователем, дабы не светить пароль админа.
Монтируемая папка
Монтируемая директория доступна только администраторам и пользователю smb (создан специально для монтирования). Сделать общую папку на сервере Windows можно двумя способами: 1 — через свойства папки; 2 — через Powershell. Через свойства папки проще и быстрее как для новичка.
Но в моем случае с сервером HyperV 2019 сработал только второй способ, через Powershell.
New-SmbShare -Name "smb_mount" -Path "F:\smb_mount" -FullAccess "Administrator", "smb"
Общая папка у меня доступна по пути \\hvs19\smb_mount, но монтировать я буду ее по ip адресу. Принципиального вопроса как монтировать нет, просто не всегда есть возможность использовать имя.
С монтируемой папкой закончили, создадим папку куда будем монтировать. Я создал папку в /opt и назвал её F (по имени диска где лежит монтируемая папка) для удобства.
Установим набор утилит для монтирования SMB
Для Ubuntu (и прочих Debian`ов)
sudo apt-get install cifs-utils
Для Centos 8 (и прочих RPM дистрибутивов на YUM)
sudo yum install cifs-utils
Монтирование SMB
Все необходимые папки мы создали, теперь приступим к монтированию файловой системы.
sudo mount -t cifs -o username=smb,password=пароль //192.168.1.110/smb_mount /opt/F
Пройдемся по параметрам:
- -t cifs — тип файловой системы cifs (полностью совместим с SMB)
- username — пользователь у которого есть доступ к монтируемой папке (на сетевом диске). Если разрешено, можно использовать гостя, без пароля. В таком случае указываем username=guest
- password — пароль от учетной записи этого пользователя
- //192.168.1.110/smb_mount — общая папка на сервере которую монтируем
- /opt/F — папка куда монтируем.
Посмотрим что все получилось, проверим свободное место в сетевой папке
Можно использовать дополнительные возможности при монтировании, используя ключи после параметра -o. Вот некоторые из них
- rw — запись и чтение
- ro — только чтение
- iocharset=utf8 — в данной кодировке будет выводится информация;
- codepage=cp866 — кодировка используемая на сервере с общей папкой. Обычно Windows устанавливает кодировку cp866.
- vers=3.0 — принудительно указать версию подключения SMB протокола. Для безопасного подключения используйте последнюю версию.
Используя команду mount мы монтируем папку в ручном режиме и после перезагрузки монтирования не произойдет. Для автоматического монтирования папки читаем следующий раздел.
Автоматическое монтирование SMB
Для постоянного монтирования папке при старте системы необходимо внести изменения в файл /etc/fstab. При монтировании сетевого диска с SMB используется пароль. Для большей сохранности не будем указывать его в файле fstab, а сохраним в директории root.
Создадим файл с учетными данными
Добавим в файл строки: имя пользователя, пароль, домен (если используется). У меня домена нет, поэтому добавлю только имя и пароль
username=smb password=пароль domain=mydomain
Откроем файл /etc/fstab для редактирования
Добавим новую строку в конец файла
//192.168.1.110/smb_mount /opt/F cifs user,rw,credentials=/root/.cifsmnt 0 0
Сохраним файл и перезагрузим компьютер. После этого сетевая папка будет монтироваться автоматически.
Разберем указанные параметры
- //192.168.1.110 — ip адрес сервера где находится сетевая папка
- /smb_mount — сетевая папка на указанном выше сервере
- /opt/F — папка на локальном компьютере куда будем монтировать сетевую папку
- cifs — тип монтируемой файловой системы
- user — разрешение монтировать для любого пользователя
- rw — разрешения на чтение/запись на диск при монтировании
- credentials — путь к файлу с данными учетной записи используемых для подключения по SMB
- 0 — не использовать дамп
- 0 — не проверять файловую систему при старте программой fsck
Права на папки и файлы
Примонтированный диск по умолчанию монтируется от root и разрешает запись на диск только под ним. Рассмотрим опции позволяющие изменить доступ на примонтированные папки и файлы. Также рассмотрим настройки по смене владельца смонтированной папки.
- uid — задает владельца каталога. Узнать uid пользователей можно в файле /etc/passwd
- gid — задает группу владельца каталога. Узнать gid групп можно в файле /etc/passwd
- file_mode=0777 — права на доступ к файлам. 0777 — разрешено запись/чтение всем.
- dir_mode=0777 — права на доступ к папкам. 0777 — разрешено запись/чтение всем.
Пример записи в файле /etc/fstab монтирования от моего пользователя (не root) с полным доступом ко всем файлам и папкам
//192.168.1.110/smb_mount /opt/F cifs user,rw,credentials=/root/.cifsmnt,file_mode=0777,dir_mode=0777,uid=1000,gid=1000 0 0
Размонтирование SMB
Размонтировать сетевую папку SMB можно используя команду umount
В параметрах команды umount указываем директорию куда была смонтирована сетевая папка. В моем случае это /opt/F
Если смонтированная файловая система сейчас занята, появится сообщение umount: target is busy . В таком случае размонтировать получиться с ключом -l
Решение проблем монтирования
Если по какой либо причине после ваших попыток папка все же не монтируется, необходимо смотреть системный журнал.
grep "cifs" /var/log/syslog
Хотите отблагодарить автора статьи? Это даст ему дополнительный стимул к написанию новых статей.
Introduction
Prerequisites
- A machine running Ubuntu 14.04 or newer
- A machine running Windows XP or newer
- The IP address or hostname of the Windows machine
- The name of the file share on the Windows machine
- A Windows username and password with permission to the file share
- root access to the Ubuntu machine. Pretty much every command on this page requires root.
Enable Name Resolution
This optional step requires Ubuntu 18.04 or newer and allows you to use the hostname of your windows machines instead of its IP address.
First, install winbind and libnss-winbind
apt install winbind libnss-winbind
then, edit nsswitch.conf and find the line that starts with «hosts» and add «wins» after «files»
nano /etc/nsswitch.conf
systemctl restart winbind
Install cifs-utils
To be able to control the kernel’s cifs client, you’ll need to install cifs-utils:
apt install cifs-utils
Manual mounting from the command line
All of these commands require root permission, so let’s just start bash with root so we don’t have to type sudo on everything:
sudo bash
You’ll need to create a folder to host the mount point:
mkdir /mnt/share1
Most basic mount command
This command will only work if the windows machine as the “Turn OFF password protected sharing” option set.
Let’s start out with the most basic form of the mount command that actually works:
mount //win10/share1 /mnt/share1
Unmounting
To UNmount it:
umount /mnt/share1
(notice it’s not unmount, it’s umount)
Mount with read/write access
mount -o noperm //win10/share1 /mnt/share1
Mount with authentication — next line
mount -o noperm,username=john,domain=domain1 //win10/share1 /mnt/share1
When it asks for a password, enter the windows password that goes with the windows account.
-o means mount options are specified next
noperm means “client does not do permission check”
replace “domain1” with the name of your active directory domain. If you don’t know what an active directory domain is, you don’t have one, so just leave this option blank or remove it.
replace “win10” with the hostname of your windows machine
Mount with authentication — same line
mount -o noperm,username=john,password=123,domain=domain1 //win10/share1 /mnt/share1
-o means mount options are specified next
noperm means “client does not do permission check”
replace “123” with the windows password
replace “domain1” with the name of your active directory domain. If you don’t know what an active directory domain is, you don’t have one, so just leave this option blank or remove it.
replace “win10” with the hostname of your windows machine
Mount with authentication — file
mount -o noperm,credentials=/root/creds.txt //win10/share1 /mnt/share1
-o means mount options are specified next
noperm means “client does not do permission check”
replace “win10” with the hostname of your windows machine
Now we need to create our creds.txt file
nano /root/creds.txt
username=john password=123 domain=domain1
replace “123” with the windows password
replace “domain1” with the name of your active directory domain. If you don’t know what an active directory domain is, you don’t have one, so just leave this option blank or remove it.
You can make it readable only by root:
chmod 600 /root/creds.txt
FSTAB
If you want to have persistent mounts, so that the mounts get mounted automatically at boot time, you can use the fstab file.
nano /etc/fstab
//win10/share1 /mnt/share1 cifs noperm,_netdev 0 0
replace “win10” with the hostname of your windows machine
cifs tells the kernel to use mount.cifs as opposed to ext3 or ntfs or some other type of file system
_netdev will cause the kernel to wait on the network to become ready before attempting the mount. Without this option, the mount will probably fail during boot because the network won’t be ready yet
the 2 zeros tell the kernel we don’t want to dump or check the filesystem
Now you can mount and unmount with very simple commands:
mount /mnt/share1 umount /mnt/share1
FSTAB with inline authentication
//win10/share1 /mnt/share1 cifs noperm,_netdev,username=john,password=123,domain=domain1 0 0
replace “win10” with the hostname of your windows machine
cifs tells the kernel to use mount.cifs as opposed to ext3 or ntfs or some other type of file system
_netdev will cause the kernel to wait on the network to become ready before attempting the mount. Without this option, the mount will probably fail during boot because the network won’t be ready yet
replace “123” with the windows password
replace “domain1” with the name of your active directory domain. If you don’t know what an active directory domain is, you don’t have one, so just leave this option blank or remove it.
the 2 zeros tell the kernel we don’t want to dump or check the filesystem