Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #72, ДЕКАБРЬ 2004 г.

В ритме самбы

Anton Karpov

Хакер, номер #072, стр. 072-100-3


# echo -e "net use H: \\\\servername\\$USER \n net use G: \\\servername\\public" > /usr/local/samba/netlogon/logon.bat

Т.е. заставить каждый раз при логоне пользователя в домен выполнять нужные нам операции монтирования. Но мы пойдем другим путем, а именно в секцию [netlogon] пропишем следующее:

root preexec = /usr/local/samba/bin/make_logon_script '%m' '%U' '%a' '%g' '%L'

Make_logon_script - shell-скрипт, который создает на лету специфичный для каждого пользователя исполняемый сценарий имя_юзера.cmd. В нашем случае он будет делать то же самое - монтировать диск пользователя и публичный диск, но подумай, какие возможности открывает директива preexec, с учетом того, что в нее можно запихнуть любую команду. А если вспомнить, что есть и postexec, то в голову сразу же приходит метод «на коленке» для раздачи инета только тем юзерам, которые вошли в домен, - для этого скрипт должен, например, добавлять/удалять правило файрвола для пропуска в сеть машины клиента. Наш logon script выглядит так:

# vi /usr/local/samba/bin/make_logon_script

#!/bin/sh

umask 022

SAMBA_DIR=/usr/local/samba

exec 2> > "$SAMBA_DIR/var/logon_script.err"

write () { echo "$@"; echo '\r'; }

CLIENT_MACHINE="$1"

USER="$2"

SYSTEM_TYPE="$3"

GROUP="$4"

SERVER_NAME="$5"

SUFFIX=cmd

SCRIPT="$SAMBA_DIR/netlogon/$USER.$SUFFIX"

exec 1> "$SCRIPT"

chmod o+x "$SCRIPT"

write "@ECHO off"

write "ECHO."

write "ECHO Type : $SYSTEM_TYPE."

write "ECHO."

write "ECHO Computer : $CLIENT_MACHINE - User : $USER - Group : $GROUP."

write "ECHO."

write "NET USE P: \\\\\\\\$SERVER_NAME\\\\public"

write "NET USE Q: \\\\\\\\$SERVER_NAME\\\\$USER"

Директива root preexec в [netlogon] указывает скрипту выполняться с нужными параметрами и генерировать сценарий подключения дисков, который эти диски затем и монтирует.

Пользователи на автопилоте

Осталось добавить пользователей. Согласно документации, надо добавить samba-пользователя с помощью команды smbpasswd. Вся информация о нем запишется в /usr/local/samba/private/smbpasswd, причем права к этому файлу должны быть проставлены самым строгим образом (600) - самба следит за этим. Но этого мало - для начала пользователь должен присутствовать в системе, т.е. информация о нем должна быть в /etc/passwd и /etc/master.passwd. Разработчики обещают позже убрать это требование, но пока - селяви. Разумеется, вместо системных аккаунтов можно прикрутить к самбе LDAP и засунуть пользователей туда, но это уже совсем другая история.

В случае же системного пользователя, чтобы ограничить его доступ на сервер только самбой, которая все равно берет пароли из своего файла, юзеру нужно назначить невалидный шелл (/sbin/nologin). Учти, что этот шелл никогда не должен присутствовать в /etc/shells! С учетом того, что самба не использует пароли в /etc/master.passwd, учетную запись пользователя можно залочить (pw lock username).

Назад на стр. 072-100-2  Содержание  Вперед на стр. 072-100-4