Доступ к файловому серверу windows из linux

Что такое SAMBA?

Установка

Конфигурационный файл smb.cnf

Пользователи и пароли

Доступ к дискам Linux из Windows

Доступ к дискам Windows из Linux

Доступ к принтеру Linux для клиентов Windows

Доступ к принтеру Windows для клиентов Linux

Русификация и тестирование файла конфигурации

В последнее время популярность Linux растет буквально каждый день. Linux является
высокопроизводительной некоммерческой операционной системой, одной из разновидностей
Unix. Как известно, она была создана выпускником Хельсинкского университета
Линусом Торвальдсом. Основными преимуществами Linux являются открытость и мультипоточность,
кроме того, в ней есть возможности четкого разграничения ресурсов и уровней
доступа пользователей. На сегодняшний день многие производители программного
обеспечения поддерживают эту операционную систему; среди них выделим Oracle
и Informix.

В этой статье рассматривается, как
организовать совместное использование ресурсов
операционных систем Windows и Linux с помощью пакета
программ Samba.

Что такое SAMBA?

Samba — набор программ, которые
предназначены для организации доступа клиентов
к файловому пространству сервера и принтерам с
помощью протоколов SMB (Server Message Block)и CIFS (Common Internet
Filesystem). Первоначально написанный для Unix Samba
теперь также работает под управлением и других
ОС, в частности OS/2 и VMS. Это означает, что такие
средства этих операционных систем, как
файл-сервер и сервер печати, могут быть
использованы для SMB- и CIFS-клиентов. В настоящее
время существуют соответствующие клиенты для DOS,
Windows NT, Windows 95, Linux smbfs, OS/2, Pathworks. Протокол SMB
используется Microsoft Windows NT и 95 для организации
доступа к дискам и принтерам.

При помощи SAMBA возможно:

  • предоставлять доступ к файловой системе под ОС Linux для Windows-машин;
  • получать доступ к файловой системе под ОС Windows для Linux-машин;
  • предоставлять доступ к принтерам под ОС Linux для Windows-машин;
  • получать доступ к принтерам под ОС Windows для Linux-машин.

Компоненты пакета Samba выполняют
следующие функции:

  • Демон smbd предоставляет службы доступа к файлам и принтерам для клиентов
    протокола SMB, таких как Windows 95/98, Windows for Workgroups, Windows NT
    или LanManager. Конфигурация для этого демона задается в файле smb.cfg.
  • Демон nmbd обеспечивает поддержку сервера имен Netbios для клиентов. Он
    может запускаться в интерактивном режиме для опроса других демонов службы
    имен.
  • Программа smbclient является простым SMB-клиентом для UNIX-машин. Она используется
    для доступа к ресурсам на других SMB-совместимых серверах (таких как Windows
    NT), а также позволяет UNIX-станции воспользоваться удаленным принтером, подключенным
    к любому SMB-серверу (например, к компьютеру с WfWg).
  • Утилита testparm предназначена для проверки файла конфигурации smb.conf.
  • Утилита smbstatus позволяет выяснить, кто в данный момент использует сервер
    smbd.
  • Утилита nmblookup дает возможность запрашивать имена NetBios из UNIX-машин.
  • При помощи утилиты make smbcodepages создаются файлы для описания SMB кодовой
    страницы.
  • Утилита smbpasswd дает возможность шифровать пароли.

Каждый компонент детально описан на страницах руководства, поставляемого с
пакетом Samba.

Установка

Пакет Samba очень прост в установке и
настройке.

Для начала будем считать, что вы
установили дистрибутив RedHat с поддержкой Samba.

Итак, начнем.

Для работы пакета Samba необходим запуск
двух демонов:

  • smbd (демон SMB);
  • nmbd (демон сервера имен NetBIOS).

Они устанавливаются в /usr/sbin и могут
запускаться либо вручную, либо автоматически при
загрузке из системных скриптов, либо из inetd.conf.
Рассмотрим оба автоматических запуска.

Первый способ — из системных
стартовых скриптов. Необходимо написать
следующий скрипт в файл /etc/rc.d/init.d/smb и создать на
него символические ссылки с именами файлов,
указанных в комментариях.

#!/bin/sh 
# 
# /etc/rc.d/init.d/smb - запускает и останавливает SMB-сервисы
#
#Следующие файлы должны быть символическими ссылками на этот файл:
# symlinks: /etc/rc.d/rc1.d/K35smb (Убивает SMB-сервисы при выключении)
# /etc/rc.d/rc3.d/S91smb (Запускает SMB-сервисы 
# в мультипользовательском режиме)
# /etc/rc.d/rc6.d/K35smb (Убивает SMB-сервисы при перезагрузке)
#
# Источник библиотеки функций.
. /etc/rc.d/init.d/functions
# Источник сетевой конфигурации.
. /etc/sysconfig/network
# Проверка сети.
[ ${NETWORKING} = “no” ] && exit 0
# Смотрите, как мы здесь вызываем.
case “$1” in
  start)
    echo -n “Starting SMB services: “
    daemon smbd -D 
    daemon nmbd -D 
    echo
    touch /var/lock/subsys/smb
    ;;
  stop)
    echo -n “Shutting down SMB services: “
    killproc smbd
    killproc nmbd
    rm -f /var/lock/subsys/smb
    echo “”
    ;;
  *)
    echo “Usage: smb {start|stop}”
    exit 1
esac

Второй способ. Запуск SMB-демонов из inetd.
Для этого необходимо включить следующие строки в
файл /etc/inetd.conf:

# SAMBA NetBIOS services (for PC file and print sharing) 
netbios-ssn stream tcp nowait root /usr/sbin/smod smod 
netbios-ns dgram upd wait root /usr/sbin/nmbd nmbd 

Далее производится рестарт демона inet:

kill –HUP 1

Выберите один из способов запуска демонов и примените его. Следует заметить,
что при установке пакета SAMBA по умолчанию демоны всегда включаются в «автомат».
Так что скрипты можно не редактировать.

После того как мы разобрались с запуском демонов, необходимо сконфигурировать
SMB-сервер. Это операция заключается в настройке главного конфигурационного
файла — /etc/smb.cnf.

Конфигурационный файл smb.cnf

Настройка Samba в Linux (или других
UNIX-машинах) контролируется единственным файлом
— /etc/smb.cnf. Этот файл определяет, к каким системным
ресурсам вы намереваетесь дать доступ клиентам и
какие ограничения собираетесь наложить на
использование этих ресурсов.

Рассмотрим этот файл. Он состоит из
секций и параметров. Секции начинаются с
наименования, заключенного в квадратные скобки,
и продолжаются до начала следующей секции. Они
содержат параметры следующей формы:

  ‘имя = параметр’  

В файле все записи — линии. Каждая
линия может быть комментарием, названием секции
или параметром. Секции и имена параметров не
чувствительны к регистру.

Каждая секция в конфигурационном
файле (кроме секции [global]) описывает ресурс
доступа. Имя секции — это имя ресурса доступа.
Ресурс доступа включает путь к директории
доступа и описание прав доступа пользователей.

Например, создадим на диске директорию
/common и выделим ее как сетевой ресурс для всех
клиентов по записи и чтению:

[common]
    path = /common 
    public = yes
    guest ok = yes
    writable = yes
    printable = no

Все записанные любым пользователем в
этот ресурс файлы будут иметь права:

  • для создателя — все (чтение, запись, исполнение);
  • для группы (в которую входит пользователь) — чтение;
  • для всех остальных — чтение.

Если мы хотим предоставить права всем
пользователям на любой файл, необходимо добавить
в эту секцию строку следующего вида:

create mask = 0777

Существует три специальные секции:

  1. Секция [global] определяет некоторые переменные, которые Samba будет использовать
    для определения доступа ко всем ресурсам.
  2. Секция [homes] позволяет удаленным пользователям иметь доступ к своим (и
    только своим) домашним каталогам на Linux-машине. Так что если пользователи
    Windows попытаются подключиться к этому разделу со своих Windows-машин, то
    они будут подключены к своим персональным домашним директориям. Заметим, что
    для того, чтобы это сделать, они должны быть зарегистрированы на этой Linux-машине.
  3. Секция [printers] схожа с [homes], но для принтеров.

Для понимания SMB-сервера верхнего и
нижнего регистра в наименовании файлов в секции
[global] необходимо раскомментировать строку

case sensitive = yes

Пример части файла:

[global]
; Раскомментируйте эту строку, если вы хотите дать доступ
                       ; пользователю “гость”
; guest account = nobody 
log file = /var/log/samba-log.%m ;путь лог-файла
lock directory = /var/lock/samba 
share modes = yes


[homes]                ; В сети ресурс будет    виден как имя пользователя 
                       ;или будет отсутствовать, 
; если пользователь не найден 
comment = Home         ; В комментарии    будет написано “Home” 
guest ok = no          ; Запретим    гостевой доступ 
browsable = no         ; Не будем показывать    другим 
read only = no         ; Разрешим запись  
create mode = 700      ; Создаваемые файлы будут    видны только пользователю

[public]               ;Под таким именем ресурс будет виден
path = /var/public     ; Путь к ресурсу
comment = Welcome!     ; Что будет написано при детальном листинге
force user = nobody    ; Работа с файлами будет производиться 
; от лица nobody
guest ok = yes         ; Возможен ли доступ для    любого пользователя
browsable = yes        ; Появится ли ресурс при листинге
read only = no         ; Не только для чтения.

[tmp] 
comment = Temporary file space 
path = /tmp 
read only = no 
public = yes

Пользователи и пароли

Для доступа клиента к SMB-серверу
необходимо:

1. Добавить пользователя в систему.

2. Добавить пользователя в учетные записи SMB-сервера. Для этого надо ввести
команду:

smbadduser LinuxUser:SMBUser, 

где LinuxUser — имя пользователя в системе

SMBUser — имя SMB-пользователя.

далее на запрос о присвоении пароля
введите пароль клиента.

3. Раскомментировать строки с описанием пользователей и их паролей:

smb passwd file = /etc/smbpasswd
username map = /etc/smbusers

Внимание: если вы хотите дать доступ
пользователям, работающим под Windows с шифрованием
пароля, необходимо раскомментировать строку:

encrypt passwords = yes

Доступ к дискам Linux из Windows

Организация доступа к дискам Linux очень проста и сводится всего лишь к редактированию
файла конфигурации smb.cnf, то есть к добавлению секции (как это делается, было
рассмотрено выше).

Доступ к дискам Windows из Linux

Программа клиента SMB для UNIX-машин
включена в дистрибутив Samba. Она обеспечивает
ftp-подобный интерфейс командной строки. Вы можете
использовать эту утилиту для переноса файлов
сервера под управлением Windows клиенту под
управлением Linux. Для того чтобы увидеть, какие
ресурсы доступны на данной машине, необходимо
выполнить команду:

/usr/sbin/smbclient -L host

где «host» — это имя машины, доступные ресурсы которой вы хотите увидеть. Эта
команда вернет список имен «сервисов» — то есть имен дисков или принтеров, к
которым может быть получен доступ. До тех пор пока SMB-сервер не будет настроен
для управления доступом, он будет запрашивать пароль. Введите в ответ на запрос
пароль для пользователя «гость (guest)» или ваш персональный пароль на этой
машине.

Например:

smbclient -L redfox

Вывод этой команды должен выглядеть
примерно так:

Server time is Sat Aug 10 12:01:11 1998
Timezone is UTC+3.0
Password: 
Domain=[DOMAIN42] OS=[Windows NT 4.0] Server=[NT LAN Manager ]
Server=[REDFOX] User=[] Workgroup=[DOMAIN42] Domain=[]
 Sharename Type Comment
   ———— —— ———-
   ADMIN$ Disk Remote Admin
   public Disk Public 
   C$ Disk Default share
   IPC$ IPC Remote IPC
   OReilly Printer OReilly
   print$ Disk Printer Drivers
This machine has a browse list:
 Server Comment
   ———— ———-
   ALEX Samba 1.9.15p8
   MARRY Samba 1.9.15p8
   VASER Samba 1.9.15p8
   REDFOX 

Browse list показывает другие SMB-серверы в
сети с доступными ресурсами.

Для использования клиента выполните
следующую команду:

/usr/sbin/smbclient service <password>

где «service» — имя машины и сервиса.
Например, если вы пытаетесь обратиться к
директории, которая доступна под именем «public» на
машине, названной «redfox», то имя сервиса должно
звучать как \\redfox\public. Однако вследствие
ограничений оболочки вам необходимо спрятать
обратный слэш, так что в итоге эта командная
строка будет выглядеть следующим образом:

/usr/sbin/smbclient \\\\redfox\\public mypasswd

где «mypasswd» — символьная строка вашего пароля.

Вы получите приглашение smbclient:

  Server time is Sat Aug 10 12:01:11 1998
Timezone is UTC+3.0
Password: 
Domain=[DOMAIN42] OS=[Windows NT 4.0] Server=[NT LAN Manager ]
Server=[REDFOX] User=[] Workgroup=[DOMAIN42] Domain=[]
smb: \> 

Чтобы получить помощь по использованию smbclient, напечатайте «h»:

smb: \> h
ls dir lcd cd pwd 
get mget put mput rename 
more mask del rm mkdir 
md rmdir rd prompt recurse 
translate lowercase print printmode queue 
cancel stat quit q exit 
newer archive tar blocksize tarmode 
setmode help ? ! 
smb: \> 

Доступ к принтеру Linux для клиентов Windows

Для организации доступа Windows-машин к
Linux-принтеру вам необходимо убедиться, что
принтер работает под Linux. Если вы можете печатать
под Linux, то организация доступа к принтеру будет
очень простой.

Добавьте настройку принтера в ваш файл
smb.cnf:

[global]

  printing = bsd
  printcap name = /etc/printcap
  load printers = yes
  log file = /var/log/samba-log.%m
  lock directory = /var/lock/samba

[printers]
  comment = All Printers
  security = server
  path = /var/spool/lpd/lp
  browseable = no
  printable = yes
  public = yes
  writable = no
  create mode = 0700

[ljet]
  security = server
  path = /var/spool/lpd/lp
  printer name = lp
  writable = yes
  public = yes
  printable = yes
  print command = lpr -r -h -P %p %s

Убедитесь, что путь к принтеру (в этом
случае для [ljet]) соответствует буферной
директории, указанной в файле /etc/printcap!

Следует заметить, что существуют некоторые проблемы с доступом к принтерам
на UNIX-машинах для машин с Windows NT с применением Samba. Одна из них состоит
в том, что NT неправильно видит сетевой принтер, другая связана с проблемой
пароля. Для решения этих вопросов ознакомьтесь с файлом docs/WinNT.txt дистрибутива
Samba.

Доступ к принтеру Windows для клиентов Linux

Для доступа к принтеру,
инсталлированному на компьютере с ОС Windows,
необходимо следующее:

  • Вы должны иметь правильные записи в файле /etc/printcap, которые должны
    соответствовать локальной структуре директорий (для буферной директории и
    т.п.).
  • У вас должен быть скрипт /usr/bin/smbprint. Он поставляется вместе с исходными
    текстами Samba, но не со всеми двоичными дистрибутивами Samba. Его слегка
    модифицированная копия обсуждается ниже.
  • Если вы хотите преобразовывать ASCII-файлы в Postscript, то вы должны иметь
    программу nenscript или ее эквивалент. nenscript — это конвертор Postscript,
    он обычно устанавливается в директорию /usr/bin.
  • Вы можете упростить процесс печати через Samba, используя программы-надстройки.
    Простой скрипт на perl, который обрабатывает ASCII, Postscript или преобразованный
    Postscript, приведен ниже.
  • Запись в файле /etc/printcap, приведенном ниже, сделана для принтера HP
    5MP на сервере Windows NT. Используются следующие поля файла /etc/printcap:

cm — комментарий

lp — имя устройства, открываемого для
вывода

sd — директория спула принтера (на
локальной машине)

af — файл учета использования принтера

mx — максимальный размер файла (ноль —
без ограничений)

if — имя входного фильтра (скрипта)

Для более детальной информации о
печати смотрите Printing HOWTO или справочные
страницы по printcap.

  # /etc/printcap
#
# //redfox/oreilly via smbprint
#
lp:\
     :cm=HP 5MP Postscript OReilly on redfox:\
     :lp=/dev/lp1:\
     :sd=/var/spool/lpd/lp:\
     :af=/var/spool/lpd/lp/acct:\
     :mx#0:\
     :if=/usr/bin/smbprint:

Убедитесь, что буферная директория и
директория, используемая для учета пользования,
существуют и имеют право на запись. Убедитесь,
что строка «if» содержит правильный путь к
скрипту smbprint (дан ниже) и что записи указывают на
правильное устройство вывода (специальный файл
/dev).

Далее идет сам скрипт smbprint. Он обычно
находится в директории /usr/bin. Этот скрипт
поставляется вместе с дистрибутивом исходного
кода Samba.

У вас может появиться желание
взглянуть на него более внимательно. Существует
ряд мелких изменений, которые зарекомендовали
себя полезными.

  #!/bin/sh -x
# Этот скрипт является входным фильтром для основанной на printcap
# печати на UNIX-машинах. Он использует программу smbclient для
# печати файла на указанный smb-сервер и сервис.
# Например, вы можете иметь запись в printcap, подобную этой
#
# smb:lp=/dev/null:sd=/usr/spool/smb:sh:if=/usr/local/samba/smbprint
#
# которая создает UNIX-принтер, названный “smb”, который будет
# печатать с помощью этого скрипта. Вам необходимо создать директорию
# спула /usr/spool/smb с соответствующими правами и владельцем

# Установите здесь сервер и сервис, на который вы хотите печатать.
# В этом примере я имею PC с WfWg PC, названную “lapland”, которая
# имеет экспортируемый принтер, называемый “printer” без пароля

#
# Далее скрипт был изменен hamiltom@ecnz.co.nz (Michael Hamilton)
# так что сервер, сервис и пароль могут быть считаны из файла
# /usr/var/spool/lpd/PRINTNAME/.config 
#
# Для того чтобы это работало, запись в /etc/printcap должна
# включать файл учета использования (af=...):
#
#    cdcolour:\
#      :cm=CD IBM Colorjet on 6th:\
#      :sd=/var/spool/lpd/cdcolour:\
#      :af=/var/spool/lpd/cdcolour/acct:\
#      :if=/usr/local/etc/smbprint:\
#      :mx=0:\
#      :lp=/dev/null:
#
# Файл /usr/var/spool/lpd/PRINTNAME/.config должен содержать
#    server=PC_SERVER
#    service=PR_SHARENAME
#    password=”password”
#
# Например,
#    server=PAULS_PC
#    service=CJET_371
#    password=””
#
# Debugging log file, change to /dev/null if you like.
#
logfile=/tmp/smb-print.log
# logfile=/dev/null


#
# The last parameter to the filter is the accounting file name.
#
spool_dir=/var/spool/lpd/lp
config_file=$spool_dir/.config

# Should read the following variables set in the config file:
#    server
#    service
#    password
#    user
eval ‘cat $config_file‘

#
# Some debugging help, change the >> to > if you want to same space.
#
echo “server $server, service $service” >> $logfile

(
# NOTE You may wish to add the line ‘echo translate’ if you want automatic
# CR/LF translation when printing.
      echo translate
      echo “print -”
      cat
) | /usr/bin/smbclient “\\\\$server\\$service” $password -U $user -N -P >>    
         $logfile

Большинство дистрибутивов linux
поставляется с программой nenscript для
преобразования ASCII-документов в Postscript. Следующий
скрипт на perl делает жизнь пользователя легче,
обеспечивая простой интерфейс для печати путем
использования smbprint.

Использование: print [-a|c|p] <filename>

      -a печатает <filename> как ASCII
      -c печатает <filename> отформатированный как исходный код
      -p печатает <filename> как Postscript
      Если опции не заданы, программа попробует определить
      тип файла и печатать соответственно

Используя smbprint для печати ASCII-файлов,
скрипт следит за длинными строками. Если
возможно, этот скрипт разрывает длинную строку
на пробеле (вместо разрыва в середине слова).

Форматирование исходного кода выполняется с помощью программы nenscript. Она
берет ASCII-файл и форматирует его в две колонки с заголовком (дата, имя файла
и т.п.). Эта программа также нумерует строки. Postscript-документы уже отформатированы,
так что печатаются сразу.

Русификация и тестирование файла конфигурации

Пакет SAMBA поддерживает любую
кодировку, используемую в названиях файлов. Для
того чтобы можно было использовать кодировки с
русским алфавитом, необходимо внести несколько
строк в конфигурационный файл /etc/smb.cnf в секцию
[global]:

character set = KOI8-R
client code page = 866

Оттестировать файл конфигурации smb.cnf можно при помощи утилиты testparm.
Если в файле конфигурации нет ошибок, testparm сообщит об этом и выдаст список
используемых служб, в противном случае вы получите сообщение об ошибке.

КомпьютерПресс 10’1999

Для работы бывает необходимо подключаться из Linux к общей папке Windows, чтобы забрать или передать файлы. В организациях в 99% используются компьютеры под управлением Windows, поэтому приходится подключаться из Linux к Windows.

Установка Samba клиента в Linux

sudo apt-get update
sudo apt-get install samba-client
sudo apt-get install cifs-utils

Для удобства просмотра сетевого окружения в GUI удобен файловый менеджер Nautilus с дополнением Nautilus-share

sudo apt-get install nautilus nautilus-share

Просмотр общих сетевых ресурсов с помощью командной строки

Вызов клиента Samba для просмотра ресурсов сервера из командной строки:

1) просмотр общих папок, предоставленных в общий доступ по сети для локальных пользователей сервера

smbclient -L //192.168.100.10 -U Username%Password

либо

smbclient -L //servername -U Username%Password

где: 192.168.100.10 — IP адрес сервера, servername — имя сервера, Username — локальный пользователь сервера, Password — пароль пользователя Username

2) просмотр общих папок, предоставленных в общий доступ по сети для пользователей домена

smbclient -L //192.168.100.10 -U Domain/Username%Password

либо

smbclient -L //192.168.100.10 -U Username%Password -W Domain

или по имени

smbclient -L //servername -U Username%Password -W Domain

где Domain — имя домена Active Directory.

Либо (чтобы каждый раз не сообщать пароль в параметрах команды) создать файл ~/.smbcredentials
с данными входа:

username=имя_пользователя
password=пароль
domain=имя_standalone_сервера_или_домена

Тогда, присоединение к сетевому каталогу:

smbclient //server/share --authentication-file=/home/vladimir/.smbcredentials 

Подключение к общей папке Samba в интерактивном режиме

То же самое, но без ключа -L, но с параметром — именем общей папки, в данном случае «share»

smbclient //192.168.100.10/share -U Domain/Username%Password

либо

smbclient //servername/share -U Domain/Username%Password

либо

smbclient //servername/share -U Username%Password -W Domain

После успешного входа появится приглашение

smb: \>

можно вводить команды, например, help или dir. Интерфейс для управления smbclient с помощью команд напоминает ftp клиент.

Подключение к общим папкам с помощью файлового менеджера Nautilus

После запуска nautilus, выберите в левой части окна «+ Другие места» — откроется просмотр локальной сети, где можно просматривать компьютеры в сети, у которых имеются общие папки.

Решение проблемы с подключением: избавляемся от ошибки -13 Access Denied, либо NT_STATUS_ACCESS_DENIED

Ошибка: CIFS: VFS: cifs_mount failed w/return code = -13"

Данную ошибку можно решить только настройкой прав на сервере. Чтобы открыть общую папку на просмотр, нужны три условия:
1) Пользователь указан среди пользователей сервера или домена (либо доступ типа guest разрешён)
2) Предоставлен (не ограничен) доступ к файловой системе.
3) Дан доступ к конкретной сетевой папке — например, пользователь входит в группу пользователей, к которой дан доступ к общей папке.

Последнее, третье условие самое строгое. Нужно, чтобы Администратор сервера предоставил права пользователю (включил его в группу пользователей общей папки).

Самое интересное, что права Администратора не гарантируют даже ему полных прав доступа к общей папке, т.к. необходимо, чтобы пользователь «Администратор» входил в группу, которой предоставлены права к данной сетевой папке. В этом плане администратор не отличается от группы other/nobody: получит ошибку mount error(13): Permission denied, потому что он не входит в группу пользователей сетевой папки.

Использование команды «mount»

Вместо smbclient можно использовать команду mount.

Вначале нужно создать точки монтирования и дать права доступа к папке, например:

sudo mkdir /mnt/cifs
sudo chmod 0777 /mnt/cifs

Примеры использования команды mount с сетевым папками:

sudo mount -t cifs //192.168.20.222/share /mnt/cifs -o user=Vlad,pass=Str0ngPa$$word
ls  /mnt/cifs
sudo umount //192.168.20.222/share
ls  /mnt/cifs

Либо то же самое с файлом .smbcredentials :

sudo mount -t cifs //192.168.20.222/share /mnt/cifs -o credentials=/home/vladimir/.smbcredentials

Если имя сетевой папки содержит пробелы («share with spaces in name»), нужно вводить следующим образом:

sudo mount -t cifs //192.168.20.222/share\ with\ spaces\ in\ name /mnt/cifs -o credentials=/home/vladimir/.smbcredentials

Примечание: Чтобы после выполнения команды mount примонтированная папка работала бы не только на чтение, но и на запись в удалённую общую папку, нужно сопоставить удаленного пользователя с локальным пользователем Linux, при помощи параметров uid=1000,gid-1000. Где 1000 — заменить на uid и gid пользователя Linux (выводятся командой id).
Либо добавить в параметры -o noperm,iocharset=utf8.
В ключах команды можно задать версию Samba, которую используем для подключения. Например,
для SMB2: vers=2.0 или для SMB3 vers=3.0.

Примеры:

sudo mount -t cifs //192.168.20.222/share\ with\ spaces\ in\ name /mnt/cifs -o user=username,pass=password,uid=1000,gid=1000

sudo mount -t cifs //192.168.20.222/share\ with\ spaces\ in\ name /mnt/cifs -o credentials=/home/vladimir/.smbcredentials,vers=2.0,noperm 

Если заданная версия Samba (например, SMB3) не поддерживается сервером, будет выведена ошибка "mount error(95): Operation not supported.".

Добавление параметра «nofail» пригодится, когда не известно, включен ли удалённый компьютер (сервер) или нет.

Монтирование сетевой папки во время загрузки (файл /etc/fstab)

Синтаксис строки в /etc/fstab:

//[URL]/[sharename] /mnt/[mountpoint] cifs vers=3.0,credentials=/home/username/.sharelogin,iocharset=utf8,file_mode=0777,dir_mode=0777,uid=[username],gid=[username],nofail 0 0

где:
//[URL]/[sharename] — имя сервера и сетевой папки
/mnt/[mountpoint] — точка монтирования на локальном компьютере
vers=3.0 — принудительно установить версию протокола SMB3 (либо vers=2.0 — если клиент и сервер поддерживают лишь SMB2)
credentials=/home/username/.sharelogin — указание файла с именем пользователя, паролем и доменом для входа
iocharset=utf8 — прямое указание набора символов utf8 (не обязательно, если без него работает)
file_mode=0777,dir_mode=0777 — права доступа при выполнении mount
uid=[username],gid=[username] — данные uid и gid из результата вывода команды cat /etc/passwd | grep username
nofail — загрузка ОС будет продолжена даже в случае недоступности сервера URL

Другие параметры:
defaults — включает опции rw, suid, dev, exec, auto, nouser, and async. Обычно идёт первой, т.к. можно переопределить отдельные опции в строке позднее, например: defaults, noexec, ro — нет исполнения, только чтение.
rw — очевидно, чтение-запись со стороны клиента (является противоположностью ro — только чтение (защита от записи).
suid — запрещает использование бит полномочий SUID (Set-User-IDentifier — установка идентификатора владельца) или SGID (Set-Group-IDentifier). Грубо говоря, запрещает передачу части прав при помощи битов SUID и SGID — права должны быть заданы явно.
auto — используется в /etc/fstab — разрешает автоматическое монтирование сетевых ресурсов при выполнении команды mount -a
noauto — запрет для fstab монтировать папку автоматически при выполнении команды mount -a.
nouser — прямой запрет на «ручное» монтирование всеми пользователями, кроме root (не влияет на монтирование во время загрузки ОС)
guest — для доступа к «гостевым» общим папкам, которые доступны по сети без указания имени пользователя и пароля.
async — запись данных в сетевую папку производится по мере возможности — значение по умолчанию. Повышает производительность.
sync — немедленная запись на удаленный компьютер (без использования буферов), не рекомендуется.
noperm — отключает встроенную в клиент проверку прав. Используют noperm в том случае, если права вроде бы есть, но создать файл на запись, например, программно, не получается, из-за несовместимости в реализации CIFS на клиенте и сервере.
noexec — прямой запрет запуска исполнимых файлов из сетевой папки
noatime — не обновлять время создания файла (повышает производительность, но понижает информативность)
nounix — отключение расширений Linux: не использовать символические ссылки. Используется, чтобы отключить символьные ссылки для обеспечения совместимости с Windows.
mfsymlinks — ключ для символьных ссылок в стиле Minshall+French. Этот стиль ссылок поддерживается Windows и Mac.

Примеры строки в fstab (где данные входа указаны в файле /etc/.smbcredentials):

//192.168.20.222/share_name rw,auto,nofail,credentials=/etc/.smbcredentials 0 0

Если в /etc/hosts или локальном DNS сервере прописаны имена машин, вместо IP-адреса можно подключать общую папку по имени: //server/share .

Команда для монтирования на основе fstab:

sudo mount -a

Будет перемонтированы все диски на основе /etc/fstab за исключением помеченных параметром «noauto».

Краткая информация по настройки Samba в Windows (протоколы SMB1, SMB2, SMB3)

Samba протокол имеет три версии 1, 2 и 3.
Протокол SMB1 включают, если в организации имеются машины под Windows XP. В остальных случаях стараются отключить SMB1 как небезопасный.

Включение и выключение в Windows 7 и Windows Server 2008r2 производится с помощью реестра, параметры
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\LanmanServer\Parameters
параметры типа DWORD
SMB1=0
SMB2=1

В Windows 8, Windows 10, 11, Windows Server 2012, 2016 и выше используется командлет PowerShell

Get-SmbServerConfiguration | select EnableSMB1Protocol,EnableSMB2Protocol

Set-SmbServerConfiguration -EnableSMB2Protocol $true

Указанные командлеты не работают в ранний версиях Windows 7 и Windows Server 2008r2.
Также, SMB3 не работает в Win7 — подробнее см. здесь — сайт winitpro.ru.


Ссылки:

  • man mount.cifs

Related publications

Всем привет! Меня зовут Александр, и я большой любитель Хабра, так как он стал моим проводником в мир ИТ. Это моя первая публикация, поэтому для начала расскажу немного о себе.

Лирическое отступление о себе

Ещё в далёких нулевых, когда трава была зеленее, солнце теплее, а санкций не было даже в проекте, я учился в университете и ходил на курсы администрирования Windows, но зачитывался хабровскими статьями о том, как изящно решаются некоторые задачи в Linux. Скажем прямо, разница между этими двумя системами в моих глазах была совсем не в пользу «окошек». И вот уже 9 лет я работаю в ИТ на позициях, связанных с Linux-администрированием и поддержкой различных продуктов на базе этой ОС, за что ещё раз спасибо Хабру.

Начинал я системным администратором ИТ-инфраструктуры в петербургской компании GS-Labs, а перед тем, как попал в Русбитех-Астра, трудился в VK Cloud в подразделении поддержки PaaS (k8s, DBaaS, s3). Сейчас я работаю в команде ALD Pro над продуктом, который заменит на отечественном рынке, ни много ни мало, саму службу Active Directory. Задач много и разных, в основном помогаю системным администраторам заказчиков и интеграторов в отладке сложных кейсов, связанных с использованием компонентов нашего технологического стека, но мне нравится ещё и программировать, поэтому время от времени участвую в разработке различных вспомогательных инструментов. Например, на Хабре уже была статья, в которой упоминалось об одной из моих утилит aldpro-join.exe, с помощью которой можно присоединить Windows-компьютер к домену ALD Pro (FreeIPA) на максимально возможном уровне функциональности.

Совсем недавно я участвовал в проекте по рефакторингу подсистемы общего доступа к файлам на базе Samba и был в очередной раз удивлен, что на любимом Хабре (и даже в рунете в целом) по работе с протоколом SMB в гибридных инфраструктурах Windows/Linux материалов чуть больше, чем ничего. Я уже сталкивался с подобной задачей, когда мне требовалось обеспечить доступ доменным пользователям к хранилке TrueNAS, и тогда на то, чтобы разобраться, как это сделать, у меня ушло не меньше двух недель. Похоже, что за прошедшее время материалов в сети по этому вопросу больше не стало, поэтому позвольте мне поделиться с вами нашими крутыми наработками на эту тему, которые стали доступны уже в версии 2.4.0 — не меркантильной рекламы ради, а успешной реализации проектов импортозамещения для. 

Сегодня мы поговорим о том, как обеспечить надежную работу файлового сервера Samba в больших доменах с Kerberos-аутентификацией и авторизацией через PAC-сертификат, как настроить права доступа на уровне ACL файловой системы, как на самом деле работает стандартная проверка прав доступа «Пользователь-Группа-Остальные» и как расширяется алгоритм при использовании POSIX ACL. В завершение мы посмотрим возможности нашего крутого файлового менеджера fly-fm, и я поделюсь ещё одной своей утилитой aldpro-setfacl, которая позволяет настраивать права доступа к файлам полностью из графического интерфейса. Кстати, материалы этого рефакторинга вошли в один из модулей нашего открытого курса по ALD Pro, который всего за пару месяцев собрал уже почти 100к просмотров.

Осталось добавить, что данная статья будет полезна даже в том случае, если вы пока ещё используете ванильные версии FreeIPA и Samba.

Ну что, добавим рока в эту скучную самбу! 💃🕺

Картинка, чтобы разбавить сухую теорию

Картинка, чтобы разбавить сухую теорию
А ещё я выступал диджеем на рок-вечеринках, хорошее было время…
  1. Состав и архитектура подсистемы общего доступа к файлам ALD Pro

  2. Настройки файлового сервера Samba

  3. Аутентификация по паролю (NTLM)

  4. Kerberos-аутентификация на файловом сервере Samba

  5. Авторизация на файловом сервере Samba на уровне SMB-подключения

  6. Авторизация на уровне ACL файловой системы

  7. Специфика работы с правами доступа при подключении SMB-ресурса

  8. Настройка ACL в Linux

1. Состав и архитектура подсистемы общего доступа к файлам ALD Pro

В основе службы каталога ALD Pro лежит FreeIPA, а сердцем нашего файлового сервера является служба smbd (Samba), которая обеспечивает доступ к ресурсам по протоколу Server Message Block, SMB. Данный протокол реализует клиент-серверную архитектуру и позволяет предоставить доступ к файлам, которые находятся на удаленных хостах. Но стоит добавить, что протокол SMB — это не только доступ к файлам, так как через общий ресурс IPC$ приложения могут обращаться к именованным каналам, которые позволяют вызывать удаленные процедуры (Remote Procedure Call, RPC) и получать результаты их выполнения. Например, когда мы в Windows открываем свойства папки, чтобы посмотреть список доступа ACL, клиентский компьютер по протоколу SMB обращается к каналу LSARPC на контроллере домена, чтобы с помощью процедуры LookupSids2 преобразовать идентификаторы субъектов безопасности в имена соответствующих пользователей и групп.

История проекта Samba началась, конечно же, с общего доступа к файлам, но, в силу особенностей протокола SMB, в дальнейшем появился доступ к принтерам, и была включена поддержка доменов NT4/AD. С расширением функциональности продукта увеличивалось и количество настроек, поэтому некоторые из них устарели или начали конфликтовать с другими настройками, так как отвечали за несовместимые режимы работы. Поэтому настройка всего этого «разнотравья» является сейчас крайне непростой задачей.

Архитектура подсистемы общего доступа к файлам ALD Pro представлена на следующем рисунке. В качестве основных компонентов Samba можно выделить:

  • smbd – служба, реализующая доступ к ресурсам сервера по протоколу SMB, использует порт 445/TCP. Протокол SMB может работать поверх протокола NetBIOS, для этого служба smbd использует ещё и порт 139/TCP.

  • nmbd – служба, обеспечивающая поддержку сервера имен NetBIOS (NetBIOS Name Server, NBNS), использует порты 137/UDP и 138/UDP.

  • winbind – клиентская часть, которая позволяет Linux-серверу быть участником домена Active Directory. Служба Winbind позволяет выполнять автоматическое обнаружение контроллеров домена (в Windows эта функция называется DC Locator), преобразовывать идентификаторы безопасности Windows (SID) в POSIX-идентификаторы (UID/GID), выполнять исходящую NTLM-аутентификацию. В настоящий момент служба считается устаревшей и часть ее функций, например, преобразование идентификаторов, взяла на себя служба sssd.

  • sssd – клиентская часть, которая позволяет хосту быть участником домена, когда на бэкенде находится служба каталога FreeIPA, Active Directory, MIT Kerberos или даже обычный каталог LDAP v3. На серверах с Samba служба sssd не только берет на себя часть функций winbind, но даже иногда ограничивает возможности последней. Например, разработчики sssd из соображений безопасности принципиально против реализации в своем продукте поддержки протокола NTLM, поэтому при установке winbind вместе с sssd возможность исходящей NTLM-аутентификации становится недоступна.

Осталось только в двух словах упомянуть SMB-клиенты, с помощью которых можно получить доступ к общим папкам файлового сервера. С компьютеров Astra Linux вы можете воспользоваться файловым менеджером, который работает через FUSE, утилитами из пакета cifs-utils, чтобы выполнить подключение вручную командой mount или прописать настройки подключения в fstab. А ещё можно воспользоваться довольно простым, но при этом очень функциональным приложением smbclient.

Архитектура подсистемы общего доступа к файлам ALD Pro 2.4.0

Архитектура подсистемы общего доступа к файлам ALD Pro 2.4.0

2. Настройки файлового сервера Samba

За установку и настройку файлового сервера в ALD Pro отвечает автономная служба aldpro-salt-minion, которая самостоятельно извлекает настройки из LDAP-каталога по pull-модели и выполняет конфигурирование системы. В выборе активного контроллера служба полагается на sssd, забирая результаты дискавера через ответчик ifp (infopipe) по dbus. Аутентификация выполняется по безопасному протоколу Kerberos V5 с помощью ключей хоста из файла /etc/krb5.keytab.

Основным конфигурационным файлом для служб smbd и winbind является /etc/samba/smb.conf. С версии 2.4.0 мы с помощью параметра include стали дополнительно подключать конфигурационный файл /etc/samba/share.conf, чтобы отдельно хранить настройки общих папок, и базу данных /var/lib/samba/registry.tdb, чтобы у системных администраторов была возможность переопределить любой параметр, назначаемый через портал управления:

cat /etc/samba/smb.conf
[global]
...
include = registry
include = /etc/samba/share.conf
...

Отметим также, что реестр в Samba можно подключить ещё двумя способами. Если установить параметр «registry shares = yes», то через реестр можно будет определять только параметры общих папок, а если использовать параметр «config backend = registry», то служба начнет использовать настройки только из реестра и будет игнорировать все остальные параметры конфигурационного файла. Мы, как нам кажется, выбрали наиболее универсальный функциональный вариант.

База данных registry.tdb имеет такую же структуру, как реестр Windows. Параметры Samba хранятся в ветке «/HKEY_LOCAL_MACHINE/SOFTWARE/Samba/smbconf/», а для работы с реестром вместо оснастки regedit.exe нужно использовать приложение samba-regedit. С помощью реестра для общей папки ALD Pro вы можете включить, например, параметр «case sensitive = yes», чтобы работать с ней как обычной Linux-папкой, в которой допустимо хранить объекты с одинаковыми именами «Test» и «test», но в разном регистре символов.

Включение параметра case sensitive для общей папки files через реестр

Включение параметра case sensitive для общей папки files через реестр

Результирующие настройки вы можете увидеть с помощью утилиты testparm. Если добавить ключ -v (verbose), то утилита выведет все параметры, в том числе и те, которые установлены в значении по умолчанию. 

root@pc-1:~# testparm -v
Load smb config files from /etc/samba/smb.conf
...
[test_share]
        case sensitive = Yes
...

3. Аутентификация по паролю (NTLM)

Если подключаться к файловому серверу по IP-адресу или с компьютера, который не является участником домена, то служба smbd попытается выполнить аутентификацию по паролю с использованием протокола NTLMv2, и в сетевом трафике можно будет увидеть пакеты NTLMSSP.

Протокол NTLM предполагает, что есть три участника: клиент, сервер приложения и контроллер домена. Клиент отправляет запрос на сервер и получает в ответ случайное число challenge, которое он должен зашифровать паролем пользователя для подтверждения его аутентичности. Получив от клиента зашифрованное сообщение, сервер пересылает его контроллеру домена вместе с исходным значением challenge, так как не может выполнить проверку аутентичности самостоятельно (серверу неизвестен пароль пользователя). Контроллер домена извлекает пароль пользователя из каталога, выполняет шифрование challenge тем же алгоритмом и сравнивает полученный результат с сообщением от клиента. Если значения совпали, то контроллер сообщит серверу, что проверка аутентичности прошла успешно.

Начиная с версии 2.4.0 мы полностью отказались от NTLM-аутентификации на файловом сервере по нескольким причинам:

  • Во-первых, это просто небезопасно, т.к. протокол NTLM подвержен MITM-атакам.

  • Во-вторых, в качестве клиентской части мы используем на хостах службу sssd, в которой нет поддержки NTLM, поэтому данный метод аутентификации можно обеспечить только в том случае, если переключить файловый сервер в режим контроллера домена NT4 с помощью параметра «security=user» и дать службе smbd прямой доступ к NTLM-хешам пользователей через модуль ipasam с помощью параметра «passdb backend = ipasam:’ldap://dc-1.company.lan:389,ldap://dc-2.company.lan:389,…'». Как вы понимаете, такой подход допустим только в маленьких организациях, если файловым сервером будут управлять те же сотрудники, которые отвечают за администрирование домена.

  • В-третьих, если какие-то LDAP-серверы из списка passdb backend окажутся недоступны, то Samba становится крайне нерасторопной и начинает обижаться большими задержками вплоть до полного отказа в обслуживании.

Учитывая все вышесказанное, на своих файловых серверах мы настраиваем Samba в режиме безопасности ads, т.е. делаем сервер обычным рядовым участником домена, чего и вам желаем:

[global]
...
security = ads
...

Для работы Kerberos-аутентификации на сервере параметра security = ads недостаточно, но об этом будет далее.

4. Kerberos-аутентификация на файловом сервере Samba

Для настройки Kerberos-аутентификации на файловом сервере Samba наши скрипты автоматизации выполняют следующие действия:

  • Создают учетную запись сервиса «krbprincipalname=cifs/fs-1.ald.company.lan@ALD.COMPANY.LAN» в контейнере «cn=services,cn=accounts,dc=ald,dc=company,dc=lan».

  • Выгружают ключи этой учетной записи в keytab-файл /etc/samba/samba.keytab, содержимое которого можно посмотреть с помощью утилиты klist. Ключи нужны службе Samba для расшифровки Kerberos-билетов пользователей.

sudo klist -ket /etc/samba/samba.keytab

Keytab name: FILE:/etc/samba/samba.keytab
KVNO Timestamp Principal
---- ------------------- ------------------------------------------------------
1 10.03.2024 16:38:27 cifs/file-1.ald.company.lan@ALD.COMPANY.LAN (aes256-cts-hmac-sha1-96)
1 10.03.2024 16:38:27 cifs/file-1.ald.company.lan@ALD.COMPANY.LAN (aes128-cts-hmac-sha1-96)
  • Настраивают в конфигурационном файле smb.conf параметры «kerberos method» и «dedicated keytab», чтобы переключить Samba-сервер на Kerberos-аутентификацию:

sudo cat /etc/samba/smb.conf

[global]
...
dedicated keytab file = FILE:/etc/samba/samba.keytab
kerberos method = dedicated keytab
...

Кстати, служба Samba может работать ещё в двух режимах: параметр system keytab настраивает службу на использование системного keytab-файла /etc/krb5.keytab, а параметр secrets only переключает ее на локальную базу secrets.tdb.

Теперь забежим немного вперед и затронем тему авторизации. Несмотря на то, что Kerberos является протоколом аутентификации, в его билетах есть поле Authorization Data, которое позволяет передавать в том числе авторизационную информацию об участии пользователя в группах. Для совместимости с MS Active Directory служба каталога FreeIPA использует так называемый PAC-сертификат (Privilege Attribute Certificate), в котором указан собственный идентификатор пользователя и идентификаторы всех его групп.

При формировании сертификата используются значения атрибута ipaNTSecurityIdentifier, в котором хранится SID в формате MS Windows. Для просмотра PAC-сертификата вы можете воспользоваться утилитой net из пакета samba-common-bin. В следующем примере мы запрашиваем сервисный билет на доступ к службе host/dc-1.ald.company.lan@ALD.COMPANY.LAN для пользователя admin@ALD.COMPANY.LAN и расшифровываем билет с помощью ключей из файла /etc/krb5.keytab. Запускать эту команду следует на хосте dc-1.

admin@dc-1:~$ sudo net ads kerberos pac dump -U admin@ALD.COMPANY.LAN local_service=host/dc-1.ald.company.lan@ALD.COMPANY.LAN --option='kerberos method = dedicated keytab' --option='dedicated keytab file = FILE:/etc/krb5.keytab' -s /dev/null --option='realm = ALD.COMPANY.LAN'

Password for [admin@ALD.COMPANY.LAN]:
The Pac:     pac_data_ctr->pac_data: struct PAC_DATA
...
                                                        rid                      : 0x00000200 (512)
...
                                                        rid                      : 0x000003eb (1003)
...

Значение ipaNTSecurityIdentifier рассчитывается службой каталога FreeIPA «автомагически» в момент создания субъекта безопасности в соответствии с настройками текущего диапазона идентификаторов, за что отвечает плагин sidgen. Сложность этих расчетов состоит в том, что SID-идентификаторы Windows и POSIX-идентификаторы Linux имеют несколько существенных отличий:

  1. В идентификаторе Windows S-1-5-21-1491017894-2377586105-2170988794-500 последнее значение 500 идентифицирует субъект относительно домена (и называется относительным идентификатором RID), а предшествующие ему три числа 1491017894-2377586105-2170988794 предназначены для идентификации домена или компьютера и совпадают для всех пользователей и групп. В POSIX мы имеем дело с обычными целыми числами от 0 до 232 (4 294 967 296), т. е. нет уникальной доменной части, поэтому для идентификации доменов в этом пространстве чисел выделяют просто отдельные диапазоны (т.н. ID Ranges).

  2. В системе Windows пользователи и группы находятся в одном пространстве идентификаторов SID, а в модели POSIX это два разных непересекающихся множества: идентификаторы пользователей называют UID (User Identifier), а идентификаторы групп — GID (Group Identifier). Поэтому пользователь root с идентификатором 0 и его первичная группа root с идентификатором 0 — это два совершенно разных субъекта безопасности. По этой причине в службе каталога FreeIPA диапазоны идентификаторов имеют так называемый вторичный диапазон RID, идентификаторы которого используются для первичных групп пользователей, если при создании пользователя с предопределенным значением идентификатора UID в домене по какой-либо причине уже будет существовать группа с таким же значением идентификатора. Соотношение диапазонов ID Range и DNA ID Range показано на следующем рисунке:

Логика сопоставления идентификаторов

Логика сопоставления идентификаторов

5. Авторизация на файловом сервере Samba на уровне SMB-подключения

Авторизация – это предоставление субъектам доступа к ресурсам на основе разрешений. В случае SMB-сервера ресурсами являются файлы и папки, в роли субъектов выступают пользователи, а разрешения могут быть заданы на уровне SMB-подключения или через списки доступа объектов файловой системы (Access Control Lists, ACL).

Интерфейс Windows для настройки SMB-разрешений отображает шесть флажков, и может показаться, что их допустимо устанавливать в любом сочетании, как показано на нижеследующем рисунке. Однако, если вы кликнете по флажку Allow Full Control, то увидите, что флажки Allow Change и Allow Read будут включены автоматически. То есть мы имеем дело, фактически, с одним выпадающим списком из трех значений, каждое из которых вбирает в себя разрешения предыдущих уровней.

Настройка SMB-разрешений в Windows

Настройка SMB-разрешений в Windows

С флажками Deny ещё интереснее: они точно так же, как флажки Allow, представляют из себя один выпадающий список с тремя значениями. При этом пользователь потеряет право на подключение к общему ресурсу вне зависимости от того, какой из флажков вы установите — Deny Read, Deny Change или Deny Full Control.

В системе Windows разрешения SMB предоставляют следующие права:

Разрешение

Описание

Read
(Чтение)

Даёт право:

⚬ видеть имена файлов и папок;

⚬ читать содержимое и атрибуты файлов;

⚬ иметь доступ к вложенным папкам общего ресурса;

⚬ запускать исполняемые файлы.

Change
(Изменение)

Дополняет предыдущее разрешение следующими правами:

⚬ создавать и удалять файлы и вложенные папки;

⚬ изменять содержимое и атрибуты файлов и папок.

Full Control
(Полный доступ)

Дополняет предыдущее разрешение следующими правами:

⚬ становиться владельцами файлов и папок;

⚬ изменять списки доступа ACL файловой системы.

Разрешение Full Control имеет смысл только в том случае, если общая папка расположена на томе NTFS, который поддерживает списки доступа.

В службе Samba для настройки SMB-разрешений предназначены две группы параметров:

  • одна группа определяет права на подключение;

  • вторая отвечает за уровень разрешений в рамках установленного подключения.

Права на подключение к общему ресурсу задаются двумя параметрами valid users и invalid users как показано на рисунке «Алгоритм определения прав на подключение к общему ресурсу» ниже.

Параметр

Описание

valid users

Позволяет ограничить доступ к общей папке указанному списку пользователей и групп пользователей. Если параметр не задан, то по умолчанию доступ предоставляется всем пользователям.

Служба Samba может работать с разными источниками групп, порядок обращения к которым задается специальными символами в начале имени группы:

⚬ символ «+» указывает, что это UNIX-группа;

⚬ символ «&» указывает, что это NIS-группа;

⚬ символы «+&» указывают, что сначала нужно выполнить поиск по UNIX-базе, а затем обратиться к базе NIS;

⚬ символы «&+» меняют предыдущий порядок на противоположный;

⚬ символ «@» является краткой записью «&+», то есть указывает, что сначала нужно выполнить поиск по NIS-базе, а затем обратиться к UNIX-базе.

Технология сетевых групп NIS уже устарела, но служба каталога FreeIPA ее поддерживает, и при установке FreeIPA клиента в конфигурационном файле /etc/nsswitch.conf задается значение «nis sss» для базы netgroup. Поэтому, несмотря на то что в интерфейсе ALD Pro управление сетевыми группами не представлено, на файловых серверах мы все же используем символ @ в начале имен групп для обеспечения обратной совместимости.

invalid users

Позволяет запретить доступ к общей папке указанному списку пользователей и групп пользователей. Если пользователь входит сразу в оба списка: и в valid users, и в invalid users, то доступ к общей папке этому пользователю будет запрещён. По умолчанию параметр не задан.

При проверке прав доступа служба smbd конвертирует имена групп в идентификаторы SID и сверяет их с содержимым PAC-сертификата из Kerberos-билета пользователя. Преобразование идентификаторов служба smbd выполняет через службу winbind, но в конечном итоге эту задачу берет на себя служба sssd, которая встраивается в цепочку обработки этих запросов.

Алгоритм определения прав на подключение к общему ресурсу

Алгоритм определения прав на подключение к общему ресурсу

Если по результатам предварительной проверки служба smbd разрешит пользователю установить SMB-подключение, то далее уровень доступа может быть ограничен правами на «чтение» или «запись». Эти права определяются параметрами read list, write list, read only и writable как показано далее на рисунке «Алгоритм определения прав доступа к общему ресурсу».

Параметр

Описание

read list

Определяет список пользователей и групп пользователей, доступ которых будет ограничен правами на чтение. Параметр read list имеет смысл, если пользователям по умолчанию предоставлены права на запись (с помощью параметров «writable = YES» или «read only = NO»). Параметр read list не действует, если пользователя явно включили в write list.

write list

Определяет список пользователей и групп пользователей, которым будет предоставлен доступ «на изменение», т. е. «чтение + запись». Если пользователь через разные группы входит сразу и в read list, и в write list, то этому пользователю будут предоставлены права на изменение.

read only

Определяет уровень доступа «по умолчанию» для пользователей, которые не включены в списки read list и wrtie list. Если параметр не задан, предполагается, что «read only = yes», поэтому пользователи будут ограничены правами на «чтение».

writable или writeable

Параметры writable и writeable являются синонимами, допустимо использовать любое написание. Оба параметра являются инверсией параметру read only, поэтому нет разницы, что вы укажете: «read only = yes» или «writable = no». Если параметры заданы несколько раз, то силу имеет последнее из указанных значений.

Алгоритм определения прав доступа к общему ресурсу

Алгоритм определения прав доступа к общему ресурсу

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

1. Разрешают всем пользователям «чтение» и далее расширяют кому-то из них права до уровня «запись» с помощью write list.

writable = no
write list = editor_user_1 editor_user_2

2. Разрешают всем пользователям «запись» по умолчанию и далее урезают права до уровня «чтение» для определенных пользователей с помощью read list (так сделано в ALD Pro).

writable = yes
read list = reader_user_1 reader_user_2

Схемы предоставления прав доступа Windows и Samba немного отличаются, поэтому можно привести только частичное соответствие:

Права Windows

Права Samba

Allow Read

В настройках общей папки ALD Pro этот уровень доступа называется «Чтение».

Субъект нужно включить в списки:

⚬ valid user;

⚬ read list.

Allow Write

Нет полного соответствия, т. к. добавление пользователя в write list дает ему не только права на запись, но и права на изменение прав доступа к объектам, если он является их владельцем.

Allow Full Control

В настройках общей папки ALD Pro этот уровень доступа называется «Изменение и назначение прав».

Субъект нужно включить в списки:

⚬ valid users;

⚬ write list.

Примечание. Изменение прав доступа будет возможно только из приложения smbclient при подключении по протоколу NT1 и через файловый менеджер Windows. В файловом менеджере fly права доступа можно менять только при прямом обращении к объектам с файлового сервера, а если подключиться к общему ресурсу через SMB, то эта функция будет недоступна.

Deny Read, Deny Write или Deny Full Control

В настройках общей папки ALD Pro этот уровень доступа называется «Доступ запрещён».

Субъект нужно включить в список invalid users.

На файловом сервере Samba есть так же список «admin users», у которого нет полного аналога в Windows. Если пользователь будет администратором общего ресурса, то он сможет действовать в общей папке от имени суперпользователя root в обход ACL файловой системы. В настройках общей папки ALD Pro такой уровень называется «Полный доступ». Но стоит заметить, что для возможности использования прав администратора пользователь должен быть также включен в списки «valid users» и «write list». Ранее для этого уровня доступа мы не добавляли пользователей в «write list», поэтому они могли лишиться полных прав, если становились участником другой группы, которой назначены права «Чтение». Но с версии 2.4.0 мы изменили эту настройку, чтобы поведение системы стало ближе к ожиданиям наших пользователей.

6. Авторизация на уровне ACL файловой системы

Если пользователь не входит в список «admin users», то после установления SMB-подключения его права будут дополнительно ограничиваться настройками списков доступа, которые хранятся в расширенных атрибутах объектов файловой системы.

Служба Samba работает от имени суперпользователя root, поэтому имеет доступ ко всем объектам файловой системы и при обработке запросов от пользователей может имитировать любую модель проверки прав доступа. В настройках общей папки ALD Pro вы можете выбрать один из следующих режимов работы в зависимости от поставленной задачи:

  • POSIX ACL — это штатный режим работы Samba, который не требует подключения каких-либо дополнительных модулей виртуальной файловой системы (Virtual File System, VFS). В этом режиме служба smbd в момент обращения к файловой системе подменяет эффективные идентификаторы пользователя и группы, чтобы делегировать проверку прав доступа функциям операционной системы Linux. Проверка выполняется как обычно с использованием прав RWX (read, write, execute) по модели UGO (user, group, others), которая расширяется списками доступа POSIX. Настраивать права доступа можно напрямую из Linux с использованием файлового менеджера fly-fm.

  • ACL XATTR — в этом режиме мы подключаем vfs-модуль acl_xattr, который позволяет чуть лучше имитировать Windows ACL, используя те же POSIX ACL, но часть информации уже сохраняется в расширенных атрибутах, поэтому уровень совместимости с Linux становится ниже.

  • NFS4 ACLs — в этом режиме мы подключаем vfs-модуль nfs4acl_xattr, который переводит файловый сервер в режим максимальной совместимости с Windows ACL, сохраняя всю необходимую информацию в расширенных атрибутах файлов. Но следует понимать, что данный режим исключает возможность работы с файлами напрямую, и настраивать права доступа можно будет только с Windows-машин.

Мы рекомендуем использовать POSIX ACL, поэтому далее будем рассматривать только этот режим работы.

Настройка общей папки на портале управления ALD Pro

Настройка общей папки на портале управления ALD Pro

Система Linux позаимствовала у UNIX модель дискреционного разграничения доступа UGO (от англ. User — Group — Others, т.е. пользователь — группа — остальные), в соответствии с которой у каждого объекта файловой системы есть три категории пользователей:

  • Пользователь — это пользователь, который считается владельцем объекта. Владелец объекта не только получает права, определенные для этой категории пользователей, но и может изменять права доступа с помощью команды chmod (от англ. change mode). Именно поэтому модель называется дискреционной от лат. discretio — решение должностным лицом какого-либо вопроса по собственному усмотрению. Изменить владельца может только суперпользователь root или другой пользователь, которому назначена привилегия CAP_CHOWN.

  • Группа — это группа, которая тоже считается владельцем объекта, но ее участники не могут изменять права доступа к объекту, им можно только назначить специфичные права доступа. Изменить группу может как суперпользователь root, так и владелец объекта с помощью команды chown (от англ. change owner), но по соображениям безопасности владелец может назначить только ту группу, участником которой является сам.

  • Остальные — это все остальные пользователи, которые не вошли в предыдущие две категории.

Права доступа UGO проверяются строго «слева направо», о чем (к величайшему сожалению) не догадывается подавляющее большинство начинающих Linux-администраторов:

  1. Если пользователь является владельцем объекта, он получает права пользователя, и процедура проверки прав доступа завершается.

  2. Если пользователь не является владельцем, но входит в состав участников группы, которая является владельцем, то он получает права группы, и процедура завершается.

  3. Если пользователь не является ни владельцем, ни участником группы-владельца, то он получает права, предназначенные для всех остальных пользователей.

Базовый алгоритм определения прав доступа к объекту файловой системы Linux

Базовый алгоритм определения прав доступа к объекту файловой системы Linux

Базовая модель безопасности очень проста, но не обладает достаточной гибкостью, чтобы с ее помощью можно было эффективно решать задачи по организации совместного доступа сотрудников к файлам, поэтому в ядро Linux с оглядкой на Windows была включена поддержка расширенных списков доступа POSIX ACL. Учитывая, что информация о владельцах и правах доступа UGO хранится непосредственно в inode, а списки доступа ACL находятся в расширенных атрибутах, для возможности использования ACL файловая система должна быть смонтирована с поддержкой расширенных атрибутов.

При добавлении POSIX ACL алгоритм немного усложняется, но логика остается прежней, чтобы стандартная проверка UGO была частным случаем, когда POSIX ACL не заданы:

  • Если пользователь является владельцем объекта, он получает права владельца, и процедура завершается.

  • Если пользователь включен в ACL, то он получает права из ACL с учетом маски (если она определена), и процедура завершается. Маска — это специальное правило POSIX ACL, которое определяет максимально допустимые права доступа.

  • Если пользователь является участником группы-владельца и/или одной из групп ACL, то он получает сумму всех этих прав с учетом маски (если она определена), и процедура завершается.

  • Если пользователь не попал ни в одну из описанных выше категорий, то он получает права, предназначенные для всех остальных пользователей.

Алгоритм определения прав доступа к объекту файловой системы Linux с учетом ACL

Алгоритм определения прав доступа к объекту файловой системы Linux с учетом ACL

Теперь перейдем к разрешениям, которые определяют действия, допустимые по отношению к объектам. В соответствии с базовой моделью безопасности существует три разрешения: чтение (Read), запись (Write) и выполнение (eXecute), значение которых зависит от типа объектов.

  • Применительно к файлам все очень просто:

    • Чтение (r) — дает разрешение на чтение содержимого файла.

    • Запись (w) — разрешает полностью переопределить содержимое файла или добавить новые данные в конец. При этом иметь разрешение на чтение необязательно.

    • Выполнение (x) —разрешает запускать исполняемые файлы. Если файл является скриптом, то для его запуска интерпретатором достаточно, чтобы файл был доступен для чтения. Но чтобы запустить скрипт напрямую по имени ./test.sh, вам потребуется установить на файл флаг execute.

  • Применительно к каталогам все немного сложнее, но можно значительно упростить понимание, если вспомнить, что в Linux папки — это просто специальные файлы, внутри которых записаны ссылки на айноды. Назначение разрешений для каталогов следующее:

    • Чтение (r) — дает разрешение на чтение специального файла каталога, в котором содержится список файлов с номерами айнод. При этом нужно понимать, что этого разрешения недостаточно, чтобы обращаться к айнодам, поэтому посмотреть права доступа к файлам не получится.

    • Запись (w) — имеет силу, только если у пользователя будет разрешение на выполнение, о чем забывают рассказать в подавляющем большинстве источников. Таким образом, разрешение на запись дополняет разрешение на выполнение, позволяя создавать новые записи, переименовывать и удалять уже существующие записи в специальном файле каталога.

    • Выполнение (x) — дает разрешение на вход в папку (cd), чтение метаинформации по дочерним объектам и доступ к ним в соответствии с установленными правами доступа. Другими словами, если у пользователя есть разрешение на чтение дочернего файла, то для того чтобы он смог воспользоваться этим правом, ему нужны разрешения на выполнение для всех вышестоящих каталогов.

Разрешения rwx группируются по три бита в восьмеричное число от 0 до 7, причем биты следуют в обратном порядке:

  • 20 = 1 — Исполнение (execute)

  • 21 = 2 — Запись (write)

  • 22 = 4 — Чтение (read)

Учитывая отличия в файловых системах Windows и Linux, при сохранении файлов c Windows-компьютеров сервер Samba по умолчанию пытается сопоставлять DOS-атрибуты с флагами UGO, что приводит к неожиданному появлению флагов eXecute на файлах и снижает совместимость с Linux. Для того чтобы у нас оставалась возможность предоставить доступ к файлам Linux-пользователям напрямую, мы отключаем такое сопоставление для всех общих папок с помощью параметра «map archive = no». Если вам потребуется включить это сопоставление, вы можете сделать это с помощью ключа в реестре Samba.

Сопоставление DOS-атрибутов на разрешения Linux

Сопоставление DOS-атрибутов на разрешения Linux

Ещё одним крайне важным аспектом в части авторизации на уровне ACL являются права доступа для новых файлов и папок, создаваемых на файловом сервере. С версии 2.4.0 мы позволяем управлять этими настройками с помощью следующих параметров:

  • «force create mode» и «force directory mode» — позволяют повысить права доступа, которые устанавливаются на новые объекты файловой системы, до уровня 0777. Эти значения будут складываться с помощью логического ИЛИ с правами доступа по умолчанию, которые для каталогов  устанавливаются на уровне 0755 (rwx r-x r-x), а для файлов 0644 (rw- r— r—). Обратите внимание, что ведущий ноль в этих числах означает, что это просто число в восьмеричной системе счисления.

  • inherit permissions — позволяет переопределять предыдущие два параметра, устанавливая наследование прав от родительского каталога.

Мы рекомендуем управлять правами с помощью ACL, поэтому на уровне настроек общей папки для каталогов можно установить права 0770, для файлов 0660 и отключить наследование разрешений:

[test_share]
force directory mode = 0770
force create mode  = 0660
inherit permissions = no

Тогда на уровне ACL на папки отделов вам нужно будет установить права, как на нижеследующем скриншоте:

Настройка прав доступа на папку отдела с помощью ACL

Настройка прав доступа на папку отдела с помощью ACL

7. Специфика работы с правами доступа при подключении SMB-ресурса

Общий ресурс можно подключить, например, средствами FUSE в пространстве пользователя. Если требуется временный доступ, то в адресной строке можно просто вбить адрес smb://file-1.ald.company.lan/test_share, где:

  • smb — указывает на SMB-протокол;

  • file-1.ald.company.lan — полное имя файлового сервера;

  • test-share — имя общего ресурса для подключения.

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

Создание сетевого подключения во fly-fm

Создание сетевого подключения во fly-fm

Ещё можно выполнить монтирование сетевого ресурса с помощью библиотеки cifs-utils из командной строки:

sudo apt install cifs-utils
sudo mount -t cifs -o sec=krb5,cruid=$USER,uid=$UID,gid=$GROUPS,file_mode=0770,dir_mode=0770 //file-1.ald.company.lan/test-share /home/admin/test-share/

где:

  • sudo – команду нужно вызывать из-под sudo, чтобы команда была выполнена с повышенными привилегиями, но в переменных $USER, $UID и $GROUPS были данные из переменных окружения текущего пользователя.

  • -t – параметр определяет тип файловой системы.

  • -o — ключ позволяет задать набор опций для подключения общей папки.

    • sec=krb5 — определяет, что при подключении к серверу клиент должен будет использовать аутентификацию по протоколу Kerberos V5 без цифровых подписей (англ. integrity). Подписи не требуются, т.к. сервер будет требовать шифрование.

    • cruid=$USER — определяет владельца учетных данных Kerberos (credentials uid). При монтировании папки из-под sudo эффективный UID подменяется на 0 (root), поэтому данный параметр нужно задать явно cruid=my_user, либо использовать переменную окружения $USER, которая при выполнении команд из-под sudo не изменяет своего значения и продолжает хранить имя текущего пользователя.

    • uid, gid, file_mode и dir_mode — определяют владельцев и дискреционные права доступа, под которыми файлы и папки должны быть смонтированы в файловой системе. Служба cifsd по умолчанию использует эффективные идентификаторы процесса, который ее запустил, поэтому при монтировании из-под sudo значения uid/gid нужно задать явно.

  • //file-1.ald.company.lan/test-share — путь к общей папке на файловом сервере.

  • /home/admin/test-share — точка монтирования. Этот каталог должен существовать на момент подключения сетевого ресурса.

А чтобы пользователю не требовались права sudo, правило монтирования можно описать в файле /etc/fstab следующим образом:

#общая папка                           точка монтирования              тип    параметры
//file-1.ald.company.lan/test-share    /home/admin/test-share          cifs   user,noauto,sec=krb5,file_mode=0770,dir_mode=0770

Где:

  • noauto — параметр указывает, что диск не требуется монтировать автоматически при загрузке системы.

  • user — параметр указывает, что монтировать папку cможет обычный пользователь без прав суперпользователя. Есть также параметр multiuser, который позволяет использовать одну и ту же точку монтирования для нескольких пользователей сразу. В этом случае SMB-клиент создает одно общее подключение, а файловый сервер Samba авторизует входящие запросы, в зависимости от того, от какого из пользователей они поступают.

Вне зависимости от способа подключения общего ресурса работа с ним будет существенно отличаться от работы с файлами в проводнике Windows или при локальном обращении к файлам, так как вы будете видеть не те дискреционные права доступа, которые заданы на файловом сервере, а те значения, под которыми этот общий ресурс примонтирован на текущем хосте. В Linux для SMBv1, конечно, была реализована поддержка получения дискреционных прав доступа с сервера, но этот протокол использовать небезопасно, поэтому придется немного подождать поддержки этого механизма для SMBv3.

8. Настройка ACL в Linux

Сложность настройки списков доступа в Linux заключается в том, что подавляющее большинство файловых менеджеров позволяет редактировать только базовые права UGO, и для настройки ACL приходится обращаться к утилитам getfacl и setfacl, что довольно непросто, даже когда четко понимаешь, что именно нужно настроить. Операционная система Astra Linux в этом смысле является приятным исключением, т.к. ее файловый менеджер fly-fm позволяет настроить все, что нужно, полностью из графики.

Единственный момент — при добавлении новых субъектов в ACL приложение позволяет выполнить поиск только по тем записям, которые могут быть перечислены с помощью стандартных функций операционной системы, а в настройках sssd эта функция по умолчанию отключена. Конечно, никто не мешает включить параметр «enumerate = true», но такой способ подойдет только для очень небольших организаций, в которых не более тысячи сотрудников, т.к. загрузка всех пользователей из домена в локальный кеш будет создавать большие задержки в работе системы. Мы уже договорились с разработчиками операционной системы, чтобы они реализовали возможность прямого поиска в LDAP-каталоге без использования enumerate, но пока эти изменения ещё не появились в составе ОС, мы создали для своих заказчиков вспомогательную утилиту aldpro-setfacl, в разработке которой принял участие и ваш покорный слуга.

Утилита aldpro-setfacl встраивается в файловый менеджер через меню «Действия», позволяет выполнить поиск субъектов в домене, добавить их в ACL и перейти к настройке прав доступа. Уже совсем скоро deb-пакет с этим приложением можно будет загрузить из личного кабинета, а в дальнейшем мы обязательно включим его в состав нашего официального репозитория. Буду крайне признателен за любую обратную связь.

Уверен, что вам понравятся нововведения, которые мы реализовали в версии 2.4.0, а если ещё и статья приглянется, то обязательно не забудьте оставить за неё свой голос )))

Демонстрация работы утилиты aldpro-setfacl

Демонстрация работы утилиты aldpro-setfacl

В  качестве финального аккорда приведу примеры основных конфигурационных файлов Samba-сервера из поставки ALD Pro 2.4.0. 

/etc/samba/smb.conf

[global]
workgroup = ALD
realm = ALD.COMPANY.LAN
dedicated keytab file = FILE:/etc/samba/samba.keytab
kerberos method = dedicated keytab
security = ads
idmap config ALD : range = 1584000000-1584199999
idmap config ALD : backend = sss
idmap config * : range = 0-0
idmap config * : backend = tdb
restrict anonymous = 2
usershare allow guests = no
log file = /var/log/samba/log.%m
include = registry
include = /etc/samba/share.conf

[homes]
browsable = yes
writable = yes
create mask = 0600
directory mask = 0700
valid users = %S
read only = No

/etc/samba/share.conf

[test_share]
path = /opt/samba_shares/test_share
force directory mode = 0770
force create mode  = 0660
writable = yes
map archive = no
valid users = @employees
invalid users =
read list =
write list = @employees
admin users =

/etc/sssd/sssd.conf

[domain/ald.company.lan]
use_fully_qualified_names = False
id_provider = ipa
ipa_server = _srv_, dc-1.ald.company.lan
ipa_domain = ald.company.lan
ipa_hostname = file-1.ald.company.lan
auth_provider = ipa
chpass_provider = ipa
access_provider = ipa
cache_credentials = True
ldap_tls_cacert = /etc/ipa/ca.crt
krb5_store_password_if_offline = True

