Файловый сервер на ubuntu в домене windows

Для того, чтобы создать файловый сервер, интегрированный в домен Active Directory, вам в первую очередь потребуется ввести вашу машину с Ubuntu в домен. Этому посвящена отдельная статья:

Для создания файлового сервера вам не нужно настраивать PAM, достаточно добавить доменных пользователей и группы через Winbind в систему.

После успешного входа в домен вам останется всего лишь настроить расшаренные ресурсы на вашем компьютере.

Тут стоит сразу обратить внимание на одну очень важную вещь: Samba пытается спроецировать права на файлы Windows на права Unix, однако из-за кардинальных различий в механизмах присвоения прав сделать это не всегда возможно. Учтите, что права на файлы всегда и в любом случае контролируются вашей файловой ситемой на компьютере с Ubuntu, самба может лишь подстраиваться под них, но не менять их поведение.

Поэтому по умолчанию на расшаренных ресурсах будут весьма скудные возможности контроля доступа — назначение разных прав для пользователя, группы и всех остальных. Однако это легко исправить, добавив в вашу ФС поддержку POSIX ACL. В этом случае можно будет назначать различные права различным пользователям и группам практически как в Windows.

Поддержка POSIX ACL есть как минимум в ext3/4, для её активирования вам необходимо просто добавить к опциям монтирования нужного раздела параметр acl.

Важно, чтобы каталог, который вы хотите расшарить через Samba, лежал на диске, смонтированном с опцией acl. Иначе вы не сможете нормально использовать механизм разграничения прав доступа к файлам на шарах.

Есть и ещё один весьма немаловажный момент: POSIX ACL не поддерживают наследование прав доступа от родительских каталогов, а в Windows эта возможность присутствует. Поэтому в Samba реализован дополнительный механизм сохранения информации о наследовании прав доступа, который использует расширенные атрибуты файловой системы. Поэтому чтобы Samba могла корректно обрабатывать наследование прав кроме acl к опциям монтирования файловой системы необходимо добавлять параметр user_xattr, который как раз и отвечает за включение поддержки расширенных атрибутов.

Например, я всегда использую для организации расшаренных ресурсов отдельные LVM диски и у меня строчки в fstab для них выглядят примерно так:

/dev/mapper/data-profiles /var/data/profiles  ext3    defaults,noexec,acl,user_xattr        0       2

Опция noexec нужна потому, что на шарах для Windows 100% не должно быть исполняемых файлов Linux, и лишний раз перестраховаться не помешает.

Для работы с acl на Ubuntu необходимо установить пакет соответствующих утилит:

sudo aptitude install acl 

После чего посмотреть расширенные права (т.е. ACL) на файл или каталог можно будет командой

getfacl file

А установить командой

setfacl [options] file

На всякий случай хочу обратить внимание на то, что механизм POSIX ACL не имеет никакого отношения к Samba — это просто надстройка над стандартным механизмом разграничения прав в Linux. Соответственно Samba может его использовать, но не может как-либо изменить или обойти.

Для работы с расширенными атрибутами ФС потребуется очень похожий на acl пакет утилит — attr, поставить который можно командой

sudo aptitude install attr

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

getfattr file

А для установки

setfattr [options] file

Однако тут есть одна небольшая загвоздка. Дело в том, что Samba хранит всю информацию о наследовании в бинарном виде в единственном расширенном атрибуте user.SAMBA_PAI. Поэтому поменять что-то с помощью setfattr вам не удастся, только разве что полностью удалить расширенные атрибуты (иногда такое может потребоваться сделать).

Ну а управлять наследованием прав вам придётся с Windows машины с помощью штатных инструментов этой системы. Либо же с помощью утилиты smbcacls, если вы разберётесь, как ей пользоваться.

Существует так же экспериментальный VFS модуль acl_xattr, который позволяет хранить NT ACL полностью в расширенных атрибутах. К сожалению, документации по нему нет, поэтому что-то вразумительное сказать по его поводу сложно. Ожидается, что в Samba 4 будет полная интегрированная поддержка NT ACL, а пока что можно пользоваться тем, что есть.

Если вам есть что добавить по поводу расширенных атрибутов в Samba и методах работы с ними — обязательно напишите в эту тему на форуме. Буду благодарен за любые ссылки, статьи и комментарии по теме.

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

Итак, будем считать что у вас есть в системе каталог, который вы хотите расшарить через Samba (и он находится на диске, подмонтированном с поддержкой acl и user_xattr). Теперь необходимо собственно настроить его расшаривание. Для этого нужно внести соответствующую информацию в файл /etc/samba/smb.conf.

Начнём с общих настроек, которые можно добавить в секцию [global] этого файла (это далеко не все возможные параметры, просто несколько достаточно полезных из них):

  # Отключить расшаривание принтеров. Если вы конечно и вправду не хотите их расшаривать.
  # Для полного отключения нужно указывать все 4 строки, приведённых ниже 
  load printers = no
  show add printer wizard = no
  printcap name = /dev/null
  disable spoolss = yes
  # Сделать скрытыми при просмотре с Windows файлы со следующими именами
  hide files = /$RECYCLE.BIN/desktop.ini/lost+found/Thumbs.db/
  # Использовать для шар с публичным доступом следующего UNIX пользователя в качестве Guest
  guest account = nobody
  # Воспринимать как guest незарегистрированных пользователей
  map to guest = Bad User

