Создаем структуру личных документов пользователей на предприятии в Samba

Небольшая прелюдия


Приветствую хабрасообщество.

В жизни любой средней и крупной компании рано или поздно наступает момент, когда без сетевого хранилища данных жить уже просто не прилично. Необходимо создать определенную структуру папок для внутриотдельного, межотдельного и прочих взаимодействий, но об этом в следующий раз. А сейчас мне бы хотелось показать вам быстрый способ создания «личных папок» для пользователей фирмы/предприятия/учреждения/etc (нужное подчеркнуть).

Вступление


Итак к сути происходящего. Исходим мы из того, что у нас имеется домен с авторизацией в любой LDAP-совместимой службе каталогов (далее СК). И желание с возможностью создать файловый сервер на основе Linux+Samba (можно на той же машине что и СК). Зачем каждому выделять личную папку? В основном для хранения данных на сервере так, что бы ни кто не имел к ним доступ. Почему каждому своя папка, а не 1 каталог с разграничением прав? Да действительно существует и такой способ, для меня как админа, они примерно равны по геморойностисложности реализации, но для юзеров однозначно выбранный подход удобнее.

Рассказывать о настройке непосредственно samba с авторизацией в ADСК я здесь не буду, об этом и так куча статей в рунете и не только, остановимся лишь на паре значимых для нас параметров. В основном речь пойдет о shell скрипте, который и упростит все наши задачи до невозможности.

В путь


Для начала необходимо создать сами папки. Нет вручную мы это делать не будем… Все что нам потребуется это создать текстовые файлики со следующей логикой: называем файл otdelK.txt и помещаем в него несколько строк, IvanovI PetrovV. Как будет разбирать это дело скрипт? Очень просто — название файла будет принято за наименование отдела/подразделение, а строки как имена сотрудников из СК. Составление .txt файлов вручную или как либо автоматически оставлю на ваше усмотрение.
Сама логика создания папок:

CreateFolders() {
		mkdir "$PP"
		for filename in `ls -l $catname/*.txt | awk '{print $NF}'`; do
			group=`basename "$filename" .txt`
			mkdir "$PP/$group"
			for user in `cat "$filename"`; do
				mkdir "$PP/$group/$user"
				CreateShare "$group" "$user"
				PermissionsAssignment "$group" "$user"
			done
		done
	}


Вот собственно не хитрый способ создания структуры каталогов (разумеется в полном варианте там куча всевозможных проверок). Просматривается каталог $catname на наличие в нём txt файлов и далее они разбираются. Переменная $PP содержит путь до папки где все и будет создаваться.
После создания каждой личной папки вы можете заметить вызов еще 2х функций с «говорящими именами». Рассмотрим их содержание:

CreateShare() {
		username="$2"
		ou="$1"

		grep -wi '\['$username'\]' "$SC" > /dev/null
		if [ "$?" -ne 0 ]; then
			echo -e "[$username]
			path = \"$PP/$ou/$username\"

			valid users = \"@$DN\\$AG\",\"$DN\\$username\"
			admin users = \"@$DN\\$AG\"

			browseable = No
			comment = \"Private Documents %U\"
			public = No
			writeable = Yes
			read only = No

			create mask = 0700
			directory mask = 0700

			inherit permissions = Yes
			inherit acls = Yes
			inherit owner = Yes

			vfs objects = recycle

			recycle:repository = .Trash
			recycle:versions = Yes
			recycle:keeptree = Yes
			recycle:exclude = *.TMP *.tmp ~*
			" >> "$SC"
			echo "Folder for user $username is shared" | tee -a "$log"
		else
			echo "INFO: Sharing for user $username already exist" | tee -a "$log"
			warn=true
		fi
	}


Данная функция вызывает с двумя аргументами: отдел и имя пользователя. Проверяет не существует ли уже для него шара и если нет то создает её. Значения каждого параметра вы можете посмотреть как в официальных man страницах так и на русском. Скажу лишь, что все правила направлены на то, что бы у пользователя был полный доступ к папке, но он не мог менять в ней какие-либо разрешения. Так же вы можете заметить, что пользователю выделяется корзина, т.е. всё что он удалит из своей сетевой папки будет помещено в его сетевую корзину (доступ к корзинам у меня в сети есть только у меня). Все эти папки подключаются пользователям у меня через vbs скрипт при входе в систему.
Тут вот и надо бы вспомнить парочку строк из smb.conf

store dos attributes = Yes
	 map acl inherit = Yes
	 acl group control = No
	 dos filemode = No

	 # POSIX 'rwx' отображается в виндовый rwx, а не full control
	 acl map full control = No  <--- вот весьма важный параметр, который нам и помог.


Далее необходимо назначить права в самой системе для созданного каталога.

