Как установить Samba сервер в Ubuntu

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

Никогда блять, никогда не используйте SAMBA для сети в которой только Linux-машины, ибо это просто извращенство последней стадии рака мозга. Для организации сети Linux – Linux используйте NFS серверы. Так как NFS проще в настройке, скорость передачи данных в разы больше, не тупит при общении между машинами “Linux – Linux”, безопастнее, удобнее, гибче и прочее. Samba создана для унылых Windows сетей и по этому использование оной в Линукс сети просто не природно.

Установка SAMBA сервера

Первым делом необходимо установить SAMBA-сервер и необходимые утилиты себе на компьютер.

sudo aptitude install samba samba-client samba-common system-config-samba smbfs
sudo aptitude install samba samba-client samba-common system-config-samba smbfs

С установкой покончено. Теперь давайте сконфигурируем сервер и создадим шары.
Но начнем с простых примеров.

Некоторые примеры

Анонимный сервер с правами только на чтение
Цель данного типа сервера, предоставить любому пользователю доступ к любому файлу или директории находящемуся в расшаренной папке с правами только на чтение.
Открываем для редактирования файл /etc/samba/smb.conf и вписываем туда следующие строки:

[global]
workgroup = OFFICE
netbios name = MyComputer
security = share
 
[data]
comment = Data files
path = /home/user/data 
read only = Yes
guest ok = Yes 
browseable = Yes
[global]
workgroup = OFFICE
netbios name = MyComputer
security = share

[data]
comment = Data files
path = /home/user/data 
read only = Yes
guest ok = Yes 
browseable = Yes

Сдесь всё просто, файл smb.conf делиться на блоки, главный или общий облок [global], настройки которого применимы ко всему файлу и всем остальным подблокам, если в них (в подблоках) не указаны конткретные директивы.

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

Создаем пользователя:

sudo useradd -c "Test User" -m -g users -p test mike
sudo useradd -c "Test User" -m -g users -p test mike

Создаем директорию:

mkdir /home/user/data
mkdir /home/user/data

Назначаем права:

sudo chmod u+rwx,g+rx,o+rx /home/user/data
sudo chown mike.users /home/user/data
sudo chmod u+rwx,g+rx,o+rx /home/user/data
sudo chown mike.users /home/user/data

Рестартуем демон:

sudo service smbd restart
sudo service smbd restart

Сервер готов!

Анонимный сервер с правами на чтение и запись
Цель данного типа сервера, предоставить любому пользователю доступ к любому файлу или директории находящемуся в расшаренной папке с правами на чтение\запись.
Здесь всё аналогично предыдущему примеру, за исключением парметра read only.

[global]
workgroup = OFFICE
netbios name = MyComputer
security = share
 
[data]
comment = Data files
path = /home/user/data 
read only = No
guest ok = Yes 
browseable = Yes
writeable = yes 
[global]
workgroup = OFFICE
netbios name = MyComputer
security = share

[data]
comment = Data files
path = /home/user/data 
read only = No
guest ok = Yes 
browseable = Yes
writeable = yes 

Здесь параметру read only передаеется значение No, что разрешит нам писать в директории /home/user/data. Для примера я добавил директиву writeable со значением yes. Вы можете выбрать тот параметр, который вам больше нравиться.

Рестартуем демон:

sudo service smbd restart
sudo service smbd restart

Сервер готов!

Защищенный сервер

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

/home/user/public – файлы доступные только для чтения любому пользователю.
/home/user/secret – файлы доступные только определенным пользователям.
/home/user/trashfiles – файлы доступные любому пользователю, права на чтение и запись.

Настроить всё это добро необходимо всё в том же: /etc/samba/smb.conf

Создаем папки:

mkdir /home/user/{secret,public,trashfiles}
mkdir /home/user/{secret,public,trashfiles}

Открываем файл /etc/samba/smb.conf для редоктирования:

sudo nano /etc/samba/smb.conf
sudo nano /etc/samba/smb.conf

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

#
# Sample configuration file for the Samba suite for Debian GNU/Linux.
#
#======================= Global Settings =======================
 
[global]
 
log file = /var/log/samba/log.%m
max log size = 1000
syslog = 0
workgroup = WORKGROUP
server string = %h server (Samba, Ubuntu)
netbios name = miniCompLinux
security = share
browseable = yes
 
[public]
path = /home/user/public
comment = PublicFiles
read only = Yes
guest ok = yes 
browseable = yes
security = share
 
[trashfiles]
path = /home/user/trashfiles
comment = readAndwrite
read only = No
guest ok = yes
browseable = yes
security = share
writeable = yes
 
[secret]
path = /home/user/secret
comment = secretFiles
read only = yes
browseable = yes
writeable = no
security = USER
valid users = booch
 
#force user = booch
#force group = users
#
# Sample configuration file for the Samba suite for Debian GNU/Linux.
#
#======================= Global Settings =======================

[global]