## Настройки, использующие расширенные атрибуты файловой системы 
 
  # Обрабатывать наследования прав с помощью расширенных атрибутов ФС
  map acl inherit         = yes
  # Использовать расширенные атрибуты ФС для хранения атрибутов DOS
  store dos attributes    = yes
  # Отключить маппинг DOS атрибутов на UNIX права, включённый по умолчанию
  # Согласно man smb.conf при использовании расширенных атрибутов эти опции обязаны быть отключены 
  map archive             = no
  map system              = no
  map hidden              = no 
  map readonly            = no

Теперь настройки непосредственно расшаренного ресурса. У меня он называется profiles, а физически на Ubuntu машине находится по адресу /var/data/profiles:

[profiles]
  # Комментарий
  comment = User Profiles
  # Путь до папки, которую расшариваем 
  path = /var/data/profiles/
  # Пользователи с неограниченными правами доступа к шаре
  # У меня стоит группа администраторов домена.
  # Эти пользователи при работе с файлами воспринимаются как локальный root 
  admin users = "@DOMAIN\Администраторы домена"
  # Скрыть папки, к которым у пользователя нет доступа 
  hide unreadable = yes
  # Доступ не только на чтение 
  read only = no
  # Маски для создаваемых файлов - можно задать по желанию
  #create mask = 0600
  #directory mask = 0700
  # Отключение блокировок - лучше отключить
  locking                 = no

Есть множество других опций — за подробностями стоит обратиться к документации по Samba.

Не забудьте поставить правильного владельца и права доступа на папку, которую вы расшариваете, а то несмотря на любые настройки самбы в неё может быть запрещена запись на уровне прав Linux. Я делаю обычно так:

sudo chmod ug+rwx /var/data/profiles
sudo chown root:"пользователи домена" /var/data/profiles

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

Проверьте правильность конфигурации Samba командой

testparm

После чего перезапустите Samba:

sudo /etc/init.d/samba restart

Теперь вы можете с любой машины домена получить доступ к расшаренному ресурсу.

Кстати, не забывайте про SGID и Sticky биты для каталогов. Они позволят вам наследовать группу-владельца и запрещать пользователям удаление не своих файлов — это может быть очень удобно для многопользовательских хранилищ. Однако в отличие от редактирования прав из Windows поменять эти биты на папках на расшаренном ресурсе не получится — только вручную непосредственно на Ubuntu компьютере.

Кроме всего прочего Samba позволяет организовывать хранение предыдущих версий файлов, что бывает иногда полезно при создании общих ресурсов с пользовательскими данными. Подробности в соответствующей статье:

Домен Active Directory есть далеко не у всех. Поэтому часто возникает необходимость организовать на Linux машине автономное файловое хранилище со своей собственной системой авторизации. Это сделать очень просто.

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

Самое главное — определиться с используемым способом доступа к ресурсу. Для его изменения надо правильно установить значение параметра security в секции [global] файла /etc/samba/smb.conf. Подробней об этом параметре можно почитать тут или же в официальной документации.

Обычно используется значение share или user.

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

Подробнее настройка простого файлового сервера описана в основной статье про Samba.

Для дома удобно чтобы все видели всех. Это можно сделать если добавить 4 строчки в секцию [global] файла /etc/samba/smb.conf. Некоторые могут уже существовать.

[global]
workgroup = WORKGROUP
map to guest = Bad User
netbios name = NOTEBOOK
security = user

NOTEBOOK — имя компьютера которое будет в сети.
Кроме этого надо установить дополнительные программы :

sudo apt-get install samba 

Для kubuntu надо еще установить smb4k .
После редактирования конфигов надо перезапустить службы. В systemd (начиная с 15.04) перезапуск выглядит так:

sudo systemctl restart smbd.service nmbd.service

Посмотреть «шары» можно через файловый броузер nautilus, konkueror или так:

smbclient -L 127.0.0.1

. Официальная документация на английском.

В данной статье будет рассмотрен вариант развёртывания файлового сервера Samba на базе операционной системы UBUNTU и организация его взаимодействия с доменов Windows.

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

дистрибутив: UBUNTU 16.04.4
имя сервера Linux: 2UBUNTU-16
домен Windows: TESTDOMAIN.LOCAL
контроллеры домена: 2SRV1.TESTDOMAIN.LOCAL, 2SRV2.TESTDOMAIN.LOCAL
администратор контроллера домена: adm

Подготовка

После установки дистрибутива выполняем обновление информации о пакетах и сами пакеты:

sudo apt-get update
sudo apt-get upgrade

Для удобства работы с сервером можно дополнительно установить Webmin (систему управления сервером LINUX через web-интерфейс).

Если есть необходимость, то меняем имя сервера:

hostnamectl set-hostname 2UBUNTU-16

Добавляем доменное имя сервера в файл hosts

sudo nano /etc/hosts

127.0.0.1 localhost
127.0.1.1 2ubuntu-16 2ubuntu-16.testdomain.local

После этого перезагружаем сервер:

sudo reboot

Установка Samba

Помимо установки Samba, так же устанавливаем пакеты Kerberos и Winbind (для возможности подключения и взаимодействия с доменом на Windows):

sudo apt install krb5-user winbind samba libnss-winbind libpam-winbind 

При установке Kerberos будет запрошена область по умолчанию — нужно указать адрес домена (в нашем случае TESTDOMAIN.LOCAL)

Kerberos5 install

Проверяем доступность контроллера домена:

ping -c 5 TESTDOMAIN.LOCAL

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

Устанавливаем пакет:

sudo apt install ntp

Настраиваем файл конфигурации службы ntp 

sudo nano /etc/ntp.conf

Нужно закомментировать все текущие указанные серверы проверки время и добавить свой домен ( pool TESTDOMAIN.LOCAL)

Перезапускаем службу времени и проверяем статус синхронизации:

sudo systemctl restart ntp
ntpq -p

Запрашиваем тикет у Kerberos у контроллера домена:

kinit Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.

Если не отобразилась информация об ошибке, то запрос прошёл верно и можно проверить результат:

klist

klist

Настройка Samba

Сохраним резервную копию файла конфигурации:

sudo cp /etc/samba/smb.conf /etc/samba/smb.default.conf

Далее редактируем файл конфигурации:

sudo nano /etc/samba/smb.conf

Пример заполнения раздела [global]

[global]
security = ADS
workgroup = TESTDOMAIN
realm = TESTDOMAIN.LOCAL
encrypt passwords = yes
# Default idmap config for local BUILTIN accounts and groups
idmap config * : backend = tdb
idmap config * : range = 3000-7999
# idmap config for the TESTDOMAIN domain
idmap config TESTDOMAIN : backend = rid
idmap config TESTDOMAIN : range = 10000-999999
winbind enum users = yes
winbind enum groups = yes
winbind use default domain = yes

После сохранения изменений в файле smb.conf выполняем проверку:

testparm

testparm

Взаимодействие Samba с доменом Windows

Если ошибок не обнаружено, то подключаем сервер к домену:

sudo net ads join -U Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.

ads join

В случае отсутствия ошибок проверяем наличия сервера в списке компьютеров домена на стороне контроллера.

2ubuntu 16

Перезагружаем сервис Winbind:

service winbind restart

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

wbinfo --ping-dc
wbinfo -u
wbinfo -g

ping вс

Чтобы UBUNTU могла использовать не только локальные группы и пользователей, но и доменные данные, нужно отредактировать настройки диспетчера службы имен NSS (Name Services Switch)

sudo nano /etc/nsswitch.conf

Необходимо дописать следующие значения:

passwd: compat winbind
group: compat winbind

После этого можно проверить возможность просмотра пользователей и групп:

getent passwd adm
getent group "пользователи домена"

getent

Добавляем папку общего ресурса:

sudo mkdir -p /srv/samba/public

Назначаем имя владельца и группу для созданной папки:

sudo chown "adm":"пользователи домена" /srv/samba/public

Редактируем файл конфигурации Samba, чтобы добавить поддержку Windows ACLs и сетевую папку public

sudo nano /etc/samba/smb.conf

[global]
# Windows ACLs Support
vfs objects = acl_xattr
map acl inherit = yes
store dos attributes = yes

[Public]
path = /srv/samba/public/
read only = no

Перезапустим службу Samba (чтобы применить изменения):

service smbd restart && service nmbd restart

Для удобства удалённой настройки разрешений сетевых ресурсов добавим администраторам домена привилегию SeDiskOperatorPrivilege:

net rpc rights grant "TESTDOMAIN\администраторы домена" SeDiskOperatorPrivilege -U "TESTDOMAIN\adm"

Проверяем подключение привилегий:

net rpc rights list privileges SeDiskOperatorPrivilege -U "TESTDOMAIN\adm"

rpc rights list

Теперь управлять разрешениями для общих ресурсов можно удалённо с сервера Windows. Для этого запускаем оснастку «Управление компьютером» от имени администратора домена, выбираем «Подключиться к другому компьютеру…» и выбираем имя сервера Linux ( 2UBUNTU-16.TESTDOMAIN.LOCAL)

В разделе «Служебные программы» — «Общие папки» — «Общие ресурсы» будут отображаться сетевые ресурсы, доступные на сервере Linux.

Дополнительно:

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

Проверяем наличие соответствующего модуля:

dpkg -l |grep samba-vfs-modules

Устанавливаем, если он отсутствует:

apt install samba-vfs-modules

Добавляем поддержку корзины для общего ресурса Public

sudo nano /etc/samba/smb.conf

[Public]
path = /srv/samba/public/
read only = no
vfs object = recycle
recycle: repository = .recycle/%U
recycle: touch = yes
recycle: keeptree = yes
recycle: versions = yes

«vfs object = recycle» – включение корзины для общего ресурса;
«recycle: repository = .recycle/%U» – папка, куда будут перемещаться удаленные файлы;
«recycle: touch = yes» – обновлять дату при перемещении файла в корзину;
«recycle: keeptree = yes» – сохранять структуру каталогов удаленного файла;
«recycle: versions = yes» – при перемещении в корзину файла с существующим именем, добавлять к началу имени файла префикс «Copy #».

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

http://www.linuxrussia.com/samba-as-domain-controller.html
https://4skill.ru/fajlovyj-server-samba-v-domene-windows/

Profile picture for user Олег

Ubuntu

Samba — ПО на Linux для организации общего доступа к файлам в среде Windows. Серверная часть открывает общий доступ к папкам Ubuntu для внешних пользователей. Клиентская часть позволяет получить доступ к сетевым папкам samba.

Есть у меня аппаратный сервер с операционной системой Ubuntu Server 18.04.5 LTS. На сервере имеется большой том, который планируется использовать в качестве файлового хранилища.

Установка Ubuntu Server 18.04.5 LTS на сервер Dell PowerEdge R740xd2

IP и DNS

Серверу назначен прямой IP адрес, hostname внесён в DNS сервер. Причём DNS сервер для Linux машин отдельный от доменного, но оба они умеют резолвить адреса друг друга. Подробно на этом не будем останавливаться.

AD аутентификация

В операционной системе уже настроена доменная аутентификация, можно логиниться на сервер под учётной записью Active Directory, права доступа тоже управляются с помощью доменных групп. Аутентификацию на сервере не я настраивал, поэтому описывать процесс подробно не буду. Скажу только, что доменную аутентификацию можно сделать разными способами. Читайте про krb5-user (пакет для протокола Kerberos, который используется для аутентификации в Windows) и/или winbind (позволяет использовать учетную запись пользователя из Active Directory). Я winbind не использую.

Проверить аутентификацию:

kinit v.pupkin@ILAB.LOCAL
klist

NTP

Время должно быть синхронизировано. Если расхождение по времени больше пяти минут, то мы не получим тикет от Kerberos. В общем, аутентификация не заработает. Не буду описывать процесс настройки ntp.

Ссылки

https://www.samba.org/samba/docs/current/man-html/smb.conf.5.html

Установка samba

apt-get install samba

Самба настраивается в файле /etc/samba/smb.conf. Старый файл можно переименовать в smb.conf.bak, чтобы подсматривать параметры по умолчанию:

samba

Указываем глобальные настройки:

[global]

# домен и настройки SID
workgroup = ILAB
realm = ILAB.LOCAL
security = ads

idmap config * : backend = tdb
idmap config * : range = 1300000-1999999
idmap config ILAB : backend = rid
idmap config ILAB : read only = yes
idmap config ILAB : range = 100000-999999

# представляемся
server string = %h server (Samba, Ubuntu)

# логирование
log file = /var/log/samba/log.%m
max log size = 1000
log level = 1

# письмо при краше
panic action = /usr/share/samba/panic-action %d

# пароли и аутентификация (многое здесь мне непонятно и в AD не используется)
passdb backend = tdbsam
obey pam restrictions = yes
unix password sync = yes
passwd program = /usr/bin/passwd %u
passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n password\supdated\ssuccessfully* .
pam password change = yes

# убираем DNS проксирование
dns proxy = no

# не мешаем контроллерам домена
domain master = no
local master = no
preferred master = no

# отключаем принтеры
load printers = no
printing = bsd
show add printer wizard = no
printcap name = /dev/null
disable spoolss = yes

# убираем гостей и папки пользователей
usershare max shares = 0
usershare allow guests = no

Здесь:

  • workgroup — NETBIOS ИМЯ ДОМЕНА (или РАБОЧАЯ ГРУППА, если нет домена), в заглавном регистре
  • realm — ДОМЕН, в заглавном регистре
  • server string — имя сервера, которое будет отображаться в сетевом окружении
  • log file — логи
  • max log size — размер логов
  • log level — уровень логирования
  • panic action — действия при краше самбы, по умолчанию отправляет письмо админу
  • passdb backend — место хранения паролей
  • obey pam restrictions — поддержка PAM аутентификации, непонятно зачем она включена по умолчанию, потому что PAM аутентификация не может использоваться при «encrypt passwords = yes», а encrypt passwords при этом устарел и по умолчанию включен.
  • unix password sync — синхронизация паролей пользователей samba с локальными паролями, в AD не работает
  • passwd program — программа для синхронизации паролей, в AD не работает
  • passwd chat — текст для работы с паролями, в AD не работает
  • pam password change — поддержка смены пароля в PAM
  • security = ads — поддержка AD, самба ведёт себя как член домена.
  • dns proxy — обращаться ли к DNS для определения DNS имени по NETBIOS имени.
  • domain master — главный обозреватель домена
  • local master — главный обозреватель подсети
  • preferred master — предпочтительный обозреватель домена
  • load printers — загружать принтеры
  • printing — интерпретация статуса принтеров
  • show add printer wizard — отображать иконку добавления принтера
  • printcap name — определение списка принтеров
  • disable spoolss — поддержка SPOOLSS (для принтеров)
  • usershare max shares — папки пользователей
  • usershare allow guests — папки гостей
  • idmap config — настройки сопоставления SID с пользователями и группами POSIX

Давайте расшарим какую-нибудь папку, например, /u01/cron/, создаю её.

samba

Назначаю владельца и группу папки (пользователь и группа доменные!)

samba

Добавляем секцию в /etc/samba/smb.conf:

[bck-cron-u01]
path = /u01/cron
valid users = cron v.pupkin p.vupkin
read list   = cron v.pupkin p.vupkin
write list  = cron v.pupkin p.vupkin
read only = no

Здесь:

  • [NAME] — имя шары
  • path — путь к папке
  • valid users — кому можно войти
  • read list — кто имеет права на чтение
  • write list — кто имеет право на запись
  • read only — только чтение

Пример конфига:

После изменения файла smb.conf не помешает проверить его утилитой testparm:

testparm

samba

Перезагружаем службу:

service smbd restart

Добавим сервер в домен:

net ads join -U v.pupkin -D ILAB.LOCAL

В случае успеха увидим что-то типа:

Using short domain name — DOMAIN
Joined 'SERVER' to realm 'domain.local'

У меня надпись немного другая:

samba

Сервер в домен добавился, но не прописался в DNS. В моём случае это нормально, потому как сервер прописан в DNS другой зоны, отличной от доменной. В AD сразу переношу его из папки Computers в нужный мне организационный юнит.

samba

Дадим 10 минут на распространение DNS зон, проверяем:

samba

Шара доступна.

