zaLinux.ru

Как смонтировать сетевую папку 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. Поэтому при монтировании можно либо:

  1. Использовать вместо имён компьютеров IP адрес. В этом случае у компьютера с сетевой папкой должен быть постоянный (статичный) IP адрес
  2. Либо настроить преобразование имён для компьютеров 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/

Смотрите также: Как пользоваться командой chown для смены владельца и группы файла в Linux

Теперь для монтирования сетевой шары 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=

Рекомендуемые статьи:

7 Комментарии

  1. Ramix

    Здравствуйте. Большое спасибо за полезную статью. Получилось примонтировать

    расшаренную в windows 10 папку на астра-линукс. Но вот настроить автоматическое монтирование сетевой папки в Linux не удается. Извините ,но Ваши

    файлы smbcredentials и ShareRestricted только все запутали.

    А как должна выглядеть строка в файле fstab если у меня нет никаких паролей для входа в расшаренную папку ? Нигде не нашел, везде smbcredentials ))

    1. Alexey (Автор записи)

      Попробуйте так, должно сработать:

      //ИМЯ-КОМПЬЮТЕРА/Папка	/точка/монтирования	cifs	 username=guest,password=,uid=1000,iocharset=utf8,nofail	0	0

      Либо оставляем как есть:

      //ИМЯ-КОМПЬЮТЕРА/Папка	/точка/монтирования	cifs	credentials=/home/mial/.smbcredentials,uid=1000,iocharset=utf8,nofail	0	0

      Но в файл ~/.smbcredentials пишем следующее:

      username=guest
      password=
      
  2. Иван

    А смысла делать sudo chown /mnt/share/ $USER, если после монтирования (следующий шаг) права от $USER улетают и владельцем папки снова становится root.

    Suse11

    И вот как копировать файлы пользователя $USER в примонтированную папку-шару - большой вопрос

     

    1. Alexey (Автор записи)

      Здравствуйте! Верное замечание — поправил в статье. Спасибо, что обратили внимание!

  3. 692243

    Как автоматически смонтировать сетевую папку Windows/Samba в Linux, если компьютеры находятся в домене? Нужно так что б было: зашел один пользователь с компьютера №1 под своим логином и паролем-общая папка примонтировалась с его логином и паролем. на этом же компьютере №1-заходит другой пользователь со своим логином и паролем и опять надо чтобы общая папка примонтировалась уже с  его логином и паролем.

  4. Тоша

    Добрый день, а подскажите пожалуйста, а можно ли в этот файл "credentials=/home/ПОЛЬЗОВАТЕЛЬ/.smbcredentials" и другие логины и пароли прописать, а потом использовать совместно с другими серваками?

  5. Capello

    Добрый день! а как при монтировать общую папку, если сервер находится в домене, как в таком случае подключить с правами доменного пользователя?

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *