2010-01-06

Маленькая Samba

Ну просто нужен файловый сервер samba с авторизацией пользователей. Самый простой, но стабильный...
Будем все далеть как всегда на suse...


Сразу список параметров, которые меня заинтересовали:

config file
create mask
delete veto files
directory security mask
fake directory create times
force create mode
force directory mode
force directory security mode
force group
force security mode
force user
get quota command
guest account
guest ok
guest only
hide files
hide unreadable
hosts allow
hosts deny
include
inherit acls
inherit owner
inherit permissions
interfaces
invalid users
log file
log level
map to guest
max connections
max disk size
max open files
netbios name
null passwords
nt acl support
only user
oplocks
panic action
path
postexec
preferred master
public
read list
read only
remote browse sync
security
security mask
server string
set quota command
time server
username
valid users
veto files
workgroup
write list

Делаем папку, где будут валяться шары:

shaman:~ # mkdir /samba
shaman:~ # chmod 755 /samba

Конфигурация 1.

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

shaman:~ # mkdir /samba/write4all
shaman:~ # chmod 777 /samba/write4all/
shaman:~ # mkdir /samba/read4all
shaman:~ # chmod 755 /samba/read4all/

smb.conf:

[global]
workgroup = WORKGROUP
security = share

[write4all]
comment = Запись для всех, кому не лень...
path = /samba/write4all
writable = yes
guest ok = yes

[read4all]
comment = Только чтение для всех, кому не лень...
path = /samba/read4all
read only = yes
guest ok = yes


Как мы видим, простая примитивная конфигурация. Для разминки, так сказать. Теперь давайте ее повторим, но с маленьким но: security = user

Конфигурация 2.

[global]
workgroup = WORKGROUP
security = user
map to guest = bad user

[write4all]
comment = Запись для всех, кому не лень...
path = /samba/write4all
writable = yes
guest ok = yes
nt acl support = no

[read4all]
comment = Только чтение для всех, кому не лень...
path = /samba/read4all
writable = no
guest ok = yes
nt acl support = no


Итак, отличие от конфигурации 1 в том, что в данном случае у нас есть возможность нарезать доступы по пользователям, по при этом иметь общие ресурсы, доступные для всех повально. Обеспечил это нам параметр map to guest = bad user. Ну и еще одна приятная особенность - нет такого понятия, как безопасность на содержимом ресурсов. Благодаря такой классной штуке, как nt acl support = no.

Гуд. Нравится.

Конфигурация 3.

Расширим возможности. необходимо, чтоб пользователь 1 (smbu-vovka) мог только читать из ресурса, а пользователь 2 (smbu-serik) мог писать в ресурс. И при этом ресурсы на чтение и запись для всех должны работать.

shaman:~ # mkdir /samba/users
shaman:~ # mkdir /samba/users/smbu-admin
shaman:~ # mkdir /samba/users/smbu-vovka
shaman:~ # mkdir /samba/users/smbu-serik
shaman:~ # useradd -c "SAMBA access" -d /samba/users/smbu-vovka -s /qqq/qqq smbu-admin
shaman:~ # useradd -c "SAMBA access" -d /samba/users/smbu-vovka -s /qqq/qqq smbu-vovka
shaman:~ # useradd -c "SAMBA access" -d /samba/users/smbu-serik -s /qqq/qqq smbu-serik
shaman:~ # groupadd smbg-admin
shaman:~ # smbpasswd -a smbu-admin
shaman:~ # smbpasswd -a smbu-vovka
shaman:~ # smbpasswd -a smbu-serik
shaman:~ # mkdir /samba/docu
shaman:~ # chmod 755 /samba/docu/
shaman:~ # chown smbu-admin:smbg-admin /samba/docu/
shaman:~ # chown smbu-admin:smbg-admin /samba/write4all/ -R

Ну и smb.conf:

[global]
workgroup = WORKGROUP
security = user
map to guest = bad user

[write4all]
comment = Запись для всех, кому не лень...
path = /samba/write4all
writable = yes
guest ok = yes
nt acl support = no
force user = smbu-admin
force group = smbg-admin

[read4all]
comment = Только чтение для всех, кому не лень...
path = /samba/read4all
writable = no
guest ok = yes
nt acl support = no

[docu]
path = /samba/docu
writable = yes
guest ok = no
nt acl support = no
read list = smbu-vovka
write list = smbu-serik
force user = smbu-admin
force group = smbg-admin


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