Развернуть файловый сервер для Windows машин на Ubuntu достаточно просто. Обычно такой сервер используется для организации файловых хранилищ в рамках Active Directory домена.

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

В любом случае воспользуйтесь Samba – установите ее с помощью менеджера пакетов Synaptic или следующей командой:

sudo apt-get install samba

Файловый сервер в составе домена Active Directory

Для создания файлового сервера, интегрированного в домен Active Directory, сначала необходимо ввести Вашу машину с Ubuntu в домен.

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

Войдя в домен, настройте расшаренные ресурсы на компьютере. Учтите, что Samba будет проецировать права на файлы Windows на права Unix, однако принципиальные различия в механизмах присвоения прав скорее всего не дадут ей это сделать. Права на файлы всегда и в любом случае управляются Вашей файловой системой на компьютере с Ubuntu, а Samba может только адаптироваться под них, а менять их поведение — нет.

Так что по умолчанию расшаренные ресурсы будут располагать скромными возможностями контроля доступа, включая назначение разных прав для пользователя, группы и всех остальных. Но Вы можете это без труда исправить, добавив в ФС поддержку POSIX ACL. Тогда можно будет назначать различные права различным пользователям и группам почти как в Windows.

Поддержку POSIX ACL можно найти в ext3/4, и для её активации нужно только добавить к опциям монтирования нужного раздела параметр acl.

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

Помните еще вот о чем: POSIX ACL не поддерживают наследование прав доступа от родительских каталогов, в то время как в Windows эта возможность есть. Так что в Samba существует дополнительный механизм сохранения информации о наследовании прав доступа, использующий расширенные атрибуты файловой системы. Чтобы Samba корректно обрабатывала наследование прав, кроме acl к опциям монтирования файловой системы добавьте параметр user_xattr, ответственный за включение поддержки расширенных атрибутов.

Например, удобно использовать для организации расшаренных ресурсов отдельные LVM диски. В этом случае строчки в fstab для них выглядят так:

/dev/mapper/data-profiles           /var/data/profiles                        ext3    
defaults,noexec,acl,user_xattr        0           2

Опция noexec нужна для перестраховки: что на шарах для Windows 100% не должно быть исполняемых файлов Linux.

Установите пакет необходимх утилит для работы с acl на Ubuntu:

sudo aptitude install acl 

Теперь просмотрите расширенные права (т.е. ACL) на файл или каталог следующей командой:

getfacl file

Установите такой командой:

setfacl [options] file

Не забывайте, что механизм POSIX ACL никак не связан с Samba — это только надстройка над стандартным механизмом разграничения прав в Linux. Так что Samba может его использовать, но не способна как-либо изменить или обойти.

Для использования расширенных атрибутов ФС пригодится похожий на acl пакет утилит — attr, поставьте его следующей командой:

sudo aptitude install attr

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

getfattr file

А для установки выполните:

setfattr [options] file

Следует помнить, что Samba хранит всю информацию о наследовании в бинарном виде в единственном расширенном атрибуте user.SAMBA_PAI. Так что поменять что-то с помощью setfattr не получится, возможно только полное удаление расширенных атрибутов (в некоторых случаях необходимость в этом возникает).

Контролировать наследование прав с Windows машины возможно с помощью штатных инструментов этой системы, или утилитой smbcacls.

Расширенные атрибуты файловой системы позволяют включить в Samba полную поддержку файловых атрибутов DOS (например скрытого, архивного и пр.).

Если в Вашей системе есть каталог, который нужно расшарить через Samba (и он расположен на диске, подмонтированном с поддержкой acl и user_xattr), настройте его расшаривание – введите нужную информацию в файл /etc/samba/smb.conf.

В первую очередь займитесь общими настройками для добавления в секцию [global] этого файла:


# Отключить расшаривание принтеров. Если вы конечно и вправду не хотите их расшаривать.
 # Для полного отключения нужно указывать все 4 строки, приведённых ниже 
  load printers = no
 show add printer wizard = no
 printcap name = /dev/null
 disable spoolss = yes
 # Сделать скрытыми при просмотре с Windows файлы со следующими именами
 hide files = /$RECYCLE.BIN/desktop.ini/lost+found/Thumbs.db/
 # Использовать для шар с публичным доступом следующего UNIX пользователя в качестве Guest
 guest account = nobody
 # Воспринимать как guest незарегистрированных пользователей
 map to guest = Bad User
 
## Настройки, использующие расширенные атрибуты файловой системы 
 
  # Обрабатывать наследования прав с помощью расширенных атрибутов ФС
 map acl inherit         = yes
 # Использовать расширенные атрибуты ФС для хранения атрибутов DOS
 store dos attributes    = yes
 # Отключить маппинг DOS атрибутов на UNIX права, включённый по умолчанию
 # Согласно man smb.conf при использовании расширенных атрибутов эти опции обязаны быть отключены 
  map archive             = no
 map system              = no
 map hidden              = no 
  map readonly            = no

Затем настройте сам расшаренный ресурс. В примере он указан как profiles, а физически на Ubuntu машине расположен по адресу /var/data/profiles:


[profiles]
 # Комментарий
 comment = User Profiles
 # Путь до папки, которую расшариваем 
  path = /var/data/profiles/
 # Пользователи с неограниченными правами доступа к шаре
 # У меня стоит группа администраторов домена.
 # Эти пользователи при работе с файлами воспринимаются как локальный root 
  admin users = "@DOMAIN\Администраторы домена"
 # Скрыть папки, к которым у пользователя нет доступа 
  hide unreadable = yes
 # Доступ не только на чтение 
  read only = no
 # Маски для создаваемых файлов - можно задать по желанию
 #create mask = 0600
 #directory mask = 0700
 # Отключение блокировок - лучше отключить
 locking                 = no

