За тези които не обичат шаренията в сгъстен вид изграждане на SAMBA сървър. Приемаме, че имаме чист инсталиран Debian. Първото нещо е да имаме достъп до Интернет през статично IP.
nano /etc/network/interfaces # The primary network interface # allow-hotplug eno1 # iface eno1 inet dhcp auto eno1 iface eno1 inet static address 192.168.11.2 netmask 255.255.255.0 gateway 192.168.11.1 /etc/init.d/networking restart ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host noprefixroute valid_lft forever preferred_lft forever 2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 00:23:24:c1:5d:51 brd ff:ff:ff:ff:ff:ff altname enp0s31f6 inet 192.168.11.2/24 brd 192.168.11.255 scope global eno1 valid_lft forever preferred_lft forever inet6 fe80::223:24ff:fec1:5d51/64 scope link valid_lft forever preferred_lft forever ip route default via 192.168.11.1 dev eno1 onlink 192.168.11.0/24 dev eno1 proto kernel scope link src 192.168.11.2
Следва да накараме потребителя CCCP да е член на групата sudo. Но за начало първо трябва да го инсталираме.
apt install sudo -y nano /etc/sudoers root ALL=(ALL:ALL) ALL cccp ALL=(ALL:ALL) ALL
Имаме достъп до Интернет. Ще се постараем да създадем чист файлов сървър използвайки SAMBA и WEBMIN за управление. Да вкараме малко шарения в шела на root:
cp /root/.bashrc /root/.bashrc.original cp /home/cccp/.bashrc /root/.bashrc
sudo su apt update -y apt upgrade -y apt install samba -y ### Долната команда не е задължителна. Тя е за клиентската част. apt install smbclient -y
За да нстроим сървъра трябва да определим няколко неща: ● Кои папки ще споделяме ● Кои потребители ще имат право върху споделените папки ● Кои групи с принадлежащите потребители ще имат право върху споделените папки Изхождайки от горните условия трябва да споделим някои папки. Ако нямаме такива, то трябва да ги създадем.
mkdir -p /home/samba/corporate mkdir -p /home/samba/public mkdir -p /home/samba/anonimus_share
Създадохме три папки. corporate за корпоративни клиенти и publick за всички дефинирани в SAMBA. Корпоративните потребители също ще могат да ползват папката public. anonimus_share за абсолютно всеки който иска да достъпи SAMBA.
Отново изхождайки от горното условие ще създадем две групи. corporate за достъп до папката corporate и втора група free за достъп до папката public. За anonimus_share група не е нужна.
groupadd corporate groupadd free
Сега да укажем коя група е собственик на съответната папка.
chgrp -R corporate /home/samba/corporate/ chgrp -R free /home/samba/public/
А сега да дефинираме правата върху папката.
chmod 2770 /home/samba/corporate/ chmod 2775 /home/samba/public/
ВАЖНО !!! Забелязахте ли, че правата са 2770 и 2775? Всички започват с 2 най-отпред. Това позволява на новосъздадените файлове да наследяват родителската група. Ако се чудите как се получава числото 2775 примерно: ● 2 - идентификатор на групата. Правата на групата собственик на /home/samba/public/ се наследяват от всички дъщерни файлове и папки. setuid (SUID) - разрешението за задаване на потребителски идентификатор (потребителя с който се работи получава пълни права на собственика на файла) setgid (SGID) - разрешението за задаване на идентификатор на групата (ако е приложен към файл потребителя получава правата на групата за файла, ако е върху папка то папката наследява правата на родителя) sticky bit - Това разрешение е полезно за защита на файлове от случайно изтриване в среда, в която множество потребители имат достъп за запис в една и съща директория. Само потребителя собственик на файла или директорията където е файла със sticky bit може да изтрие файла. SUID = 4, SGID = 2, sticky bit = 1 (SUID = u+s, SGID = g+s, sticky bit = +t) 0: setuid, setgid, sticky bits are unset 1: sticky bit is in place 2: setgid bit is in place 3: setgid and sticky bits are in place 4: setuid bit is in place 5: setuid and sticky bits are in place 6: setuid and setgid bits are on 7: setuid, setgid, sticky bits are activated ● 775 - три числа. Първото 7 отговаря за собственика, втората 7-ца отговаря за групата, а 5 отговаря за всички останали. ● 7 се получава от сумата на параметрите за обекта 0 = no permission 3 = (-wx) 1 = execute (x) 5 = (r-x) 2 = write (w) 6 = (rw-) 4 = read (r) 7 = (rwx) Ако файла може да се чете (r), обработва (w) и изпълнява (x) то се получава 4+2+1=7 ● От горе казаното числото 775 означава, че собственика има пълни права върху файла, групата има пълни права върху файла, а всички останали могат да четат и изпълняват файла, без да го редактират.
Потребителите в SAMBA ще са част от потребителите на Debian, но няма да могат да се логват в системата.
useradd -M -s /sbin/nologin corporate useradd -M -s /sbin/nologin kasier
-M не създава домашна папка на потребителя, -s /sbin/nologin указва, че няма да има логин шел. Да укажем потребителите в коя група да принадлежат.
usermod -aG free kasier usermod -a -G corporate,free corporate
-a винаги слагайте тази опция когато добавяте потребител към нова група. Ако липсва -a потребителя ще бъде премахнат от групата. -G указва към коя група да е. Ако даден потребител е член на няколко групи то групите се разделят със ','. Да проверим.
nano /etc/group corporate:x:1001:corporate free:x:1003:kasier,corporate
Потребителите в SAMBA се различават от потребителите на системата, затова тяхната парола ще е различна. За начало да гнерираме пароли за потребителите на SAMBA, не на системата.
smbpasswd -a kasier smbpasswd -a kasier
Паролата която се генерира е криптирана и няма как да видите каква е. Веднага пример:
pdbedit -wL corporate:1001:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:1245613313FC990D9C22CA51C4441400:[U]:LCT-66697120: kasier:1003:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:F8A35FBA0CA81A68C71CF63061B6801D:[U]:LCT-6669712B:
Ако забравите паролата решението е да се създаде нова парола.
smbpasswd -a kasier
Така на практика създаваме нова парола за kasier.
Първо правим копие на конфигурационния файл на SAMBA.
cp /etc/samba/smb.conf /etc/samba/smb.conf.original
Да зачистим файла от излишните редове.
grep -v '^ *#\|^ *$' /etc/samba/smb.conf | sudo tee /etc/samba/smb.conf
nano /etc/samba/smb.conf ### Най-отдолу на файла [anonimus_share] comment = Directory anonimus path = /home/samba/anonimus_share public = yes writable = yes read only = no guest ok = yes create mask = 0775 directory mask = 0775 force create mode = 0775 force directory mode = 0775
[anonimus_share] - име на споделената папка. Така ще се вижда във Windows comment - коментар за споделения ресурс path - път до споделената папка в SAMBA public = yes - достъп за четене на удостоверените потребители и гости writable = yes - възможност за запис в мрежовия ресурс read only = no - право на четене - не = всички могат да създават файлове и папки guest ok = yes - достъп на гости без верификация create mask = 0775 - всички създадени или копирани файлове ще бъдат с маска 0775 directory mask = 0775 - всички създадени или копирани папки ще бъдат с маска 0775 force create mode = 0775 - принуждава SAMBA да създава файлове с маска 0775 force directory mode = 0775 - принуждава SAMBA да създава папки с маска 0775
Ако искате всеки потребител удостоверил се чрез име и парола да има достъп до даден ресурс то тогава:
nano /etc/samba/smb.conf ### Най-отдолу на файла [public] comment = acc_with_pass path = /home/samba/public public = no writable = yes read only = no guest ok = no create mask = 0775 directory mask = 0775 force create mode = 0775 force directory mode = 0775
Едно уточнение. Достъп до ресурса имат всички потребители влезли с име и парола. Независимо членове на коя група са. [public] - име на споделената папка. Така ще се вижда във Windows comment - коментар за споделения ресурс (потребители влезли с име и парола) path - път до споделената папка в SAMBA public = no - забрана за достъп на гости до папката writable = yes - възможност за запис в мрежовия ресурс read only = no - право на четене - не = всички могат да създават файлове и папки guest ok = no - забрана на гости да се закачат към ресурса create mask = 0775 - всички създадени или копирани файлове ще бъдат с маска 0775 directory mask = 0775 - всички създадени или копирани папки ще бъдат с маска 0775 force create mode = 0775 - принуждава SAMBA да създава файлове с маска 0775 force directory mode = 0775 - принуждава SAMBA да създава папки с маска 0775
nano /etc/samba/smb.conf ### Най-отдолу на файла [corporate] comment = corporate_user path = /home/samba/corporate public = no writable = no read only = yes guest ok = no valid users = vlan48, selectel, @corporate write list = selectel create mask = 0770 directory mask = 0770 force create mode = 0770 force directory mode = 0770 inherit owner = yes
Едно уточнение. Достъп до ресурса имат всички потребители влезли с име и парола. Независимо членове на коя група са. [corporate] - име на споделената папка. Така ще се вижда във Windows comment - коментар за споделения ресурс path - път до споделената папка в SAMBA public = no - забрана за достъп на гости до папката writable = no - забрана за запис в мрежовия ресурс read only = yes - право на четене - да = забрана за създаване на файлове и папки, само за четене guest ok = no - забрана на гости да се закачат към ресурса valid users = vlan48, selectel, @corporate - потребители и групи имащи достъп до директорията. vlan48 и selectel са потребители, а @corporate е група write list = selectel - само потребителя selectel има право да пише в папката create mask = 0775 - всички създадени или копирани файлове ще бъдат с маска 0775 directory mask = 0775 - всички създадени или копирани папки ще бъдат с маска 0775 force create mode = 0775 - принуждава SAMBA да създава файлове с маска 0775 force directory mode = 0775 - принуждава SAMBA да създава папки с маска 0775 inherit owner = yes - директива включваща наследяване на собственика по време на създаване на директории и файлове.
Не е добра практика изтритите файлове да се губят, защото се правят грешки при триене. По добрата практика е да се прехвърлят в папка наречена "Кошче". За начало да създадем папката "Кошче"
mkdir /var/recycle chmod 777 /var/recycle
Да конфигурираме и SAMBA.
nano /etc/samba/smb.conf ### Най-отдолу слагаме: [Recycle] comment = rec_dir path = /var/recycle public = yes browseable = yes writable = yes vfs objects = recycle recycle:repository = .recycle/%U recycle:keeptree = Yes recycle:touch = Yes recycle:versions = Yes recycle:maxsize = 0 recycle:exclude = *.tmp, ~$* recycle:exclude_dir = /tmp
[Recycle] - име на ресурса показващ се при клиента comment = rec_dir - коментар за споделения ресурс path = /var/recycle - папка в която се помества кошчето public = yes - достъп за четене на удостоверени потребители и гости browseable = yes - позволява споделения ресурс да се вижда в мрежата writable = yes - позволява да се пише по мрежата vfs objects = recycle - използване на подсистема recycle recycle:repository = .recycle/%U - място за съхраняване на изтрития обект recycle:keeptree = Yes - изтриване със съхранение на дървото на папки recycle:touch = Yes - recycle:versions = Yes - recycle:maxsize = 0 - recycle:exclude = *.tmp, ~$* - recycle:exclude_dir = /tmp -
Съединяването на Linux потребители към SAMBA ресурси става чрез sifs. За начало трябва да се инсталира.
apt install cifs-utils -y
mount.cifs {ресурс} {път към папката, която ще се монтира} {-o опции}
Пример:
mount.cifs //10.8.0.1/anonimus_share /mnt
Автоматичното монтиране се прави във файла /etc/fstab. За начало обаче да създадем файл съдържащ потребителите които ще се оторизират при свързването със SAMBA. Сега да монтираме ресурса на удостоверен потребител и група.
nano /root/.smbselus username=selectel password=uspass
И сега да редактираме /etc/fstab
nano /etc/fstab ### Най-отдолу //10.8.0.1/corporate /mnt cifs user,rw,credentials=/root/.smbselus 0 0
//10.8.0.1/corporate - ресурс който е споделен в SAMBA /mnt - папка в която трябва да се монтира споделения ресурс cifs user - разрешава да монтира всеки потребител rw - предоставя права за четене и запис credentials=/root/.smbselus - файл с данни за потребители и пароли 0 - използва dump (0=изключен) 0 - използва fsck (0=изключен) В някои случаи се налага добавяне на директива domain във файла .smbselus.
За да поддържа по-стари версии на SAMBA конфигурационния файл трябва да се промени.
nano /etc/samba/smb.conf [Global] workgroup = WORKGROUP server min protocol = NT1 client min protocol = NT1 client lanman auth = yes ntlm auth = yes