[sssd]
services = ifp
domains = ald.company.lan

[nss]
homedir_substring = /home

[pam]

[sudo]

[autofs]

[ssh]

[pac]

[ifp]
allowed_uids = 0, 33, 114, fly-dm, ipaapi

[secrets]

[session_recording]

/etc/nsswitch.conf

passwd:         files sss
group:          files sss
shadow:         files sss
gshadow:        files

hosts:          files dns
networks:       files

protocols:      db files
services:       db files sss
ethers:         db files
rpc:            db files

netgroup:       nis sss
sudoers:        files sss

automount:      sss

В этой статье мы рассмотрим, как в Linux смонтировать общую сетевую папку, расположенную на хосте Windows. В Windows для доступа к общим сетевым папкам используется протокол SMB (Server Message Block), который ранее назывался CIFS (Сommon Internet File System). В Linux для доступа к сетевым папкам Windows по протоколу SMB можно использовать клиент cifs-utils или Samba.

    Содержание:

  • Смонтировать сетевую папку в Linux с помощью cifs-util
  • Автоматическое монтирование сетевой папки в Linux
  • Linux: подключиться к сетевой папке с помощью клиента samba

Совет. Для доступа к сетевым папкам по SMB/CIFS используется порт TCP/445. Для разрешения имени используются порты UDP 137, 138 и TCP 139. Если эти порты закрыты, вы сможете подключиться к сетевой папке Windows только по IP адресу.