Существует ряд других опций – вся подробная информация есть в документации по Samba.

Обязательно поставьте правильного владельца и права доступа на расшариваемую папку, иначе в неё может быть запрещена запись на уровне прав Linux. Можете сделать так:

sudo chmod ug+rwx /var/data/profiles
sudo chown root:"пользователи домена" /var/data/profiles

Внимание! Так как Ваша Ubuntu машина введена в домен, вы можете применять пользователей и группы домена в качестве владельцев файлов прямо в Ubuntu.

Проверьте корректность настройки Samba командой:

testparm

Далее перезапустите Samba:

sudo /etc/init.d/samba restart

Теперь получить доступ к расшаренному ресурсу Вы можете с любой машины домена. Но не забывайте про SGID и Sticky биты для каталогов, предназначенные для наследования группы-владельца и запрещения пользователям удаления не своих файлов — это особенно актуально для многопользовательских хранилищ. При этом, в отличие от редактирования прав из Windows, поменять эти биты на папках на расшаренном ресурсе невозможно — только вручную прямо на Ubuntu компьютере.

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

Автономный файловый сервер

Далеко не все располагают доменом Active Directory. Поэтому часто появляется необходимость организовать на Linux машине независимое файловое хранилище с собственной системой авторизации. Это несложно.

В этом случае вся информация о пользователях будет храниться в базе данных Samba, а добавлять и удалять пользователей на нее придется вручную.

Главное – нужно определиться с используемым способом доступа к ресурсу. Следует корректно установить значение параметра security в секции [global] файла /etc/samba/smb.conf.

Стандартно применяется значение share или user.

И не забудьте изменить значение параметра workgroup на соответствующее, причем все остальные настройки напрямую будут зависеть от конкретных целей.

Автономный файловый сервер без авторизации

В домашних условиях удобно, когда все видят всех. Для этого просто добавьте 4 строчки в секцию [global] файла /etc/samba/smb.conf (некоторые могут уже быть в наличии):

[global]
workgroup = WORKGROUP
map to guest = Bad User
netbios name = NOTEBOOK
security = user

NOTEBOOK — имя компьютера, которое будет в сети. Также установите дополнительные программы:

sudo apt-get install samba 

Дополнительно для kubuntu необходимо установить smb4k . После редактирования настроек перезапустите службы. В systemd (начиная с 15.04) перезапуск осуществляется так:

sudo systemctl restart smbd.service nmbd.service

Посмотрите «шары» через файловый броузер nautilus, konkueror или следующим образом:

smbclient -L 127.0.0.1

Расшаривание папки на Ubuntu

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

mkdir ~/share

Затем добавить в конец файла /etc/samba/smb.conf такие строки, а «yuraku1504» в них замените на имя пользователя компьютера с Samba:


[MyShareWork]
comment = Anonymous Samba Share
path = /home/yuraku1504/share
guest ok = yes
browsable =yes
writable = yes
read only = no
force user = yuraku1504
force group = yuraku1504

Папка будет открыта для чтения и записи.

Исходная ситуация была такая: есть некий сервер, на базе windows 2000 сервер (признаться честно — сомнительной лицензии, скорее всего пиратская), и этот сервер выполняет три основные функции: ftp-сервер (в основном, анонимный), файл-сервер и веб-сервер (простые html-страницы).
В связи с различными пертурбациями этот сервер от нас уезжает в регион, взамен него купили сервер — SuperMicro, на который планировалось поставить линукс и плавно перенести туда все функции.
Скажу честно, лучше всего с его RAID-массивом справился Ubuntu Server 9.04, поэтому он и был выбран в качестве основной ОС. Что бы там ни говорили про несовместимость Webmin и Ubuntu, я на него решительно поставил Webmin. Зачем? Элементарно — администрировать его не мне одному, адекватных спецов по Линуксу кроме меня нет, и чтобы по ночам не будили с глупыми вопросами для бытовых нужд и ставился Webmin. В конечном итоге все равно все конфигурировать руками пришлось. А вот наглядно поработать с пользователями и группами удобнее все же через веб-консоль.
На Ubuntu в ходе всех плясок был предустановлен следующий софт: Apache+MySQL+PHP для веб, Samba (практически все доступные потроха от нее, обязательно с winbind и kerberos 5), ProFTPD и SSH сервер (само собой).
Причем ProFTPD на стандартном компакт-диске не идет, его надо будет тянуть с инета.
Поскольку LAMP под Ubuntu настраивается довольно тривиально, я писать про это не буду.

Интернет для обновлений сервера у меня идет через прокси, поэтому первым делом после установки сервера чтобы работал apt-get через прокси создаем файл proxy в папке командой
sudo touch /etc/apt/apt.conf.d/proxy 
внутри которого пишем одну единственную строку:
Acquire::http::Proxy «http://10.115.1.250:3128»;
(конечно же, подставляем свой айпи и свой порт вместо моих). Не забываем учитывать большие и маленькие буквы и не забываем точку с запятой в конце.
Следующим шагом (да, я сентиментален) делаем
sudo apt-get update
чтобы получить с сервера список пакетов

