Подробный гайд по опциям -o sec=ntlmssp,uid=1000,gid=1000 при монтировании SMB/CIFS
Когда вы монтируете сетевую папку Windows (SMB/CIFS) в Linux, вы часто видите команды вида:
mount -t cifs //server/share /mnt/point -o username=user,password=pass,sec=ntlmssp,uid=1000,gid=1000
Здесь после -o перечислены опции монтирования. Разберём подробно, что означают sec=ntlmssp, uid=1000 и gid=1000, зачем они нужны и как правильно их использовать.
1. Что такое sec=ntlmssp?
sec— это опция, задающая режим безопасности (security mode) для аутентификации на SMB-сервере. Она определяет, какой протокол будет использоваться для проверки подлинности пользователя.
ntlmssp— это NTLM Security Support Provider, одна из реализаций протокола NTLM (NT LAN Manager). NTLM — семейство протоколов аутентификации Microsoft, которые использовались в старых версиях Windows и до сих пор поддерживаются для обратной совместимости.
Когда применять sec=ntlmssp?
- Если сервер не настроен на Kerberos (например, обычный домашний NAS или старая версия Windows).
- Если вы подключаетесь к серверу по IP-адресу, а не по доменному имени, Kerberos часто не работает, и приходится использовать NTLM.
- Если в вашей сети нет контроллера домена Active Directory, Kerberos недоступен.
- Если вы получаете ошибки вида
mount error(13): Permission deniedилиmount error(126): Required key not availableпри использовании стандартных настроек.
Другие возможные значения sec:
| Значение | Описание |
|---|---|
krb5 |
Использовать Kerberos (требует настройки билетов, обычно kinit). |
krb5i |
Kerberos с проверкой целостности (подпись). |
ntlm |
Устаревший NTLM (не рекомендуется, слабая защита). |
ntlmv2 |
NTLMv2 — улучшенная версия NTLM (более безопасная, чем ntlm). |
ntlmssp |
NTLM Security Support Provider — современная реализация NTLM, включающая NTLMv2 и согласование. Рекомендуется для совместимости. |
none |
Анонимный доступ (гость). |
На практике ntlmssp — хороший выбор, когда Kerberos не настроен, а сервер принимает NTLM-аутентификацию. Он поддерживает согласование версии NTLM и считается достаточно безопасным (если пароль надёжный).
2. Что такое uid=1000 и gid=1000?
CIFS/SMB не хранит информацию о владельцах файлов в стиле Unix (UID/GID). Поэтому при монтировании Linux назначает всем файлам и каталогам на сетевом диске одного владельца и одну группу. По умолчанию это root (UID=0), что может быть неудобно: обычный пользователь не сможет записывать файлы, а права будут слишком строгими.
Опции uid и gid позволяют задать конкретного пользователя и группу, которым будут принадлежать все файлы в смонтированной точке.
uid=1000— все файлы будут принадлежать пользователю с идентификатором 1000.gid=1000— все файлы будут принадлежать группе с идентификатором 1000.
Почему именно 1000?
В большинстве дистрибутивов Linux первый созданный при установке пользователь получает UID=1000 и GID=1000. Проверить свои идентификаторы можно командой:
id
Вывод покажет что-то вроде uid=1000(имя) gid=1000(имя) groups=.... Если вам нужно, чтобы к файлам имели доступ несколько локальных пользователей, можно указать другую группу (например, gid=100 — группа users).
Влияние на права доступа
После монтирования с указанными uid и gid вы сможете:
- Читать и записывать файлы как пользователь с UID 1000.
- Другие пользователи получат доступ в соответствии с общими правами (обычно
rwxr-xr-xили как задано черезfile_modeиdir_mode).
Если не указать uid/gid, владельцем станет root, и обычному пользователю придётся использовать sudo для записи.
3. Пример использования в команде mount
Полная команда монтирования может выглядеть так:
sudo mount -t cifs //192.168.1.100/Public /mnt/nas -o username=myuser,password=mypass,sec=ntlmssp,uid=1000,gid=1000
Здесь:
-t cifs— тип файловой системы.//192.168.1.100/Public— адрес сервера и имя общей папки./mnt/nas— локальная точка монтирования (должна существовать).-o— опции, разделённые запятыми:username=myuser— имя пользователя на SMB-сервере.password=mypass— пароль.sec=ntlmssp— протокол безопасности.uid=1000иgid=1000— владелец файлов.
Примечание:
Указывать пароль в командной строке небезопасно (виден в истории). Лучше использовать файл с учётными данными или вводить пароль интерактивно (просто опустите password=..., тогда mount спросит).
4. Добавление в /etc/fstab для автоматического монтирования
Чтобы сетевая папка монтировалась при загрузке, добавьте строку в /etc/fstab:
//192.168.1.100/Public /mnt/nas cifs username=myuser,password=mypass,sec=ntlmssp,uid=1000,gid=1000 0 0
Для безопасности пароль можно вынести в отдельный файл, доступный только root:
//192.168.1.100/Public /mnt/nas cifs credentials=/etc/samba/credentials,sec=ntlmssp,uid=1000,gid=1000 0 0
Файл /etc/samba/credentials:
username=myuser
password=mypass
domain=WORKGROUP # если нужно
Не забудьте:
sudo chmod 600 /etc/samba/credentials
После изменения /etc/fstab выполните sudo mount -a, чтобы проверить.
5. Дополнительные полезные опции
file_mode=0644,dir_mode=0755— задают права на файлы и каталоги, если стандартные не подходят (по умолчанию определяются на основе uid/gid и umask).vers=3.0(или2.0,2.1,3.1.1) — указывает версию протокола SMB. Иногда сервер не поддерживает новые версии, и нужно явно указать старую, напримерvers=2.0для старых NAS.iocharset=utf8— для корректного отображения имён файлов с не-ASCII символами.nounix— отключает расширения Unix (часто нужно для совместимости).noperm— отключает проверку прав на клиенте, полагаясь на сервер (может решить проблемы с доступом).
Пример с дополнительными опциями:
sudo mount -t cifs //server/share /mnt/share -o credentials=/etc/cifs-credentials,sec=ntlmssp,uid=1000,gid=1000,file_mode=0664,dir_mode=0775,vers=3.0
6. Возможные проблемы и их решение
Ошибка mount error(13): Permission denied
- Проверьте правильность имени пользователя и пароля.
- Убедитесь, что у пользователя есть права на доступ к шаре.
- Попробуйте явно указать
sec=ntlmsspилиsec=ntlmv2. - Добавьте
domain=WORKGROUP(или имя вашего домена). - Укажите
vers=2.0илиvers=1.0, если сервер старый.
Ошибка mount error(126): Required key not available
Часто возникает при попытке использовать Kerberos без настроенных билетов. Решение: использовать sec=ntlmssp.
Файлы принадлежат root, а не нужному пользователю
Вы забыли указать uid и gid. Добавьте их.
Не удаётся записать файлы, хотя права вроде бы есть
Проверьте, что вы монтировали с правильными uid/gid. Также убедитесь, что на сервере у пользователя есть права на запись в эту шару.
Монтирование работает, но имена файлов с русскими буквами отображаются некорректно
Добавьте iocharset=utf8.
7. Альтернативы ntlmssp
Если ваша сеть построена на Active Directory и настроен Kerberos, лучше использовать sec=krb5. Это более безопасно и не требует передачи хэшей паролей.
Пример:
kinit user@DOMAIN.LOCAL
sudo mount -t cifs //server/share /mnt/share -o sec=krb5,uid=1000,gid=1000
Если сервер поддерживает только старые версии SMB, возможно, придётся использовать sec=ntlm или sec=ntlmv2 (менее безопасно, но иногда необходимо).
Важно
Опции -o sec=ntlmssp,uid=1000,gid=1000 при монтировании CIFS/SMB означают:
- Использовать протокол аутентификации NTLMSSP (подходит для большинства не-доменных сред).
- Назначить всем файлам владельца с UID 1000 и группу с GID 1000 (обычно ваш первый пользователь в Linux).
Мы делимся этой технической информацией, чтобы помочь вам в решении задач — используйте её с пониманием. Статья носит рекомендательный характер, поэтому, пожалуйста, применяйте описанные методы осмотрительно.