Contents
- Prerequisites
- CIFS installation
- Mounting unprotected (guest) network folders
-
Mount password protected network folders
- Special permissions
- Mount password protected shares using libpam_mount (Ubuntu 9.04)
-
Troubleshooting
- Login errors
- Unprotected network folder won’t automount
- Mount during login instead of boot
- Slow shutdown due to a CIFS/Network Manager bug
- CIFS Options Deprecated
- Use of tilde in pathnames such as «credentials=~/.smbcredentials»
This document describes how to mount CIFS shares permanently. The shares might be hosted on a Windows computer/server, or on a Linux/UNIX server running Samba. This document also applies to SMBFS shares, which are similar to CIFS but are deprecated and should be avoided if possible (link).
(This document does not describe how to host the shares yourself, only how to access shares that are hosted somewhere else. For hosting shares, use Samba.)
Prerequisites
We’re assuming that:
- Network connections have been configured properly.
-
Your local (Ubuntu) username is ubuntuusername.
-
Share username on Windows computer is msusername.
-
Share password on Windows computer is mspassword.
-
The Windows computer’s name is servername (this can be either an IP address or an assigned name).
-
The name of the share is sharename.
-
You want to mount the share in /media/windowsshare.
CIFS installation
sudo apt-get install cifs-utils
On older systems:
sudo apt-get install smbfs
Mounting unprotected (guest) network folders
First, let’s create the mount directory. You will need a separate directory for each mount.
sudo mkdir /media/windowsshare
Then edit your /etc/fstab file (with root privileges) to add this line:
//servername/sharename /media/windowsshare cifs guest,uid=1000,iocharset=utf8 0 0
Where
-
guest indicates you don’t need a password to access the share,
-
uid=1000 makes the Linux user specified by the id the owner of the mounted share, allowing them to rename files,
-
iocharset=utf8 allows access to files with names in non-English languages. This doesn’t work with shares of devices like the Buffalo Tera Station, or Windows machines that export their shares using ISO8895-15.
-
If there is any space in the server path, you need to replace it by 40, for example //servername/My40Documents
After you add the entry to /etc/fstab type:
sudo mount -a
This will (re)mount all entries listed in /etc/fstab.
Mount password protected network folders
The quickest way to auto-mounting a password-protected share is to edit /etc/fstab (with root privileges), to add this line:
//servername/sharename /media/windowsshare cifs username=msusername,password=mspassword,iocharset=utf8 0 0
This is not a good idea however: /etc/fstab is readable by everyone and so is your Windows password in it. The way around this is to use a credentials file. This is a file that contains just the username and password.
Using a text editor, create a file for your remote servers logon credential:
gedit ~/.smbcredentials
Enter your Windows username and password in the file:
username=msusername password=mspassword
Save the file, exit the editor.
Change the permissions of the file to prevent unwanted access to your credentials:
chmod 600 ~/.smbcredentials
Then edit your /etc/fstab file (with root privileges) to add this line (replacing the insecure line in the example above, if you added it):
//servername/sharename /media/windowsshare cifs credentials=/home/ubuntuusername/.smbcredentials,iocharset=utf8 0 0
Save the file, exit the editor.
Finally, test the fstab entry by issuing:
sudo mount -a
If there are no errors, you should test how it works after a reboot. Your remote share should mount automatically.
Special permissions
If you need special permission (like chmod etc.), you’ll need to add a uid (short for ‘user id’) or gid (for ‘group id’) parameter to the share’s mount options.
//servername/sharename /media/windowsshare cifs uid=ubuntuuser,credentials=/home/ubuntuuser/.smbcredentials,iocharset=utf8 0 0
In addition to the initial assumptions, we’re assuming that
-
Your username and password are the same on the Ubuntu machine and on the network drive.
Install libpam-mount:
sudo apt-get install libpam-mount
Edit /etc/security/pam_mount.conf.xml using your preferred text editor.
gksudo gedit /etc/security/pam_mount.conf.xml
First, we’re moving the user specific config bits to a file which users can actually edit themselves: remove the commenting tags (<!— and —>) surrounding the section called <luserconf name=».pam_mount.conf.xml» />. Save the file when done. With this in place, users can create their own ~/.pam_mount.conf.xml.
gedit ~/.pam_mount.conf.xml
Add the following:
<?xml version="1.0" encoding="utf-8" ?> <pam_mount> <volume options="uid=%(USER),gid=100,dmask=0700" user="*" mountpoint="/media/windowsshare" path="sharename" server="servername" fstype="cifs" /> </pam_mount>
Troubleshooting
Login errors
If you get the error «mount error(13) permission denied», then the server denied your access. Here are the first things to check:
- Are you using a valid username and password? Does that account really have access to this folder?
-
Do you have whitespace in your credentials file? It should be password=mspassword, not password = mspassword.
-
Do you need a domain? For example, if you are told that your username is SALESsally, then actually your username is sally and your domain is SALES. The fstab entry should read: …username=sally,password=pass,domain=SALES,… Or: …credentials=/path/to/file,domain=SALES,…
-
The security and version settings are interrelated. SMB1 is insecure and no longer supported by default. At first, try to not specify either security or version: do not specify sec= or vers=. If you still have authentication errors then you may need to specify either sec= or vers= or both. You can try the options listed at the mount.cifs man page. The man page list leaves out the option sec=lanman for some reason, but you should try that one as well (see discussion).
Unprotected network folder won’t automount
I’ve had a situation where an unprotected network folder wouldn’t automount during bootup, but after manually entering «sudo mount -a» was mounted correctly. I solved this by replacing the «guest» option by «username=guest,password=». If anyone has an explanation for this, please leave a comment.
//servername/sharename /media/windowsshare smbfs username=guest,password=,uid=1000,iocharset=utf8,codepage=unicode,unicode 0 0
Mount during login instead of boot
If for some reason/etc/rc0.d/S31umountnfs.sh (networking problems for example) the automatic mounting during boot doesn’t work, you can add the «noauto» parameter to your smbfs fstab entry and then have the share mounted at login.
In /etc/fstab:
//servername/sharename /media/windowsshare cifs noauto,credentials=/home/ubuntuusername/.smbpasswd 0 0
In /etc/rc.local:
mount /media/windowsshare exit 0
Slow shutdown due to a CIFS/Network Manager bug
If you use Network Manager, and are getting really slow shutdowns, it’s probably because NM shuts down before unmounting the network shares. That will cause CIFS to hang and wait for 60 seconds or so. Here’s how to fix it:/etc/rc0.d/S31umountnfs.sh
sudo ln -s /etc/init.d/umountnfs.sh /etc/rc0.d/K14umountnfs.sh sudo ln -s /etc/init.d/umountnfs.sh /etc/rc6.d/K14umountnfs.sh
Ubuntu 12.04 already runs umountnfs.sh at reboot and shutdown by default (/etc/rc0.d/S31umountnfs.sh and /etc/rc6.d/S31umountnfs.sh) so this is no longer necessary.
CIFS Options Deprecated
20 Feb 2008 TW
Using dmask or fmask in the fstab file produces the following warnings: WARNING: CIFS mount option ‘dmask’ is deprecated. Use ‘dir_mode’ instead. WARNING: CIFS mount option ‘fmask’ is deprecated. Use ‘file_mode’ instead.
Instead use this format: file_mode=0777,dir_mode=0777 . Or in some cases you might need to use file_mode=0777,dir_mode=0777,nounix (see discussion)
Use of tilde in pathnames such as «credentials=~/.smbcredentials»
20 Feb 2008 TW
Curiously, using credentials=~/.smbcredentials in fstab didn’t work. I had to use the full path, i.e. /home/username/.smbcredentials
(This is likely because the tilde «~» is only a shell short-hand alias for «$HOME»; it isn’t something recognized system-wide by all programs, especially not in a system file table where the concept of «HOME» doesn’t really exist. -Ian!)
CategoryDocumentation
Монтирование SMB не что иное как подключение сетевой папки WIndows в Linux. SMB (Server Message Block) — сетевой протокол удаленного доступа к сетевым ресурсам (файлы, папки, принтеры и т.п.). В первой версии протокола был известен также как CIFS (Common Internet File System). Протоком SMB повсеместно используется во всех ОС Microsoft Windows.
В современных дистрибутивах Linux уже можно совершенной спокойно путешествовать по сетевым дискам. Но куда удобнее если смонтировать сетевой диск сразу в папку, да еще и на рабочем столе, красота. Я создал папку с общим доступом на сервере Hyper-V, её и буду монтировать. Монтирование SMB буду делать под специально заведенным пользователем, дабы не светить пароль админа.
Монтируемая папка
Монтируемая директория доступна только администраторам и пользователю smb (создан специально для монтирования). Сделать общую папку на сервере Windows можно двумя способами: 1 — через свойства папки; 2 — через Powershell. Через свойства папки проще и быстрее как для новичка.
Но в моем случае с сервером HyperV 2019 сработал только второй способ, через Powershell.
New-SmbShare -Name "smb_mount" -Path "F:smb_mount" -FullAccess "Administrator", "smb"
Данной командой я сделал общей папку расположенную по пути F:smb_mount и присвоил ей имя smb_mount. Права на доступ к папке выдал пользователю Administrator и smb.
Общая папка у меня доступна по пути \hvs19smb_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
В системном журнале будет указана причина ошибки монтирования. Как пример не верный логин/пароль, не установленные утилиты cifs и т.п.
Хотите отблагодарить автора статьи? Это даст ему дополнительный стимул к написанию новых статей.
В операционных системах Linux и UNIX общий ресурс Windows можно смонтировать в определенной точке монтирования в дереве локальных каталогов, используя cifs
параметр mount
команды.
Общая файловая система Интернета (CIFS) — это сетевой протокол обмена файлами. CIFS является формой SMB.
Установка пакетов утилит CIFS
Чтобы смонтировать общий ресурс Windows в системе Linux, сначала необходимо установить пакет утилит CIFS.
-
Установка утилит CIFS в Ubuntu и Debian:
sudo apt update
sudo apt install cifs-utils
-
Установка утилит CIFS в CentOS и Fedora:
sudo dnf install cifs-utils
Имя пакета может отличаться в разных дистрибутивах Linux.
Монтирование удаленного общего ресурса Windows аналогично монтированию обычных файловых систем.
Сначала создайте каталог, который будет служить точкой монтирования для удаленного общего ресурса Windows:
sudo mkdir /mnt/win_share
Запустите следующую команду как пользователь root или пользователь с правами sudo для монтирования общего ресурса:
sudo mount -t cifs -o username=<win_share_user> //WIN_SHARE_IP/<share_name> /mnt/win_share
Вам будет предложено ввести пароль:
Password:
В случае успеха не выводится.
Чтобы убедиться, что удаленный общий ресурс Windows успешно смонтирован, используйте команду mount
или df -h
.
После монтирования общего ресурса точка монтирования становится корневым каталогом смонтированной файловой системы. Вы можете работать с удаленными файлами, как если бы они были локальными файлами.
Пароль также можно указать в командной строке:
sudo mount -t cifs -o username=<win_share_user>,password=<win_share_password> //WIN_SHARE_IP/<share_name> /mnt/win_share
Если пользователь находится в рабочей группе или домене Windows, вы можете установить его следующим образом:
sudo mount -t cifs -o username=<win_share_user>,domain=<win_domain> //WIN_SHARE_IP/<share_name> /mnt/win_share
Для большей безопасности рекомендуется использовать файл учетных данных, который содержит имя пользователя, пароль и домен общего ресурса.
Файл учетных данных имеет следующий формат:
/etc/win-credentials
username = user
password = password
domain = domain
Файл не должен быть доступен для чтения пользователям. Чтобы установить правильные разрешения и владельца , запустите:
sudo chown root: /etc/win-credentials
sudo chmod 600 /etc/win-credentials
Чтобы использовать файл учетных данных, определите его следующим образом:
sudo mount -t cifs -o credentials=/etc/win-credentials //WIN_SHARE_IP/<share_name> /mnt/win_share
По умолчанию подключенный общий ресурс принадлежит пользователю root, а разрешения установлены на 777.
Используйте dir_mode
опцию, чтобы установить разрешение каталога и file_mode
установить разрешение файла:
sudo mount -t cifs -o credentials=/etc/win-credentials,dir_mode=0755,file_mode=0755 //WIN_SHARE_IP/<share_name> /mnt/win_share
Пользователь по умолчанию и группа собственность могут быть изменены с uid
и gid
опциями:
sudo mount -t cifs -o credentials=/etc/win-credentials,uid=1000,gid=1000,dir_mode=0755,file_mode=0755 //WIN_SHARE_IP/<share_name> /mnt/win_share
Чтобы установить дополнительные параметры , добавьте их в виде списка через запятую после -o
параметра. Чтобы получить список всех опций монтирования, введите man mount
ваш терминал.
Авто монтаж
Когда общий ресурс монтируется вручную с помощью mount
команды, он не сохраняется после перезагрузки.
/etc/fstab
Файл содержит список записей , которые определяют , где , как и то , что файловая система будет смонтирована на старте системы.
Чтобы автоматически смонтировать общий ресурс Windows при запуске вашей системы Linux, определите монтирование в /etc/fstab
файле. Строка должна содержать имя хоста или IP-адрес ПК с Windows, имя общего ресурса и точку монтирования на локальном компьютере.
Откройте /etc/fstab
файл в текстовом редакторе :
sudo nano /etc/fstab
Добавьте следующую строку в файл:
/etc/fstab
# <file system> <dir> <type> <options> <dump> <pass>
//WIN_SHARE_IP/share_name /mnt/win_share cifs credentials=/etc/win-credentials,file_mode=0755,dir_mode=0755 0 0
Выполните следующую команду для монтирования общего ресурса:
sudo mount /mnt/win_share
Команда, будет читать содержание
mount /etc/fstab
и установить долю.
При следующей перезагрузке системы общий ресурс Windows будет смонтирован автоматически.
Команда umount
отсоединяет (размонтирует) смонтированную файловую систему от дерева каталогов.
Чтобы отсоединить подключенный общий ресурс Windows, используйте umount
команду с указанием либо каталога, в котором он был подключен, либо удаленного общего ресурса:
sudo umount /mnt/win_share
Если в fstab
файле CIFS есть запись в файле, удалите ее.
Команда umount
не сможет отсоединить общий ресурс, когда он используется. Чтобы узнать, какие процессы обращаются к общему ресурсу Windows, используйте fuser
команду:
fuser -m MOUNT_POINT
Найдя процессы, вы можете остановить их с помощью kill
команды и размонтировать общий ресурс.
Если у вас по-прежнему возникают проблемы с размонтированием общего ресурса, используйте параметр -l
( --lazy
), который позволяет размонтировать занятую файловую систему, как только она больше не будет занята.
sudo umount -l MOUNT_POINT
Вывод
В Linux вы можете смонтировать общий доступ к Windows, используя mount
команду с cifs
параметром.
Обновлено: 14.07.2021
Опубликовано: 18.07.2016
Что такое Linux и CIFS простыми словами.
Работа с общими папками Windows происходит с использованием протокола CIFS (SMB). Все примеры в данном руководстве выполняются на Linux Ubuntu и CentOS.
Подготовительная работа
Синтаксис mount
Ручное монтирование
Автоматическое монтирование
Примеры
Подготовка
Установка пакетов
Для монтирования общей папки необходимо установить набор утилит для работы с CIFS.
CentOS:
yum install cifs-utils
Ubuntu:
apt-get install cifs-utils
Сетевые порты
Если мы будем монтировать сетевую папку, сервер которой находится за брандмауэром, необходимо открыть следующие порты:
- 137/UDP
- 138/UDP
- 139/TCP
- 445/TCP
Синтаксис
mount.cifs <папка на сервере> <во что монтируем> <-o опции>
* вместо mount.cifs можно написать mount -t cifs.
Пример:
mount.cifs //192.168.1.1/public /mnt
* простой пример монтирования папки public на сервере 192.168.1.1 в локальный каталог /mnt.
Ручное монтирование
Теперь монтирование можно выполнить следующей командой:
mount.cifs //192.168.1.10/share /mnt -o user=dmosk
* в данном примере будет примонтирован каталог share на сервере 192.168.1.10 в локальную папку /mnt под учетной записью dmosk.
То же самое, с использованием домена:
mount.cifs //192.168.1.10/share /mnt -o user=dmosk,domain=dmosk.local
Автоматическое монтирование CIFS через fstab
Для начала создаем файл, в котором будем хранить данные авторизации при подключении к общей папке:
vi /root/.smbclient
И добавляем в него данные следующего вида:
username=dmosk
password=dPassw0rd
domain=dmosk.local
* в этом примере создана пара логин/пароль — dmosk/dPassw0rd; domain указывать не обязательно, если аутентификация выполняется без него.
Теперь открываем конфигурационный файл fstab:
vi /etc/fstab
и добавляем в него следующее:
//192.168.1.10/share /mnt cifs user,rw,credentials=/root/.smbclient 0 0
* в данном примере выполняется монтирование общей папки share на сервере с IP-адресом 192.168.1.10 в каталог /mnt. Параметры для подключения — user: позволяет выполнить монтирование любому пользователю, rw: с правом на чтение и запись, credentials: файл, который мы создали на предыдущем шаге.
Чтобы проверить правильность настроек, вводим следующую команду:
mount -a
Примеры использования опций
Версии SMB
Если на стороне Windows используется старая или слишком новая версия протокола SMB, при попытке монтирования мы можем получить ошибку mount error(112): Host is down. Чтобы это исправить, указываем версию:
mount.cifs //192.168.1.10/share /mnt/ -o vers=1.0
* монтирование по протоколу SMB1.0
Монтирование от гостевой учетной записи
Если сервер принимает запросы без логина и пароля, то клиент подключается, как гость:
mount.cifs //192.168.1.10/share /mnt -o guest
или в fstab:
//192.168.1.10/share /mnt cifs guest 0 0
Права на примонтированные каталоги
При монтировании папки мы можем указать определенные права:
mount.cifs //192.168.1.10/share /mnt -o file_mode=0777,dir_mode=0777
Для указания владельца, который будет назначен для примонтированного каталога, используем:
mount.cifs //192.168.1.10/share /mnt -o uid=33,gid=33
* чтобы посмотреть идентификаторы пользователя, вводим id -u <имя пользователя> и id -g <имя группы>.
В этой статье мы рассмотрим, как в Linux смонтировать общую сетевую папку, расположенную на хосте Windows. В Windows для доступа к общим сетевым папкам используется протокол SMB (Server Message Block, ранее назывался CIFS, Сommon Internet File System). В Linux для доступа к сетевым папкам Windows по протоколу SMB можно использовать клиент cifs-utils или Samba.
- Смонтировать сетевую папку в Linux с помощью cifs-util
- Linux: подключиться к сетевой папке с помощью клиента samba
Содержание:
Совет. Для доступа к сетевым папкам по SMB/CIFS используется порт TCP/445. Для разрешения имени используются UDP 137, 138 и TCP 139. Если эти порты закрыты, вы сможете подключиться к сетевой папке Windows только по IP адресу.
Смонтировать сетевую папку в Linux с помощью cifs-util
Вы можете смонтировать сетевую папку, находящуюся на Windows хосте, с помощью утилит из пакета cifs-util. Для установки пакета выполните команду:
- В Ubuntu/Debian:
apt-get install cifs-utils
- В CentOS/Oracle/RHEL:
dnf install cifs-utils
Теперь вы можете смонтировать сетевую папку вручную с помощью команды:
mount.cifs //192.168.200.30/docs /mnt
В предыдущем примере подразумевалось, что к общей сетевой папке на Windows предоставлен анонимный доступ. Если для доступа нужно аутентифицироваться под пользователем, используйте команду:
mount.cifs //192.168.200.30/docs /mnt -o user=localuser1
Если для подключения нужно использоваться доменную учетную запись пользователя:
mount.cifs //192.168.200.30/docs /mnt -o user=aivanov,domain=vmblog.ru
Совет. Если в имени сетевой шары есть пробелы, нужно заменить их на 40:
mount.cifs //192.168.200.30/shared40docs /mnt -o user=localuser1
Вы можете монтировать сетевую папку автоматически с помощью fstab. Для этого создайте файл с именем пользователя и паролем:
vim /root/.smbshare
Укажите имя пользователя, пароль и домен AD:
username=avvanov password=Pass123-y domain=vmblog.ru
И добавьте строку подключения SMB каталог в файл /etc/fstab
//192.168.200.30/docs /mnt cifs user,rw,credentials=/root/.smbshare 0 0
Параметр rw указывает, что папка будет доступна на чтение и запись.
Вы можете указать версию протокола SMB, которую нужно использовать для подключения (версия SMB 1.0 считается небезопасной и отключена по-умолчанию в современных версиях Windows). Чтобы смонтировать сетевую папку по протоколу SMB 3.0, используйте строку:
//192.168.200.30/docs /mnt cifs user,rw,credentials=/root/.smbshare,vers=3.0 0 0
Если на стороне хоста Windows используется несовместимая (старая версия) SMB, при подключении появится ошибка:
mount error(112): Host is down
Чтобы сразу смонтировать сетевую папку, выполните:
mount -a
Linux: подключиться к сетевой папке с помощью клиента samba
Установите в Linux клиент samba:
- В Ubuntu/Debian:
sudo apt-get install smbclient
- В CentOS/Oracle/RHEL:
dnf install smbclient
Разрешите доступ для клиента, добавив правило в файервол:
firewall-cmd --add-service samba-client --permanent; firewall-cmd –reload
Для вывода всех SMB ресурсов в локальной сети:
smbtree -N
Чтобы обнаружить список доступных SMB шар на удаленном хосте под определенной учетной записью, выполните команду:
smbclient –L \\192.168.200.30 –U 'administrator'
Чтобы вывести список опубликованных в Windows сетевых принтеров:
net share -l
Для подключения к сетевой папке Windows используется команда:
smbclient -U usernam1 \\192.168.200.30\shared_docs
Для анонимного доступа:
smbclient -U Everyone \\192.168.200.30\shared_docs
При использовании команды smbclient может появиться ошибка:
Unable to initialize messaging context smbclient: Can't load /etc/samba/smb.conf - run testparm to debug it
Чтобы исправить ошибку, создайте файл /etc/samba/smb.conf.
CIFS is a network-based file-sharing protocol which is used to share file, folders, and data over the network. The Windows, Linux, MacOSX, and other operating systems support the CIFS which makes it very useful to share files and folders over different operating systems. Both the SMB and CIFS protocols are developed by Microsoft and they work together without a problem. A Windows SMB share can be accessed with a CIFS client which is installed on a Linux system. In this tutorial, we will learn how to access and use SMB or CIFS Windows share from the Linux system.
Install CIFS Client For Linux
Linux distributions like Ubuntu, Debian, CentOS, Fedora, RHEL do not provides the CIFS client and tools by default. The CIFS should be installed explicitly. The CIFS client and tools are provided with the package named cifs-utils.
Debian, Ubuntu, Mint, Kali:
sudo apt install cifs-utils
Fedora, CentOS, RHEL:
sudo dnf install cifs-utils
If you are using different distributions than above the package name for the CIFS can be different. so use the term “cifs” to search and find the exact package name for your distributions.
After installing the CIFS client and tool we can use it to mount a Windows share or SMB share. The CIFS is a file system and can be used with the mount command. The mount command is used to mount different types of file systems. The -t option is used to mount Windows share by using the CIFS file system. The “cifs” is the file system name for the mount command. In the following example, we mount the windows share located in the host named FILESERVER in the path “/D/Backup” into the local Linux path “/mnt/backup”.
sudo mount -t cifs -o username=ismail //FILESERVER/D/Backup /mnt/backup
Windows shares can be accessed by using credentials which are username and password. In order to mount a windows share the username can be specified by using the “-o username=” option. In this case, we use the username “ismail”. After running this command the password is prompted with the following line. While typing the password the characters are do not shown for security reasons. So just type and press Enter.
Password:
Alternatively the remove Windows share hostname can be specified as IP address. In the following example the share is located in 192.168.1.10.
sudo mount -t cifs -o username=ismail //192.168.1.10/D/Backup /mnt/backup
List Mounted Windows Shares
After mounting a Windows share with the CIFS we can check the mount and list mounted paths in different ways. The most basic way is listing the local mount path by using the ls command.
ls /mnt/backup
Alternatively GUI based file managers can be used to list mounted local paths.
Another command to list currently monuted paths is the df command which also lists all local partitions and mount. Use following df command to list mounted windows shares.
df -l
Provide Password To Mount Windows Share
The windows share can be access with a username and password. The username and password can be provided in different ways. Generally the username is provided via the command line and password is entered into the password prompt. If we need to mount windows share in a batch mod or non-interactive mode we should provide the password with the mount command. The password can be provided with the mount command via command line interface with the password option.
sudo mount -t cifs -o username=ismail,password=Pss123 //FILESERVER/D/Backup /mnt/backup
Set Domain Name or WorkGroup Name
Windows share can be access with diffrent accounts and different authentication sources. Active Directory/Domain or WorkGroup can be used to specify user. The user domain or workgroup can be specified with the domain option like below.
sudo mount -t cifs -o username=ismail,domain=windowstect //FILESERVER/D/Backup /mnt/backup
Read Credentials From File
The windows share access crendentials can be specified via the command line interface. But this is not so secure. The executed commands are stored in the history file or logged in to a file. The credentials can be easily grabbed by others. There is a more secure way where crendetials (username and password) are stored in a file. The credential file format is like below.
username=ismail password=Pass123 domain=windowstect
The credential file is provided with the credentials option like below. There is no need to add a username, password, or domain explicitly. All of these parameters read from the credentials file.
sudo mount -t cifs -o credentials=/home/ismail/cifs_credentials //FILESERVER/D/Backup /mnt/backup
Specify the Access Permissions
The windows share is mounted with the sudo command this makes the local share path can be read only by the current user. If we want to make the share available for all other Linux users we can use the access permissions option named dir_mode and file_mode.
- dir_mode is used to specify the directories access permissions like 0755.
- file_mode is used to specify the files access permissions like 0755.
sudo mount -t cifs -o user=ismail,dir_mode=0755,file_mode=0755 //FILESERVER/D/Backup /mnt/backup
Specify User and Group ID
While mounting via the CIFS protocol the mounted partition is owned by its current owner user and group. This may create some problems with the access, modification permissions. Different user and group ID can be specified for the local share path. This changes the local share path to the specified user and group as the owner. In the following example, we set the user ID as 1001 and group ID as 1001.
sudo mount -t cifs -o user=ismail,uid=1001,gid=1001 //FILESERVER/D/Backup /mnt/backup
Auto Mount SMB Share with CIFS
Upto now we have used the mount command in order to mount a windows share with the CIFS. The mount command is generally used to mount files shares and file systems interactively via the command line interface. If we need to mount a windows share automatically when the Linux system starts and do not want to type commands the /etc/fstab can be used. The /etc/fstab configuration file stores mount information about the current Linux system which is applied during boot. We can also add network based shares to mount via CIFS.
Open the /etc/fstab file with your favouritte text editor with root privileges by using sudo command. In this case we use nano text editor. Alternatively you can be GUI based text editor like Kwrite.
sudo nano /etc/fstab
Add the following line to the fstab file.
#WINDOWS SHARE LOCAL DIR TYPE OPTIONS
//FILESERVER/D/Backup /mnt/backup cifs username=ismail,uid=1001
Unmount Windows Share
After mounting a windows share we may need to unmount this share too. Unmounting detaches the mounted windows share and can not be used locally unless mounted again. The umount command is used to unmount windows share. Just provide the local mount point or path to the umount command. The unmounting operation also requires root privielges which is provided with the sudo.
sudo umount /mnt/backup
In some cases the share can allready used by other users. In this case it can not be unmounted to prevent data corruption. First the allready used files can be listed with the fuser command.
fuser -m /mnt/backup
If you do not care for data corruption or other proeblems you can use the -l option which is used to lazy unmount for the windows share. This unmounts the file system when the usage is over.
sudo umount -l /mnt/backup
CIFS (Common Internet File System) – это популярный протокол обмена файлами в Интернете. Этот протокол и позволит пользователям ОС Linux получить доступ к общей папке Windows.
CIFS – это реализация SMB (Server Message Block) – протокола, используемого для совместного использования сетевых файлов. Но он устарел.
В этой статье мы по шагам пройдем все этапы установки и настройки CIFS, чтобы подключиться к сетевому ресурсу Windows на ОС Linux.
Установка CIFS
Сейчас мы установим пакет cifs-utils на Ubuntu Linux (точно так же можно сделать на всех Debain-подобных ОС).
$ sudo apt-get update $ sudo apt-get install cifs-utils
Монтируем Windows Share (сетевой ресурс)
Сейчас мы разберем на примерах, как монтировать общую папку Windows вручную и автоматически.
Создадим на нашем Linux директорию, к которой мы будем монтировать сетевой ресурс. Назовем ее myshare и расположена она будет в каталоге /mnt
$ sudo mkdir /mnt/myshare
Сетевой ресурс (шара) Windows может быть примонтирован к ОС Ubuntu или Debian с помощью следующей команды:
$ sudo mount -t cifs -o username=user,password=Passw0rd //WINDOWS_HOST_IP/share /mnt/myshare
Где:
WIN_HOST_IP – это IP адрес хоста Windows, на котором расположена общая папка
share – имя сетевого ресурса
user – наш пользователь и Passw0rd – пароль с которыми мы подключемся к шаре.
Если пользователь доменный, то необходимо в опциях (-o) указать домен.
$ sudo mount -t cifs -o username=user,password=Passw0rd,domain=domain_name //WIN_HOST_IP/share /mnt/myshare
По-умолчанию сетевой ресурс монтируется с полными правами (rwx или 777). Если Вы хотите установить иные права, используйте опции dir_mode и file_mode.
$ sudo mount -t cifs -o username=user,password=Passw0rd,dir_mode=0755,file_mode=0755 //WIN_HOST_IP/share /mnt/myshare
Так же Вы можете установить владельцев uid (id пользователя) и gid (id группы).
$ sudo mount -t cifs -o username=user,password=Passw0rd,uid=1000,gid=1000,dir_mode=0755,file_mode=0755 //WIN_HOST_IP/share /mnt/myshare
Если после выполнения предыдущих команд Вы не получили никаких ошибок, то можете с помощью команды df -h убедиться, что сетевой ресурс успешно примонтирован к нашему ПК на Linux. В примере WIN_HOST_IP = 192.168.1.100 и имя общей папки share
$ df -h Filesystem Size Used Avail Use% Mounted on udev 3,9G 0 3,9G 0% /dev tmpfs 787M 2,2M 785M 1% /run /dev/sda2 450G 23G 405G 6% / tmpfs 3,9G 705M 3,2G 18% /dev/shm tmpfs 5,0M 4,0K 5,0M 1% /run/lock tmpfs 3,9G 0 3,9G 0% /sys/fs/cgroup //192.168.1.100/share 1000G 108G 82G 11% /mnt/myshare
Безопасность учетных данных при монтировании через CIFS
В этом разделе опишем, как лучше всего передавать учетные данные (имя пользователя, пароль, домен) при монтировании сетевого ресурса к ОС на базе Линукс.
Создайте файл с учетными данными для cifs: /etc/cifs-credentials
Внутрь поместите следующее содержимое:
username=user password=Passw0rd domain=domain_name
Задайте права для этого файла:
$ sudo chmod +rw /etc/cifs-credentials
Теперь мы можем подключить общую папку такой командой:
$ sudo mount -t cifs -o credentials=/etc/cifs-credentials //WIN_HOST_IP/share /mnt/myshare
В примерах выше, после того, как Вы перезагрузите свой ПК, сетевой ресурс не примонтируется. Поэтому сделаем так, чтобы шара подключалась автоматически. В Linux это делается через файл /etc/fstab. Откройте этот файл любимым редактором.
$ sudo vim /etc/fstab
И добавьте такую строку:
//WIN_HOST_IP/share /mnt/myshare cifs credentials=/etc/cifs-credentials,file_mode=0755,dir_mode=0755 0 0
Следующей командой запустим монтирование всех точек, описанных в /etc/fstab
$ sudo mount -a
Теперь наш удаленный сетевой ресурс будет доступен даже после перезагрузки.
Как размонтировать общую папку CIFS
Размонтирование производится таким же способом, как и обычно мы жто делаем с дисками:
$ sudo umount /mnt/myshare
Часто бывает так, что сетевой ресурс занят каким-то процессом и тогда Вы получите ошибку при попытке размонтирования, тогда запустите команду с ключем -l (–lazy)
$ sudo umount -t cifs -l /mnt/myshare
Итог
Итак, в этой статье мы рассмотрели, как быстро примонтировать удаленную сетевую папку, которая находится на хосте с Windows, к нашему хосту на Linux с помощью CIFS. Если у Вас остались какие-либо вопросы, пожалуйста, пишите в комментариях.
Иногда, при организации совместных сетей между Windwos и Linux системами, в последних может появиться необходимость монтирования расшаренных SMB-ресурсов прямо к файловой системе. Прежде всего такая необходимость появляется при использовании легковесных рабочих сред (XFCE, OpenBox, LXDE и др), файловые менеджеры которых не поддерживают прямой доступ к samba.
Например, в среде Gnome доступ к ресурсу Windows можно получить прямо из файлового менеджера Nautilus, введя в адресной строке путь вида smb://192.168.0.11/ (где вместо необходимого ip-адреса также может быть просто указано сетевое имя windows-системы). Но многие другие файловые менеджеры (к примеру, быстрый и удобный PCMan File Manager до определённой версии) не поддерживают такой возможности, поэтому универсальным решением становится монтирование SMB к конкретному пути вашей файловой системы, в результате вы получите доступ к расшаренному ресурсу удаленной системы точно так же, как вы его получаете к своим дискам. Для этой цели нам потребуется установленный пакет cifs-utils, в Ubuntu и Debian установить его можно командой:
sudo apt-get install cifs-utils
В Fedora, CentOS и других RedHat based дистрибутивах:
sudo yum install cifs-utils
Также, как заметили в комментариях, рекомендуется установить пакеты ntfs-3g
и ntfs-config
, если они у вас ещё не установлены.
Теперь для начала давайте разберем как монтировать расшаренные папки вручную. Потребуется создать путь куда будем монтировать SMB-папку, пусть это, к примеру, будет /media/sharefolder:
sudo mkdir /media/sharefolder
Вот такой командой можно примонтировать папку, требующую авторизации по логину и паролю:
sudo mount -t cifs //192.168.0.11/share /media/sharefolder -o username=windowsuser,password=windowspass,iocharset=utf8,file_mode=0777,dir_mode=0777
где вместо //192.168.0.11/share – ip-адрес и имя необходимой общей папки (если имя расшаренной папки содержит пробел, то необходимо заключить весь путь в кавычки, как это показано в следующем примере), /media/sharefolder – путь куда будет монтироваться ресурс, windowsuser – имя пользователя с необходимыми правами доступа к этому ресурсу Windows, windowspass – пароль этого пользователя.
Если необходимая папка не требует обязательной авторизации, то подключить ресурс можно такой командой:
sudo mount -t cifs "//192.168.0.11/общие документы" /media/sharefolder -o guest,rw,iocharset=utf8,file_mode=0777,dir_mode=0777
Если гостевой доступ к необходимой папке включен только в режиме чтения, то будет достаточно такой команды:
sudo mount -t cifs //192.168.0.11/общие /media/sharefolder -o guest,iocharset=utf8
При удачном выполнении этих команд не должно произойти никакого уведомления – можете смело проверять как примонтировалась папка перейдя по вашему пути (в нашем примере – /media/sharefolder).
Отмонтируется папка командой:
sudo umount /media/sharefolder
Для того чтобы осуществить автомонтирование таких папок нам придется отредактировать системный файл fstab. Также, если доступ к необходимому windows-ресурсу требует обязательной авторизации, то потребуется предварительно создать файл, в котором будут прописаны логин и пароль доступа (сделать это можно текстовым редактором nano):
sudo nano /root/.smbcredentials
В этот новый файл добавьте две строки:
username=windowsuser
password=windowspass
где, соответственно, windowsuser – имя пользователя с необходимыми правами доступа к ресурсу Windows, windowspass – пароль этого пользователя. Измените права созданного файла так, что редактировать и смотреть его смог только root, то есть сама система:
sudo chmod 700 /root/.smbcredentials
Сохраните изменения и переходите к редактированию файла /etc/fstab:
sudo nano /etc/fstab
И здесь в самом конце добавьте строку типа:
//192.168.0.11/share /media/sharefolder cifs credentials=/root/.smbcredentials,iocharset=utf8,file_mode=0777,dir_mode=0777 0 0
Если авторизации по имени и паролю не требуется, а требуется только гостевой доступ, то создавать файл .smbcredentials не потребуется, этот шаг можно было пропустить и сразу в /etc/fstab добавить строку:
//192.168.0.11/общие40документы /media/sharefolder cifs guest,rw,iocharset=utf8,file_mode=0777,dir_mode=0777 0 0
Обратите внимание, что здесь если ваша папка содержит пробелы, то вариант аналогичный командной строке – заключении пути в кавычки – не поможет, для того, чтобы fstab понял пробелы – их необходимо заменить на четыре символа: 40
И, соответственно, если требуется только лишь гостевой доступ в режиме чтения к windows-папке, то будет достаточно такой строки:
//192.168.0.11/общие /media/sharefolder cifs guest,iocharset=utf8 0 0
Для того, чтобы проверить корректно ли монтируется shared-папка из fstab без перезагрузки нужно выполнить такую команду:
sudo mount -a
Также к этому стоит добавить, что если вы хотите получать доступ к windows-шаре не через ip-адрес, а через имя машины, то вам потребуется установить winbind, в Debian-based:
sudo apt-get install winbind
Или в RedHat-based системах:
sudo yum install samba-winbind
После этого отредактируйте файл /etc/nsswitch.conf:
sudo nano /etc/nsswitch.conf
Где в строке:
hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4
перед dns добавьте wins, то есть после редактирования она должна выглядеть вот так:
hosts: files mdns4_minimal [NOTFOUND=return] wins dns mdns4
После перезагрузки для получения доступа к windows-ресурсу через CIFS можно будет указывать не только ip, но и сетевое имя windows-ресурса (netbios name). Но мы всеже рекомендуем использовать непосредственно ip-адрес (как было описано в статье) – к нему обращение идет напрямую, быстрее.
Также стоит отметить, что таким образом можно монтировать только конкретные общие папки (например: //192.168.0.11/share), но не весь windows-ресурс целиком (то есть просто: //192.168.0.11).
Напоминалка по монтированию шары в Linux.
CIFS (Common Internet File System) — протокол передачи данных по сети с одного устройства на другое. CIFS также называют SMB (Server Message Block). Пример: сетевая папка или диск для общего доступа.
Для работы CIFS/SMB необходимы порты:
- TCP 445
- UDP 137
- UDP 138
- UDP 139
Для предоставления удалённого доступа используется TCP 445. Для разрешения имен NetBios используются порты UDP 137, 138 и TCP 139, без них будет работать только обращение по IP адресу.
В Windows поддержка CIFS/SMB есть по умолчанию. В Linux CIFS/SMB реализуется с помощью samba.
Ссылки
Настройка samba сервера Ubuntu и клиента RHEL
Samba на Ubuntu Server в домене Windows
https://ru.wikipedia.org/wiki/Server_Message_Block
Установка пакета для работы CIFS
CentOS:
yum install cifs-utils
Ubuntu:
apt-get install cifs-utils
Монтирование CIFS вручную
Синтаксис:
mount.cifs <путь к папке> <куда монтировать> <-o опции>
или
mount -t cifs <путь к папке> <куда монтировать> <-o опции>
Пример монтирования общей папки public на сервере с IP адресом 10.20.30.40 в локальную папку /mnt:
mount.cifs //10.20.30.40/public /mnt
Пример монтирования папки share на сервере с IP адресом 10.20.30.40 в локальную папку /mnt от имени пользователя v.pupkin:
mount.cifs //10.20.30.40/share /mnt -o user=v.pupkin
Пример монтирования папки share на сервере с IP адресом 10.20.30.40 в локальную папку /mnt от имени пользователя v.pupkin в домене ilab.local:
mount.cifs //10.20.30.40/share /mnt -o user=v.pupkin,domain=ilab.local
Монтирование CIFS автоматически через fstab
Создаём файл для хранения логина и пароля. Лучше скрытый.
vim /root/.smbshare
Содержимое:
username=v.pupkin password=MySecretPassw0rd domain=ilab.local
Добавляем строку в /etc/fstab:
//10.20.30.40/share /mnt cifs user,rw,credentials=/root/.smbshare 0 0
Здесь:
- //10.20.30.40/share — путь к монтируемой папке
- /mnt — локальная папка для монтирования
- cifs — тип файловой системы
- user — позволяет монтировать любому пользователю
- rw — чтение/запись
- credentials — путь к файлу с логином и паролем для монтирования
- 0 — индикатор резервной копии (0 — не используется)
- 0 — порядок проверки раздела (0 — не проверять)
Монтируем перезагрузкой или командой:
mount -a
Дополнительно
Монтирование CIFS с пробелом (заменяем пробел на 40):
//10.20.30.40/share40with40spaces /mnt cifs user,rw,credentials=/root/.smbshare 0 0
Монтировать от гостевой учётной записи:
//10.20.30.40/share /mnt cifs guest 0 0
Указать версию протокола SMB 3.0:
//10.20.30.40/share /mnt cifs user,rw,credentials=/root/.smbshare,vers=3.0 0 0
Монтировать под пользователем:
//10.20.30.40/share /mnt cifs defaults,uid=v.pupkin,gid=v.pupkin.group,rw,credentials=/root/.smbshare,vers=3.0 0 0
Монтировать с правами:
//10.20.30.40/share /mnt cifs defaults,uid=222,gid=222,rw,credentials=/root/.smbshare,vers=3.0,file_mode=0600,dir_mode=0700 0 0
Намекаем на виндовую шару:
//10.20.30.40/share /mnt cifs defaults,uid=222,gid=222,rw,credentials=/root/.smbshare,vers=3.0,file_mode=0600,dir_mode=0700,nounix 0 0
Немного кириллицы:
//fs.ilab.local/новая40папка /mnt cifs defaults,uid=www-data,gid=www-data,rw,credentials=/root/.smbshare,vers=3.0,file_mode=0600,dir_mode=0700,nounix,codepage=cp1251,iocharset=utf8 0 0