sudo apt-get install mc
и установить Midnight commander. Конечно, кому-то он нахрен не нужен, но я настоятельно рекомендую его новичкам, чтобы они понимали, что делают и визуально хотя бы приблизительно запоминали пути и файлы.
Кстати, еще один плюс Midnight Commander’а в том, что его можно запустить командой
sudo mc
и совершенно не парясь получить как рутовый доступ к файлам через панельки, так и рутовую консоль (Ctrl+O работает идеально), без необходимости повторно подтверждать пароль после некоторого простоя. В дальнейшем я писать слово sudo не буду, подразумевая, что все команды должны выполняться с правами суперпользователя, через консоль mc.
Кстати, если вы работаете через putty то (во избежания мусора на экране) слева в пункте меню Translation выберите в выпадающем списке вместо KOI8-R привычный для убунты UTF-8.
Следующим шагом добавляем пару необходимых репозиториев — для этого редактируем файл
/etc/apt/sources.list 
и вносим в него две строки:
deb http://download.webmin.com/download/repository sarge contrib 

— правильно, это webmin, после чего сохраняем файл и выполняем команды
apt-get install webmin

конечно же, соглашаясь и нажимая «да» везде, где потребуется. Одновременно с этим ставим Иксы, если надо, и простенький менеджер окон:
apt-get install xorg blackbox
чтобы blackbox запускался автоматически по команде
xinit
делаем следующее: в папке своего пользователя (того единственного, которого Вы завели когда ставили систему), например, /home/iamuser создаем соответствующий rc-файл
touch /home/iamuser/.xinitrc
да, с точкой впереди. В этом файле пишем строку:
exec blackbox
и сохраняем. Теперь для того, чтобы запустить иксы, надо будет лишь набрать xinit и все. Кстати, включать их лишний раз не рекомендую — они нужны лишь для того, чтобы наглядно управлять виртуальной машиной на стадии установки-настройки, дабы сильно не заморачиваться с командной строкой.

Но это все была лирика. Теперь — самое главное и страшное: надо настроить Samba таким образом, чтобы она принимала всю регистрационную информацию с виндового контроллера домена. Честно говоря, настраивать самбу через вебмин — ну, разве что кроме создания расшаренных ресурсов — это извращение. Вручную редактируем файлы и сразу пишем туда всю необходимую информацию. Объясню подробно на своих конфигах:
/etc/samba/smb.conf
[global]
    log file = /var/log/samba/log.%m  #файл лога
    restrict anonymous = 2

    idmap gid = 10000-20000
    socket options = TCP_NODELAY
    client use spnego = no
    null passwords = yes
    encrypt passwords = yes
     realm = SIBRC.MCHS.RU 
#домен, в котором мы будем регистрироваться
    template shell = /bin/bash
    dns proxy = no
    netbios name = SERV2
#netbios имя этого сервера
    idmap uid = 10000-20000
    password server = 10.115.1.100
#адрес сервера, на котором будут проверяться пароли  
    path = /home
#базовый путь к домашней папке
    template homedir = /home/%D/%U #формат шаблона для автоматического создания папок
    workgroup = VSRC #netbios-название домена
    os level = 20
    security = ads
    syslog = 0
    usershare allow guests = yes
    max log size = 1000

[parus]

#шара бухгалтеров, туда смогут писать и читать только они
    writeable = yes
    user = @VSRC\obu
#на самом деле это не пользователь, это ГРУППА
    only user = yes
    write list = @VSRC\obu
#на самом деле это тоже группа
    path = /home/parus

[ftproot]

#это путь к корню ftp, для внутреннего пользования, общедоступен
    writeable = yes
    public = yes
    path = /home/ftp
На этом с самбой вроде все. Но на самом деле для того, чтобы это все заработало, надо еше настроить kerberos. Поэтому второй конфиг, который мы правим —
/etc/krb5.conf
В нем у меня дословно следующее:


[logging]
default = FILE:/var/log/krb5.log

[libdefaults]
default_realm = SIBRC.MCHS.RU #Большими буквами пишем свой домен
dns_lookup_realm = false
dns_lookup_kdc = false
ticket_lifetime = 24000
clock_skew=150

[realms]

#Здесь мы его еще раз описываем
SIBRC.MCHS.RU = {
   default_domain = SIBRC.MCHS.RU
#Большими буквами пишем свой домен
   kdc = dc.sibrc.mchs.ru #полное название контроллера домена
   admin_server = 10.115.1.100 #айпи адрес контроллера домена

}

[domain_realm]

#Тут тавтология какая-то, но без нее не работает:
.SIBRC.MCHS.RU = SIBRC.MCHS.RU
SIBRC.MCHS.RU = SIBRC.MCHS.RU  

После этого перезагружаем все запчасти строкой
/etc/init.d/winbind stop && /etc/init.d/samba restart && /etc/init.d/winbind start 
Проверяем/обновляем радости кербероса следующей последовательностью команд:
 kinit winadmin
(winadmin — имя администратора домена) 
Он запросит пароль для авторизации на вашем контроллере домена. Вводите, и все ок.
После этого самый трогательный момент (на этом месте у многих не получается что-то — в основном из-за лишних строк в конфигах) — включение нашего сервера в домен винды:
net ads join -u webadmin
Он опять запросит пароль — дайте — и если он не написал что-то про неверную роль сервера, то полдела сделано!
Запрашиваем списки пользователей и групп контроллера домена windows командами
wbinfo -u
wbinfo -g