Смонтировать сетевую папку в Linux с помощью cifs-util

Вы можете смонтировать сетевую папку, находящуюся на Windows хосте, с помощью утилит из пакета cifs-util. Для установки пакета выполните команду:

  • В Ubuntu/Debian: $ sudo apt-get install cifs-utils
  • В CentOS/Oracle/RHEL: $ sudo dnf install cifs-utils

Создайте точку монтирования:

$ sudo mkdir /mnt/share

Теперь вы можете смонтировать сетевую папку с компьютера Windows под пользователем User03с помощью команды:

$ sudo mount.cifs //192.168.31.33/backup /mnt/share -o user=User03

Укажите пароль пользователя Windows для подключения к сетевой папке.

mount.cifs подключить сетевую папку smb в linux

При подключении сетевой SMB папки можно задать дополнительные параметры:

$ sudo mount -t cifs -o username=User03,password=PasswOrd1,uid=1000,iocharset=utf8 //192.168.31.33/backup /mnt/share

  • //192.168.31.33/backup – сетевая папка Windows
  • /mnt/share – точка монтирования
  • -t cifs – указать файловую систему для монтирования
  • -o опции монтирования (эту опцию можно использовать только с правами root, поэтому в команде используется sudo)
  • username=User03,password=PasswOrd1 – имя и пароль пользователя Windows, у которого есть права доступа к сетевой папке. Можно указать имя пользователя guest, если разрешен анонимный доступ к сетевой папке
  • iocharset=utf8 – включить поддержку кодировки UTF8 для отображения имен файлов
  • uid=1000 – использовать этого пользователя Linux в качестве владельца файлов в папке

