Монтирование расшаренных windows-ресурсов в Linux через CIFS

  • 64th day of Chaos, in the yold 3176
  • 36 Comments

Иногда, при организации совместных сетей между 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/общие\040документы /media/sharefolder cifs guest,rw,iocharset=utf8,file_mode=0777,dir_mode=0777 0 0

Обратите внимание, что здесь если ваша папка содержит пробелы, то вариант аналогичный командной строке – заключении пути в кавычки – не поможет, для того, чтобы fstab понял пробелы – их необходимо заменить на четыре символа: \040
И, соответственно, если требуется только лишь гостевой доступ в режиме чтения к 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).

  1. Андрей says:

    нужная тема, а главное все просто и понятно написано, респект автору

  2. Дима says:

    Опция user несколько удобнее нежели в связки usernamepassword.
    В ней можно сразу указать и группу, и логн и пароль, вот пример авторизации в домене:

    //192.168.0.58/e$ /home/crow/data cifs user=domain/admin%pas$W0rd,uid=500 0 0

  3. QwertRob says:

    БОЛЬШОЕ пасиба!
    После 2х часов плясок с бубном наконец нашел вполне достаточный и имхо удобный мануал. Пока только здесь нашел параметры File_mode и Dir_mode, без которых samba- ресурсы монтируются “read only”.
    Еще раз пасиба ресурсу и автору!

  4. Lexuz says:

    Спасибо за статью.

  5. Novuscom says:

    Обалденная статья – все понятно расписано. Спасибо. Будем брать у вас пример как писать просто о сложном 🙂

  6. Alexis says:

    Приветствую! Существует ли путь для автомонтирования физического или логического диска Windows к папке Linux?

  7. mr_kg says:

    Спасибо. помогло. Респект

  8. roman says:

    Все понятно и по делу. Добавлю, что в debian jessie надо ставить не smbfs, а cifs-utils.

  9. Алексей says:

    ПРОСТО ОТЛИЧНО!
    НЕИСТОВО ПЛЮСУЮ!

  10. Anonymous says:

    Спасибо!

  11. Anonymous says:

    Спасибо огромное! Никто, кроме Вас про такую “мелочь”, как пробелы в пути к шаре не пишет.

  12. Anonymous says:

    Спасибо, за Ваше подробное описание!

  13. Dixie says:

    Спасибище !

  14. Service says:

    Добавьте пожалуйста, про установку поддержки файловой системы ntfs.
    sudo apt-get install ntfs-3g ntfs-config
    А то помучился, выдавал ошибка (13). пока случайно не нашел.
    И тогда все команды стали работать

  15. Grey says:

    Спасибо!
    Всё что нужно без лишних “умных” слов!
    Автору выражаю благодарность!!!

  16. Олег says:

    Друг… ты лучший. Коротко, ясно и без воды))

  17. l2u514N says:

    Огромное спасибо! Все работает идеально.

  18. колян says:

    как бы еще это в автозапуск добавить? Добавляю в /etc/fstab параметр auto – не помогает….

  19. Shrike says:

    для цента7 актуальная команда mount.cifs //ip/share

  20. Дмитрий says:

    При использовании в сети DFS, обращаться по IP адресу к сетевой шаре может не получиться.

  21. sa111sha says:

    Спасибо!

  22. Олег says:

    А как наооборот расшарить папку на CentOS ? Что бы к ней подключались как с винды так и с CentOS ?

  23. adm says:

    Это всё отлично, а как насчет того, что логин и пароль хранятся в файлике?
    1. Не секурно
    2. Юзеры меняют пароли, ну или новому ставишь галку в AD сменить пароль при первом входе и всё пока, шара)

    Мой кейс: Lunux в домене, нужно монтирование нескольких дисков без необходимости создавать файл, а использовать только тот, с чем залогинился в систему

  24. oss-it says:

    > Это всё отлично, а как насчет того, что логин и пароль хранятся в файлике?

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

    sudo mount -t cifs //192.168.0.11/share /media/sharefolder -o username=windowsuser,password=windowspass,iocharset=utf8,file_mode=0777,dir_mode=0777

    (можно поставить пробел перед выполнением команды, чтобы она не записывалась в .bash_history

  25. Александр says:

    mount error(2): No such file or directory
    AstraLinux

    • oss-it says:

      Не найден путь для монтирования. Вы, возможно, не создали директорию куда монтируете или ошиблись в написании пути.

Leave a Comment

Your email address will not be published. Required fields are marked *