он вывалит на экран все группы и всех пользователей. Чувствуете радость? Правильно :)
Теперь еще несколько конфигов перед началом работы (обычно меняются только пара строк, остальное остается нетронутым, что поменялось — я выделил в комментарии):
/etc/nsswitch.conf
passwd:         compat winbind #тут должно быть так
group:          compat winbind
#тут должно быть так
shadow:         compat
hosts:          files dns
networks:       files
protocols:      db files
services:       db files
ethers:         db files
rpc:            db files
netgroup:       nis

/etc/pam.d/common-account
добавляем строку
account sufficient pam_winbind.so 

/etc/pam.d/common-auth
 добавляем строки
auth sufficient pam_winbind.so
auth sufficient pam_unix.so nullock_secure use_first_pass
auth required pam_deny.so  






/etc/pam.d/common-session
добавляем строку

session required pam_mkhomedir.so umask=0022 skel=/etc/skel  

/etc/pam.d/sudo
добавляем строки

auth sufficient pam_winbind.so
auth sufficient pam_unix.so use_first_pass
auth required pam_deny.so  
 



В общем-то и все.
Еще раз делаем
/etc/init.d/winbind stop && /etc/init.d/samba restart && /etc/init.d/winbind start 
и у нас все должно работать! :)

Конечно же, следите за тем, чтобы все папки, указанные в конфигах, существовали. Кстати, создайте папку с нетбиос-именен домена в домашней папке, которая указана в конфиге самбы.
В моем случае это папка
/home/VSRC
Откровенно говоря, не факт, что она ему понадобится, но быть должна.

Следующий трудный момент — настройка ProFTP
Для начала установим его командой
apt-get install proftpd
Надо сказать, что и его НЕ НАДО настраивать через вебмин — замаетесь. Вебмин нужен лишь как руль, а конфигурировать лучше руками.
В случае с Ubuntu ProFTP имеет два файла конфига — основной, /etc/proftpd/proftpd.conf и тот, где по идее должны быть прописаны все виртуальные ftp-сервера — /etc/proftpd/modules.conf
Кстати, перед установкой я настоятельно рекомендую взять вот эти файлы, распаковать архив в какую-нибудь отдельную папочку и выполнить в ней команду
dpkg -i *.deb
Эти файлы содержат необходимые исправления для того, чтобы русские буквы в proftpd отображались корректно.

Итак, мои конфиги (остановился я на принципиальных моментах):
/etc/proftpd/proftpd.conf

Include /etc/proftpd/modules.conf
UseIPv6                off #выключаем адреса
IPv6
IdentLookups off
ServerName SERV2
#netbios-имя сервера
ServerType            standalone
DeferWelcome off
CharsetLocal UTF-8
#важный момент — кодировка на сервере одна…
CharsetRemote CP1251 #…а пользователю дается другая
MultilineRFC2228        on
DefaultServer on
ShowSymlinks            on
TimeoutNoTransfer        600
TimeoutStalled            600
TimeoutIdle            1200
DisplayLogin welcome.msg
DisplayChdir                   .message true
ListOptions                    «-l»
DenyFilter            \*.*/
Port 21
MaxInstances            30
User proftpd
#пользователь по умолчанию
Group serv2 #группа по умолчанию
Umask                022  022
AllowOverwrite            on
TransferLog /var/log/proftpd/xferlog
SystemLog   /var/log/proftpd/proftpd.log

QuotaEngine off

Ratios off

DelayEngine on

ControlsEngine        off
ControlsMaxClients    2
ControlsLog           /var/log/proftpd/controls.log
ControlsInterval      5
ControlsSocket        /var/run/proftpd/proftpd.sock

AdminControlsEngine off

Вносите свои изменения, и можно использовать этот конфиг.
Второй же содержит информацию об открытых папках, я особо модули не отключал, просто дописал в конце свои строки, где подробно об анонимном пользователе ftp:
/etc/proftpd/modules.conf

ModulePath /usr/lib/proftpd
ModuleControlsACLs insmod,rmmod allow user root
ModuleControlsACLs lsmod allow user *
LoadModule mod_ctrls_admin.c
LoadModule mod_tls.c
LoadModule mod_quotatab.c
LoadModule mod_quotatab_file.c
LoadModule mod_wrap.c
LoadModule mod_load.c
LoadModule mod_ban.c
LoadModule mod_wrap2.c
LoadModule mod_wrap2_file.c
LoadModule mod_dynmasq.c
LoadModule mod_ifsession.c
#указываете папку, которая будет считаться корнем для анонима
AnonRequirePassword off #не требуем пароль
User anonymous #пользователь в системе, от имени которого будет идти запись
Group VSRC\domain users #группа, от имени которой будет идти запись (заметьте — группа принадлежит контроллеру домена windows)
DisplayLogin welcome.msg
DisplayChdir .message
 


AllowRetrieveRestart on #разрешаем докачку
MaxClients none #не ограничиваем в количестве подключений — сетка-то локальная
DefaultChdir /home/ftp #тоже надо, корень анонима
LoginPasswordPrompt off #не запрашиваем пароль
AllowAll
AllowOverwrite on
GroupOwner VSRC\domain users
RootLogin off
AuthUsingAlias off
 

#особые права для особой папкиоставил для примера
AllowRetrieveRestart on #разрешаем дописывать файлы
AllowStoreRestart on
AllowAll 
#разрешаем гадить в папке как только ему хочется
AllowOverwrite on

Все. Безумный анонимный доступ готов.

  • Файрвол windows 10 как настроить
  • Файлы оптимизации доставки windows 10 что это
  • Файловая система refs windows 10
  • Файлы для запуска игр на windows 10
  • Файловый сервер на linux в домене windows