Задача:
Организовать совместную работу ЛВС между Ubuntu/Windows машинами посредством файл-сервера на Ubuntu 10.10.
Клиентские машины должны иметь полный доступ к общему ресурсу для обмена файлами, свою личную папку на сервере с невозможностью зайти в другие личные папки и аутентифицироваться на сервере через локальные учётные записи.
- Сервер(//server):1. Общий ресурс для обмена файлами (//server/pub)
2. Личная папка пользователя для хранения документов (//server/profile/%имя_пользователя%)
3. Доступ к папке //server/profile/ для пользователя director с возможностью просмотра личных папок пользователей.
4. Пользователи, заведённые на сервере, входят в группу workers
- Клиент(//client):1. Подключенный общий ресурс (//server/pub)
2. Подключенная папка пользователя для хранения документов (//server/profile/%имя_пользователя%)
Upd. Выкладываю готовый вариант скрипта, позволяющий реализовать за 5 минут поставленную задачу:
#!/bin/bash
### Samba Installation and tunning
aptitude install samba openssh-server mc
mkdir -p /org/shares/{public,profiles}
groupadd workers
### Create users
#Здесь создаются пользователи на сервере, логин/пароль/группа которых берутся из файла "/home/pp/users.login".
#Оболочка на сервере под текущие задачи им не нужна, поэтому - "/sbin/nologin"
NEW_USERS="/home/pp/users.login"
HOME_BASE="/sbin/nologin"
cat $NEW_USERS | \
while read USER PASSWORD GROUP
do
useradd -M -G $GROUP -p $PASSWORD -s $HOME_BASE $USER && echo -e $PASSWORD"\n"$PASSWORD| smbpasswd -as $USER
done
chown director /org/shares
### Create user shares
cat $NEW_USERS | \
while read USER
do
mkdir -p /org/shares/profiles/$USER
chown $USER /org/shares/profiles/$USER
done
chgrp -R workers /org/shares
chmod -R ug+rwx,o-r+x /org/shares
cp /etc/samba/smb.conf{,.bb}
### Inserting configuration in smb.conf file
grep "director" /etc/samba/smb.conf && echo "smb.conf file is created." || echo \
"
[global]
log file = /var/log/samba/log.%m
workgroup = earth
netbios name = server
server string = exchange
security = user
max log size = 50
kernel change notify = yes
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
[profile]
comment = Myfiles
# Если настраиваете Samba на Debian, то вместо %U пишите %u
path = /org/shares/profiles/%U
read only = No
[allprofiles]
browseable = No
comment = Director
path = /org/shares/profiles/
valid users = director
read only = No
[pub]
browseable = Yes
comment = public
path = /org/shares/public/
create mask = 0777
directory mask = 0777
force user = director
force group = workers
read only = No
guest ok = Yes
" > /etc/samba/smb.conf
testparm -a
service smbd restart
ps ax|grep smbd
#Ускорение операции копирования с/на samba-ресурсы
#за счёт увеличения сетевого буфера. Активируется после рестарта системы.
echo "options cifs CIFSMaxBufSize=130048" > /etc/modprobe.d/samba-speed-up.conf
Скрипт опробован на двух компаниях и он работает.
Я ГАРАНТИРУЮ ЭТО!По поводу файла с логинами/паролями/группами
/home/pp/users.login. Его пример:
director pass1 workers
user01 pass232 workers
buhgalter buhpass workers
По поводу подключения клиентов(Lin/Win) к серверу - смотрите в конце второго спойлера.
Первоначальный вариант вида copy/paste:
Все действия выполняются от суперпользователя.
Сначала установите необходимые для работы пакеты:
aptitude install samba openssh-server mc
Затем, создадим структуру необходимых директорий:
mkdir -p /shares/{public,profiles}
Создастся структура каталогов:
/shares/public/
/shares/profiles/
Примечание: для работы использовался командный интерпретатор /bin/bash. Если Вы работаете через /bin/sh, то создастся один каталог с именем:
/shares/{public,profiles}
Создаём группу, в которую войдут все созданные Samba-пользователи:
groupadd workers
Далее, создаём unix-пользователей, добавляем их в группу workers, убираем им оболочку на сервере(нефиг им там делать),присваиваем им же unix-пароли, а затем - samba-пароли:
for i in director user2 user3 user_n
do
echo "Enter password for [ $i ]:"
useradd -M -G workers -s /sbin/nologin/ $i && passwd $i && smbpasswd -a $i
done
Примечание №1: В данном примере цикл прогоняет команду четыре раза(по количеству записей - director, user2,3,_n).
Примечание №2: Созданные имена пользователей и samba-пароли как раз и используются для аутентификации клиентов на сервере для доступа к общим ресурсам.
Делаем владельцем каталога /shares пользователя director:
chown director /shares
Запускаем цикл для создания личных каталогов пользователей и делаем их владельцами своих директорий:
for i in director user2 user3 user_n
do
mkdir -p /shares/profiles/$i
chown $i /shares/profiles/$i
done
Присваиваем группу workers всем созданным каталогам и меняем разрешения для них же:
chgrp -R workers /shares
chmod -R ug+rwx,o-r+x /shares
С настройкой директорий закончено и теперь можем переходить к настройке Samba, чтобы клиенты могли начать использовать файловые ресурсы сервера.
Сделаем копию основного настроечного файла /etc/samba/smb.conf:
cp /etc/samba/smb.conf{,.bb}
Очистим оригинал smb.conf от записей:
:>/etc/samba/smb.conf
И вставляем этот текст в /etc/samba/smb.conf:
-------------------------------------------------------------------
[global]
log file = /var/log/samba/log.%m
workgroup = smalloffice
netbios name = server
server string = exchange
security = user
max log size = 50
kernel change notify = yes
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
[profile]
comment = Myfiles
path = /shares/profiles/%U
read only = No
[allprofiles]
browseable = No
comment = Director
path = /shares/profiles/
valid users = director
read only = No
[pub]
browseable = Yes
comment = public
path = /shares/public/
create mask = 0777
directory mask = 0777
force user = director
force group = workers
read only = No
guest ok = Yes
-------------------------------------------------------------------
В завершении настройки необходимо проверить настройки Samba:
testparm -a
Если проверка конфигурации Samba проходит без ошибок - перезапускаем сервер:
service smbd restart
И проверяем, что Samba запустилась:
ps ax|grep smbd
1745 ? Ss 0:00 smbd -F
1748 ? S 0:00 smbd -F
1760 pts/1 S+ 0:00 grep --color=auto smbd
С настройкой сервера закончили. Переходим к клиентам.
С Windows клиентами всё просто:
В адресной строке проводника набирайте \\server
Примечание: если Вы хотите перелогиниться на \\server под другим пользователем, наберите команду:
net use \\server /delete
Она удалит созданную сессию для захода на samba-сервер.
С Ubuntu-клиентами ещё проще:
Ставим необходимые для работы пакеты:
aptitude install samba openssh-server mc cifs-utils mousepad
Вносим в файл /etc/hosts строку:
echo "192.168.0.1 server" >> /etc/hosts
На одном из клиентов создаём любого пользователя(например - director) с любым паролем, затем создаём директории, куда будет производится монтирование общего/личного ресурса:
mkdir -p /mnt/{profiles,public}
echo -e "username=director\npasswords=123abc" > /root/shares_pwd && chmod 0700 /root/shares_pwd
Проверяем наличие созданных директорий:
ls -la /mnt
/mnt/profiles/
/mnt/public/
Добавляем строки в файл /etc/fstab для автоматического монтирования общего/личного ресурса:
echo -e "//server/pub /mnt/public cifs credentials=/root/shares_pwd,rw,user,iocharset=utf8,file_mode=0777,dir_mode=0777,nounix,noperm 0 0" >> /etc/fstab
echo -e "//server/profile /mnt/profiles cifs credentials=/root/shares_pwd,rw,user,iocharset=utf8,file_mode=0777,dir_mode=0777,nounix,noperm 0 0" >> /etc/fstab
Примечание: в текущем примере используется пользователь director. Для него в /etc/fstab добавляется ещё одна строчка для монтирования ресурса //server/allprofiles. С помощью него осуществляется просмотр всех личных директорий пользователей. Предварительно создаётся директория /mnt/allprofiles:
mkdir -p /mnt/allprofiles
Добавляем строку /etc/fstab:
echo -e "//server/allprofiles /mnt/allprofiles cifs credentials=/root/shares_pwd,rw,user,iocharset=utf8,file_mode=0777,dir_mode=0777,nounix,noperm 0 0" >> /etc/fstab
Сохраняем и исполняем следующую команду для монтирования сетевых ресурсов без перезагрузки:
mount -a
Теперь можете заглянуть на клиенте в:
/mnt/profiles/
/mnt/public/
И спокойно записывать/читать/удалять свои/общие файлы.
Особенность работы с общими ресурсами:
При создании файла/каталога на общем/личном ресурсе в Windows - оные сразу не появляются. Для решения этой проблемы создайте и запустите reg-файл следующего содержания:
-----------------------------------------------------------------------
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Update]
"UpdateMode"=dword:00000000
-----------------------------------------------------------------------
После перезагрузки Winows проблема решится:
Теперь вопросы:
Эта конфигурация ожидает внедрения в ближайшую неделю. Кто настраивал подобную конфигурацию и на какие грабли наступал, оптимальна ли конфигурация /etc/samba/smb.conf с точки зрения производительности, в общем интересуют практичные советы.
upd: При монтировании в Windows(юзер director) скрытого ресурса \\server\allprofiles - всё в порядке. При монтировании в Ubuntu(также юзер director) через /etc/fstab и последующей команды "mount -a", выдаёт ошибку:
sudo mount -a
Couldn't chdir to /mnt/allprofiles: No such file or directory
Хотя:
ls -la /mnt/
итого 12
drwxr-xr-x 5 root root 4096 2011-01-24 13:15 .
drwxr-xr-x 22 root root 4096 2011-01-24 03:13 ..
drwxr-xr-x 2 root root 4096 2011-01-24 13:06 allprofiles
drwxrwxrwx 1 root root 0 2011-01-24 13:53 profiles
drwxrwxrwx 1 root root 0 2011-01-24 13:31 public
profiles и public - монтируются:
ls -la /mnt/profiles/
итого 12
drwxrwxrwx 1 root root 0 2011-01-24 13:53 .
drwxr-xr-x 5 root root 4096 2011-01-24 13:15 ..
-rw-rw-rw- 0 root root 16 2011-01-24 13:54 новый файл.txt
-rw-rw-rw- 0 root root 7 2011-01-24 13:59 Текстовый документ.txt
mount|grep //server
//server/pub/ on /mnt/public type cifs (rw,mand,noexec,nosuid,nodev)
//server/profile/ on /mnt/profiles type cifs (rw,mand,noexec,nosuid,nodev)
Если монтировать командой mount, тогда монтируется:
mount -t cifs //server/allprofiles /mnt/allprofiles -o username=director,passwords=123abc
Почему??
Upd. Последняя проблема с невозможностью смонтировать общую шару - нерешена.