PermissionsAssignment() {
	   path="$PP/$1/$2/"
	   chown "$AU":"$AG" -R "$path"
	   chmod 0770 -R "$path"
	   chmod g+s -R "$path"
	   setfacl -bR "$path"
	   setfacl -R -m m::rwx "$path"
	   setfacl -nR -m u:"$2":rwx "$path"
	}


Тут сразу становится понятно, что необходим пакет xfsprogs в состав которого входят утилиты setfacl и getfacl для управления расширенными атрибутами в Linux. Вся эта канительполезность создана для всё той же цели — лешить пользователя возможности изменять права. Хотя, действительно, в случае «личных документов» это не критично и мб даже лишнее, но при организации общих сетевых ресурсов без этого нельзя.

Заключение


Данная статья рассчитана на средний уровень знаний и не призвана сделать из новичка гуру.
В скрипте не предусмотрено многоуровневая иерархия отделов (будет дописана по индивидуальным заявкам). Я постарался максимально напичкать скрипт «защитой от дурака», и делал это даже в момент писания этой статьи, но я не могу предусмотреть всё. Скрипт внутри содержит несколько параметров которые следует исправить под себя, их не трудно найти ;-). Так же их можно передать и в виде аргументов скрипту, с одним не большим ограничением — я не знаю как заставитьнаучить getopts принимать аргументы с пробелами, поэтому если ваши пути или имена групп содержат пробелы, пожалуйста указывайте их внутри скрипта.
Полный текст скрипта и smb.conf прилагается: скрипт, smb.conf.

P.S. smb.conf достаточно хорошо откоменчен. Сам скрипт получился достаточно громоздким из-за всевозможных проверок и «а если». Так же он не претендует на законченное универсальное решение ибо писался под узкую задачу и потом был немного унифицирован.
AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Реклама