log file = /var/log/samba/log.%m
max log size = 1000
syslog = 0
workgroup = WORKGROUP
server string = %h server (Samba, Ubuntu)
netbios name = miniCompLinux
security = share
browseable = yes

[public]
path = /home/user/public
comment = PublicFiles
read only = Yes
guest ok = yes 
browseable = yes
security = share

[trashfiles]
path = /home/user/trashfiles
comment = readAndwrite
read only = No
guest ok = yes
browseable = yes
security = share
writeable = yes
 
[secret]
path = /home/user/secret
comment = secretFiles
read only = yes
browseable = yes
writeable = no
security = USER
valid users = booch

#force user = booch
#force group = users

Заметьте, что в блоке [global] указан параметр security = share, т.е. доступ к ресурсам свободный для каждого пользователя. Но в блоке [secret] параметр security = USER, т.е. именно для доступа к этой папке система запросит у вас логин и пароль пользователя который был указан в параметре valid users = booch.

Вы можете указать там сколько захотите пользователей, просто перечесляйте их имена без запятой, valid users = booch mark john

Теперь когда файл сконфигурирован, необходимо добавить пользователя которому будет предоставлен доступ к папке /home/user/secret

Создаем пользователя

sudo useradd -c "Test User" -m -g users -p 12345 booch
sudo useradd -c "Test User" -m -g users -p 12345 booch

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

sudo passwd booch
sudo passwd booch

Инициализируем Microsoft Windows пароль, для аворизации по сети:

sudo smbpasswd -a booch
sudo smbpasswd -a booch

Отдаем папки secret, trashfiles, public в пользование пользавтелю booch:

sudo chown booch.users /home/user/public
sudo chmod u=rwx,g=rwx,o-rwx /home/user/public
 
sudo chown booch.users home/user/trashfiles
sudo chmod u=rwx,g=rwx,o-rwx home/user/trashfiles
 
sudo chown booch.users /home/user/secret
sudo chmod u=rwx,g=rwx,o-rwx home/user/secret
sudo chown booch.users /home/user/public
sudo chmod u=rwx,g=rwx,o-rwx /home/user/public

sudo chown booch.users home/user/trashfiles
sudo chmod u=rwx,g=rwx,o-rwx home/user/trashfiles

sudo chown booch.users /home/user/secret
sudo chmod u=rwx,g=rwx,o-rwx home/user/secret

Рестартуем демон:

sudo service smbd restart
sudo service smbd restart

Тестируем

Убедитесь, что товарищЪ добавился в систему:

cat /etc/passwd
booch:x:501:501::/home/booch:/bin/bash
cat /etc/passwd
booch:x:501:501::/home/booch:/bin/bash

Также убедитесь, что создан домашний каталог пользователя booch:

s -l /home | grep booch
drwx------ 11 booch booch  4096 2010-08-09 20:02 booch
s -l /home | grep booch
drwx------ 11 booch booch  4096 2010-08-09 20:02 booch

Просмотреть дамп файла smb.conf и убедиться, что в нем нет ошибок, можно так:

testparm
testparm

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

sudo smbclient -L localhost -U%
sudo smbclient -L localhost -U%

Вывод будет примерно такой:

testLinux

Со стороны Windows шары будут выглядеть так:

Directories

Запрос на авторизацию для доступа в папку secret:
Password

Послесловие

Директивы
# create mask — маска прав для файлов в текущей директории
# comment — описание
# directory mask — маска прав для самой директории, которая может определять такой параметр, как разрешение на создание каталога в текщем каталоге для удаленного пользователя или отсутствия такого.
# workgroup — это имя вашей сети, должно быть одинаковым для всех компьютеров, как рабочая группа в Windows
# netbios name — имя вашего компьютера в сети, сделайте всем машинам уникальное, как имя компьютера в Windows
# server string — описание компьютера, аналог подобного значения в Windows.
# security — определяет доступ к расшариваемым каталогам.
# browseable — хотите ли вы сделать доступными все подкаталоги рашариваемого каталога. Этот параметр также можно использовать отдельно для каждого расшариваемого каталога.
# path — путь до расшариваемой папки. В данном конкретном примере будут расшарены домашняя папка пользователя shara и домашняя папка пользователя video
# comment — комментарий
# readonly — только для чтения.
# hosts allow = — дать доступ только определенным хостам
# writeable = — аналогично read only, вы можете запретить запись или разрешить
# valid users = — этот параметр определяет пользоватлей которые будут иметь доступ к серверу или папке
# force user = — это аналогичная команда
# force group = — аналогично для группы

Права
Обратите внимание, что Samba может ограничить права пользователя, но не может расширить права, заданные системой. То есть, если на расшариваемом каталоге не стоят права на запись для всех в самой системе, Samba не сможет разрешить запись в него сторонним пользователям. Однако если на каталоге стоят права 777, то задав параметр readonly = Yes вы сможете ограничить доступ на запись для пользователей, подключающихся из сети.

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