команда mount cifs в linux

По умолчанию шары Windows монтируются в Linux с полными правами (0755). Если вы хотите изменить права по-умолчанию при монтировании, добавьте в команду опции:

dir_mode=0755,file_mode=0755

Если вы хотите использовать имя компьютера при подключении сетевого каталога Windows, добавьте в файл /etc/hosts строку:

IP_АДРЕС    ИМЯ_КОМПЬЮТЕРА

Чтобы не указывать учетные данные пользователя Windows в команде монтирования сетевой папки, их можно сохранить в файле.

Например:

$ mcedit ~/.windowscredentials

Добавьте в файл:

username=User03
password=PasswOrd1

Для подключения к папке под анонимным пользователем:

username=guest
password=

Если нужно указать учетную запись пользователя из определенного домена Active Directory, добавьте в файл третью строку:

domain = vmblog.ru

Измените права на файл:

$ chmod 600 ~/.windowscredentials

Теперь при подключении сетевой папки вместо явного указания имени пользователя и пароля можно указать путь к файлу:

$ sudo mount -t cifs -o credentials=/home/sysops/.windowscredentials,uid=1000,iocharset=utf8 //192.168.31.33/backup /mnt/share

Отмонтировать сетевую SMB папку:

$ sudo umount /mnt/share

Автоматическое монтирование сетевой папки в Linux

Можно настроить автоматическое монтирование сетевой папки Windows через /etc/fstab.

$ sudo mcedit /etc/fstab

Добавьте в файл следующую строку подключения SMB каталога:

//192.168.31.33/backup /mnt/share cifs user,rw,credentials=/home/sysops/.windowscredentials,iocharset=utf8,nofail,_netdev 0 0
  • rw – смонтировать SBM папку на чтение и запись
  • nofail – продолжить загрузку ОС если не удается смонтировать файловую систему
  • _netdev – указывает что подключается файловая система по сети. Linux не будет монтировать такие файловые системы пока на хосте не будет инициализирована сеть.

Вы можете указать версию протокола SMB, которую нужно использовать для подключения (версия SMB 1.0 считается небезопасной и отключена по-умолчанию в современных версиях Windows). Добавьте в конец строки с настройками подключения параметр vers=3.0.

//192.168.31.33/backup /mnt/share cifs user,rw,credentials=/home/sysops/.windowscredentials,iocharset=utf8,nofail,_netdev,vers=3.0 0 0

Если на стороне хоста Windows используется несовместимая (старая версия) SMB, при подключении появится ошибка:

mount error(112): Host is downилиmount error(95): Operation not supported

Чтобы сразу смонтировать сетевую папку, выполните:

$ mount -a

Linux: подключиться к сетевой папке с помощью клиента samba

Установите в Linux клиент samba:

  • В Ubuntu/Debian: $ sudo apt-get install smbclient
  • В CentOS/Oracle/RHEL: # dnf install smbclient

Для вывода всех SMB ресурсов в локальной сети:

$ smbtree -N

Вывести список доступных SMB папок на удаленном хосте Windows:

smbclient -L //192.168.31.33 -N

Если в Windows запрещен анонимный доступ, появится ошибка:

session setup failed: NT_STATUS_ACCESS_DENIED

В этом случае нужно указать учетную запись пользователя Windows, которую нужно использовать для подключения:

smbclient -L //192.168.31.33 -U User03

Если нужно использовать учетную запись пользователя домена, добавьте опцию –W:

smbclient -L //192.168.31.33 -U User03 –W Domain

smbclient вывести список общих папок на компьютере windows

Для интерактивного подключения к сетевой папке Windows используется команда:

smbclient //192.168.31.33/backup -U User03 -W Domain

или

smbclient //192.168.31.33/backup -U User03

Для анонимного доступа:

smbclient //192.168.31.33/backup -U Everyone

После успешного входа появится приглашение:

smb: \>

Вывести список файлов в сетевой папке:

dir

smbclient вывести список файлов в сетевой папке linux

Скачать файл из сетевой папки Windows:

get remotefile.txt /home/sysops/localfile.txt

Сохранить локальный файл из Linux в SMB каталог:

put /home/sysops/localfile.txt  remotefile.txt

Можно последовательно выполнить несколько команд smbclient:

$ smbclient //192.168.31.33/backup -U User03 -c "cd MyFolder; get arcive.zip /mnt/backup/archive.zip"

Полный список команд в smbclient можно вывести с помощью команды help. Команды smbclient схожи с командами ftp клиента.

При использовании команды smbclient может появиться ошибка:

Unable to initialize messaging contextsmbclient: Can't load /etc/samba/smb.conf - run testparm to debug it.

Чтобы исправить ошибку, создайте файл /etc/samba/smb.conf.

Если на хосте Windows отключен протокол SMB 1.0, то при подключении с помощью smbclient появится ошибка:

Reconnecting with SMB1 for workgroup listing.
protocol negotiation failed: NT_STATUS_CONNECTION_RESET
Unable to connect with SMB1 -- no workgroup available.

Cover image for Access the Windows file system through WSL!

Have you ever wondered, how to access the windows file system through WSL? If the answer is yes you are in the right place!

Microsoft WSL has given us an incredible way to access the windows file system, you have just to navigate through an exact path to do it. Without further due, let’s dive into the topic.

1. Use the cd command in the Linux terminal.

To access the windows files you have to navigate through /mnt/your_windows_path

cd /mnt/c/Users
**OR**
cd /mnt/d/your_folder/your_folder

Enter fullscreen mode

Exit fullscreen mode

Now you have access to every file in the Linux and Windows file systems.

2. Moving files between the two systems through WSL.

If you want to move files between the two operating systems you can simply use the cp or mv commands.
cp — command for copying files
mv — command for moving files
Use of cp command

cp /mnt/c/file.txt /home/username/Documents

Enter fullscreen mode

Exit fullscreen mode

Use of mv command

mv  /mnt/c/file.txt /home/username/Documents

Enter fullscreen mode

Exit fullscreen mode

3. Editing windows files through WSL.

To edit windows files through the Linux terminal using WSL, you have to use any text editor that can be opened in the terminal. One of the most famous text editors is nano. In our example, I am going to use the nano editor.
Type into the terminal nano and the path to the file.

sudo nano /mnt/c/Users/file.txt

Enter fullscreen mode

Exit fullscreen mode

Now you can edit freely files from your terminal.

4. Creating files in windows through WSL.

To create a file in a specific windows directory you have first to navigate to it and then use the touch command to create a file.
touch — a command that creates a file.
!!! The file extension can be anything you want.

cd /mnt/c/Users/Public/Documents/ 
touch filename.txt

Enter fullscreen mode

Exit fullscreen mode

The file is created and can be opened from both systems.

5. Deleting files from the windows file system through WSL.

To delete windows files using WSL, you have to navigate to the directory where the file lives and use the rm command.
rm — a command that deletes files / directories

cd /mnt/c/Users/Public
sudo rm example_file.jpg

Enter fullscreen mode

Exit fullscreen mode

Congratulations you learned 5 vital skills about working with the Linux terminal. 🎺🎺🎺
If you have any questions, comment down, I will answer as soon as possible.

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Какие ненужные файлы можно удалить с диска с в windows 11
  • Acer aspire one driver pack windows 7
  • Как запустить установочную флешку на ноутбуке windows 10
  • Как сделать пароль на папку windows 10 без программ
  • Программы не совместимые с ос windows 10 примеры