Комментарии 56

    0
    Возможно можно указать параметр в кавычках, если в нем имеется пробел?
      0
      все элементарные способы были проверены… в том числе и попытка экранирования, если будут более изощренные мысли, то рад буду услышать и исправить косяк.
      +4
      А почему была выбрана самба? Почему не виндовый сервер, не готовая железка с Windows Storage Server или какой-нить NetApp?
      • НЛО прилетело и опубликовало эту надпись здесь
          +1
          Ага, крупная организация должна использовать чудовищный Лотус Домино и его друзей? Хотя, может вышло что-то гениальное, удобное и стабильное под никс системы для решения этой задачи.
          И чего вы так боитесь самбы? Консоль испугала? С Самбой можно таких связок под управлением крона понаделать что любой Лотус в сторонке курить будет.
            +1
            Ну как минимум Runa WFE и Alfresco.
            Работают хоть под Windows, хоть под Linux, хоть под Mac OSX. GPL. Поддержка продается.
              0
              У Руны ужасный отклик в вебморде, а альферско надо будет глянуть. Спасибо.
            +2
            Вообще причем тут документооборот и эта статья? В следующей поговорим, если я на скребу материала на неё. Какой еще обмен документами, когда описывается процесс создания "личных документов"?

            Следующая задача которая будет решаться это создание структуры каталогов для внутриотдельного и межотдельного взаимодействия. И то это не совсем для документооборота в том смысле в котором его привыкли понимать документоведы.
            Когда создам и проверю, если материала на скребется о чем писать, то опишу процесс.
            0
            Потому что пользователю ближе не system32 а /bin
              +1
              да хотя бы потому, что мне удобен в конфигурировании и обслуживании Linux.

              А вообще реально это произошло по другому: был куплен файловый сервер NetGear, плох он или хорош это уже другой вопрос, и живёт он на запилином до невозможности Debian Etch. Настраивать сие чудо через ихней frontview меня совсем не греет, поэтому был получен ssh доступ со всеми вытекающими… Думаю теперь выбор обоснован не только расовой верностью, но техническими рамками.
                0
                Вместо этого можно было бы взять самый простой виндовый сервер, и поставить W2008R2. Файловые службы там очень неплохие, особенно рулит SMB 2.0, который, ЕМНИП, самбисты так и ниасилили, несмотря на открытость протокола.
                  0
                  Samba 3.5.0 — SMB2 experimental
                  так что не надо ляля про «ниасилил»
                +1
                Если на то пошло, почему не Sharepoint? Идеальная система для хранения корпоративных данных. Осилить сможет даже обезьяна :)
                  +2
                  Что на это скажет System32 я хз, но моё мнение, ситуация и позиция прекрасно изложены сообщением выше.
                  К тому же я не доверяю, и не жажду использовать продукцию M$.
                +1
                Не понимаю профита по сравнению с ресурсом HOMES?
                  0
                  Если не ошибаюсь HOMES не даст возможности делить на отделы. К тому же так можно персонально менять кому-либо настройки на его папку, что не даст делать единственный блок с HOMES.
                  +2
                  интересная жизнь у людей
                  общие папки настраивать…
                  романтика 90-х
                    +3
                    Если не сложно, расскажите как в 10-х делают. Или где можно прочитатью
                      0
                        +2
                        А кросс платформенный аналог ??
                        Протсо SharePoint возможно и бесплатен, но для запуска ему нужен платный Windows.
                          –3
                          очень странно, что фирмы, чья политика — не использовать платный софт при этом не оказывают сами бесплатных услуг…
                          или ваша оказывает? скажите адрес, мне наверняка надо.
                            +2
                            Такое вполне возможно.
                            Использование Windows на компьютерах конечных пользователей вполне оправдано, благо существует оем поставка Windows.
                            Но вот в серверном сегменте я сторонник *nix. От бесплатного линукса для малого и среднего бизнеса, до платного unix для критических систем. А зачем платить большие деньги и получать меньшую отказоустойчивость системы ??
                            К тому же у МС до сих пор был один козырь — это Active Directory, после релиза Samba 4 и это изменится.
                              +1
                              у вас немного каша в голове…
                              категории платное\бесплатное не имеют никакого отношения к типу ОС.
                              есть куча бесплатного софта под windows, есть такие ценники на UNIX, по сравнению с которыми ценник от MS можно считать подарком.

                              общий принцип ПО в бизнесе такой — инструмент должен максимально окупаться, а не такой — ни копейки Балмеру, грудью на дзот лягу
                                0
                                нет каши. Возможно написал немного сумбурно, отвлекался.
                                Я хотел разделить Клиентские места пользователей, где господствует Windows и в общем то правильно делает — очень удобная и дружелюбная ОС.

                                И северное оборудование где я безусловно предпочту бесплатный линукс, для сервисов со средними требованиями к отказоустойчивости.
                                Платный и дорогой UNIX для критических сервисов — его предлагаю даже не обсуждать, так как он применяется в тех областях где Windows просто не место.

                                И вопрос тут не в плате денег Балмеру, а в том, что можно не платя денег получить более отказоустойчивую и масштабируемую архитектуру для ваших сервисов.
                                  0
                                  каша всё-таки есть
                                  проделайте мысленное упражнение — представьте на минуту, что вы ничего не смыслите в IT, зато являетесь директором среднестатистического предприятия (размер и сферу придумайте сами).

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

                                  и ваше «безусловно предпочту» очень быстро превратится в «не имеет ни малейшего значения»
                                0
                                У МС много козырей. Например Small Business Edition — www.microsoft.com/rus/windows-server/essential/sbs/editions.mspx

                                За сравнительно небольшие деньги получаете возможность поднять AD, Exchange, Shareoint.
                                  +1
                                  Хм.
                                  Цена самого решения может быть не такой уж высокой, но кажется придется отдельно покупать лицензии для каждого пользователя AD?? не так ли ??
                                    0
                                    Придется покупать CAL на устройство или на пользователя, это вы верно заметили. В стоимость войдет 5 CAL, пакет из 20 CAL будет стоить примерно 1500 у.е.,

                                    Т.е. фактически за менее чем 3 000 у.е. можно купить решение с лицензиями на два сервера, плюс 25 клиентских лицензий.
                                    0
                                    >>За сравнительно небольшие деньги получаете возможность поднять AD, Exchange, Shareoint.

                                    Ах этот милый оутлук… В связке с Exchange конечно очень неплохо работает + к нему BCM можно купить, хороший продукт.

                                    Да вот только компик тоже придется обновить, мой рабочий ноутбук (на селероне 1.6 Ггц) напрягает всё что в нем шевелится, и не шевелится, при открытии оутлука 2010 или при переключении между почтой и контактами например.

                                    +1
                                    Вы до сих пор надеетесь на Samba4? :-)

                                    Это очень плохо разрабатываемый проект с катастрофической недостачей разработчиков. Например, SMB2 появился в 2006 году. В Samba его нет до сих пор, но обещают в конце этого года в экспериментальном режиме! Пять лет не хватило на добавление этой важной фишки.
                                  0
                                  technet.microsoft.com/en-us/library/cc288751.aspx
                                  Windows Server 2008R2 Web OEM стоит 12 001.54 руб.

                                  Дорого?
                                    –1
                                    RedHat Linux стоит 0 рублей. Дешевле? :)
                                    И еще раз: вопрос скорее в надежности и масштабируемости.
                                      +1
                                      RedHat Linux стоит сравнительно с Windows Web Server — www.redhat.com/wapps/store/catalog.html;jsessionid=5mZaPrzH7X+FCQ5ad2LDFA**.87c55fb5

                                      По поводу надежности — не встречал заметных проблем с Windows последние несколько лет. 2008 ветка очень надежна. Так что это скорее уже айтишный миф.

                                      По поводу маштабируемости, вы о чем? ;-)
                                        0
                                        Под маштабируемостью подразумевалась кластеризация, например.
                                          0
                                          Кластеризация нужна для очень крупных компаний. Там и варианты другие, вместе с прайсом.
                                            +3
                                            Практически любой линукс предоставит эту возможность из коробки. И бесплатно.
                                              0
                                              Будем считать это конкурентным преимуществом ;-)
                                        0
                                        Извините, не сравнительно, а гораздо дороже, если учитывать, что за RH надо платить каждый год.

                                          +2
                                          Это тех поддержка. За сам RedHat ничего платить не нужно.

                                            +1
                                            Это доступ к апдейтам, т.е. к RedHat Network. Вы хотите поставить linux сервер и не накатывать апдейты? Это чревато.
                                              +1
                                              Нет это именно тех поддержка и Hot paching.
                                              Плюс большие Media Pack'и можно с критическими обновлениеми можно покупать отдельно — цена от 20 у.е. до 100 у.е.

                                              Предполагаю, что тех поддержка Windows тоже чего-то стоит…

                                              Если совсем не хочется платить Debian ;)
                                                0
                                                Вы сильно ошибаетесь. Стоимость включает в себя "… годовую подписку с возможностью продления для следующих услуг: доступ к Red Hat Network для одной зарегистрированной системы..."

                                                Т.е. не заплатив компании RedHat вы не получите доступа к апдейтам, т.е. к RedHat Network.
                                                  0
                                                  Вы не правы я буквально пару месяцев назад готовил сразнение цен на RedHat и Oracle Linux: цены
                                                    0
                                                    Это цены на годовую поддержку, в стоимость которой входит доступ к RHN, т.е. к апдейтам. Нет доступа к RHN — нет апдейтов. Все просто.
                                                      0
                                                      "… Как упоминалось ранее, по условиям соглашения об использовании Red Hat Enterprise Linux, подписка требуется для каждой системы, на которую установлен Red Hat Enterprise Linux. Подписка включает в себя все, поддержку и обновления (через Red Hat Network), обновление версий, неограниченное количество обращений в поддержку..."

                                                      Вы наверное что-то неправильно поняли.
                                                      0
                                                      Мы выбрали Premium Support и дистрибутив от Oracle, так как задача сервера БД Oracle.
                                                  0
                                                  Где раздают бесплатный RHEL?
                                          +1
                                          От себя бы порекомендовал alfresco
                                            +1
                                            да запросто! лучше всего, как обычно, начать с википедии, если уровень знаний нулевой, а там по ссылочкам, по ссылочкам…
                                            итак, ищем:
                                            CRM, ERP, ECM, Workflow
                                            а списки конкретных продуктов можно глянуть в разделах типа
                                            en.wikipedia.org/wiki/Category:Content_management_systems
                                            en.wikipedia.org/wiki/Category:Document_management_systems
                                            en.wikipedia.org/wiki/Category:Portal_software

                                            ну и т.д.

                                            или пусть ваш директор позвонит мне, расскажет подробности о своём бизнесе, а я ему более конктретно расскажу, как именно схожие задачи решают в 21-м веке
                                            0
                                            Так вроде в самом начале поста написано, что создаются «личные папки» :)

                                            Для этого порталы как раз таки не нужны. Личная папка, например, подключенная в ОС как отдельный сетевой диск, вполне подойдет.
                                              0
                                              личные папки советую создавать так:
                                              logon.bat:
                                              if not exist \\server\share\%USERNAME% md \\server\share\%USERNAME%
                                              net use U: \\server\share

                                              а тут речь шла всё-таки о какой-никакой оргструктуре
                                                0
                                                примерно так они подключаются… ну разве что я использую vbs…
                                                направленность использования «личных папок» достаточно узкая, в основном это для организаций у которых нету фиксированного места для пользователя, например. Да взять тех же студентов, в аудитории места не фиксированы и аудиторий много, а так документы всегда на сетевом диске.
                                            0
                                            А почему отдел (OU) не из LDAP берётся?
                                              0
                                              Это относительно… я например эти txt файл генерю на win сервере из AD.

                                              А если честно, то я не нашел способ получить группу или OU пользователя через wbinfo… Готов внести изменения и протестить, если что предложите.
                                                –1
                                                never more. Я как раз в своём развитии как виндовый админ остановился где-то в этом районе (автогенерация virtual для postfix из AD), но так как с виндами я расстаюсь, то глубже я копать туда точно не буду.

                                                Рядом есть куда более интересный линукс.

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

                                            Самое читаемое