shaman:~ # useradd -c "SAMBA access" -d /samba/users -s /qqq/qqq smbu-dron
shaman:~ # smbpasswd -a smbu-dron
shaman:~ # useradd -c "SAMBA access" -d /samba/users -s /qqq/qqq smbu-fedik
shaman:~ # smbpasswd -a smbu-fedik

smb.conf:

[global]
workgroup = WORKGROUP
security = user
map to guest = bad user

[write4all]
comment = Запись для всех, кому не лень...
path = /samba/write4all
writable = yes
guest ok = yes
nt acl support = no
force user = smbu-admin
force group = smbg-admin

[read4all]
comment = Только чтение для всех, кому не лень...
path = /samba/read4all
writable = no
guest ok = yes
nt acl support = no

[docu]
comment = Безопасная нарезка по пользователям
path = /samba/docu
writable = yes
guest ok = no
nt acl support = no
read list = smbu-vovka, \
smbu-dron
write list = smbu-serik, \
smbu-fedik
force user = smbu-admin
force group = smbg-admin




Вроде все работает.

Конфигурация 4.

Теперь сделаем шару, откуда все могут читать, но писать в нее могут только smbu-vovka и smbu-dron.

shaman:~ # mkdir /samba/not4all
shaman:~ # chown smbu-admin:smbg-admin /samba/not4all/
shaman:~ # chmod 755 /samba/not4all/

smb.conf:

[global]
workgroup = WORKGROUP
security = user
map to guest = bad user
log file = /var/log/samba/samba.log

[write4all]
comment = Запись для всех, кому не лень...
path = /samba/write4all
writable = yes
guest ok = yes
nt acl support = no
force user = smbu-admin
force group = smbg-admin

[read4all]
comment = Только чтение для всех, кому не лень...
path = /samba/read4all
writable = no
guest ok = yes
nt acl support = no

[docu]
comment = Безопасная нарезка по пользователям
path = /samba/docu
writable = yes
guest ok = no
nt acl support = no
read list = smbu-vovka, \
smbu-dron
write list = smbu-serik, \
smbu-fedik
force user = smbu-admin
force group = smbg-admin

[not4all]
comment = Все читают, не все пишут
path = /samba/not4all
writable = no
guest ok = yes
nt acl support = no
write list = smbu-vovka, \
smbu-dron
force user = smbu-admin
force group = smbg-admin



Конфигурация 5.


Теперь усложним админскими задачами. А именно сделать логирование, аудит, и veto ограничения.

shaman:~ # chmod 777 /samba/docu/ -R

smb.conf:

[global]
workgroup = WORKGROUP
security = user
map to guest = bad user
log file = /var/log/samba/samba.log
log level = 0 vfs:2

[write4all]
comment = Запись для всех, кому не лень...
path = /samba/write4all
writable = yes
guest ok = yes
nt acl support = no
force user = smbu-admin
force group = smbg-admin
veto files = /*.avi/*.mp3/*.wmv/*.mp4/*.vob/*.mpg/*.mpeg/*.3gp/*.divx/

[read4all]
comment = Только чтение для всех, кому не лень...
path = /samba/read4all
writable = no
guest ok = yes
nt acl support = no

[docu]
comment = Безопасная нарезка по пользователям
path = /samba/docu
writable = yes
guest ok = no
nt acl support = no
read list = smbu-vovka, \
smbu-dron
write list = smbu-serik, \
smbu-fedik
veto files = /*.avi/*.mp3/*.wmv/*.mp4/*.vob/*.mpg/*.mpeg/*.3gp/*.divx/
force create mode = 0775
vfs objects = full_audit
full_audit:prefix = %S|%u|%g|%m|%D|%I
full_audit:failure = none
full_audit:success = mkdir rmdir write pwrite rename unlink chmod fchmod chown fchown
full_audit:facility = local7
full_audit:priority = notice

[not4all]
comment = Все читают, не все пишут
path = /samba/not4all
writable = no
guest ok = yes
nt acl support = no
write list = smbu-vovka, \
smbu-dron
force user = smbu-admin
force group = smbg-admin
veto files = /*.avi/*.mp3/*.wmv/*.mp4/*.vob/*.mpg/*.mpeg/*.3gp/*.divx/


Если нужно удалить все расширенные атрибуты:

setfacl -b -R директория


Читать далее