Novell Client for Linux и скрипт для автологина для демонов

Обсуждение технических вопросов по продуктам Novell под Linux, а также *nix систем

Novell Client for Linux и скрипт для автологина для демонов

Сообщение Константин Ошмян » 02 сен 2010, 19:58

Разбирался тут немного с новелловским клиентом для Линукса. Впечатления - довольно положительные, хотя по возможностям до виндового клиента ещё явно не дотягивает (в частности - далеко не все конструкции из логин-скриптов обрабатываются корректно). Очень порадовало то, что он умеет делать автореконнект (чего ncpmount делать не умел) - для нас это актуально, поскольку используется кластер NetWare, на котором ресурсы-тома иногда переезжают на другую ноду.

В процессе разбирательства у меня родился init-скрипт, позволяющий при (пере)загрузке машины автоматом "логинить" в дерево eDirectory какого-либо линуксового пользователя (в частности - root) с отрабатыванием новелловского логин-скрипта и, как результат, отмапливанием дисков (по желанию). Нужно в том случае, когда от имени этого Linux-пользователя далее запускается какой-либо демон, которому нужны сетевые ресурсы, доступные по NCP.
Вопрос: интересует ли это кого-либо ещё? Если да - то могу выложить, чтобы не приходилось изобретать велосипед.
Аватара пользователя
Константин Ошмян
 
Сообщения: 972
Зарегистрирован: 13 авг 2002, 21:36
Откуда: Рига

Re: Novell Client for Linux и скрипт для автологина для демо

Сообщение Бурылов Александр » 02 сен 2010, 22:07

Я думаю, что интересно будет... :)
А потом наверное даже по результатам, модернаторы могут передвинуть в раздел "Грабли"
Аватара пользователя
Бурылов Александр
 
Сообщения: 302
Зарегистрирован: 13 окт 2003, 09:05
Откуда: Пермь

Re: Novell Client for Linux и скрипт для автологина для демо

Сообщение Константин Ошмян » 03 сен 2010, 13:21

Ну тогда публикую с некоторыми комментариями.
Имя для этой службы я слямзил у пакета ncpmount (которым пользовался раньше, но который ныне устарел и в состав основного дистрибутива SLE-11 уже не входит; хотя его можно найти на диске SDK для SLE-11). Соответственно, у стартап-скриптов для тех служб-демонов, которые от него зависят (и должны запускаться позже), в блоке заголовков в строке "Required-Start:" должна быть ссылка на ncpmount.
Переменные NW* относятся к пользователю eDirectory, которым делается подключение.
В переменной LXUser задаётся имя Linux-пользователя, от которого делается логин. По умолчанию (в свойствах клиента можно настроить иначе) именно в его домашней директории "мапятся диски" при работе новелловского логин-скрипта - т.е. создаются соответствующие символические ссылки. Команда su запускает логин от этого пользователся и нужна даже для пользователя root, т.к. корректно выставляет переменную HOME (на момент работы скрипта при перезагрузке машины эта переменная выставлена не в "/root", а просто в "/").
Добавление пути "/opt/novell/ncl/bin" к переменной PATH перед логином - не прихоть, а необходимость: без этого не отрабатывают мапы.
Далее - собственно, файлы.

Файл /etc/sysconfig/ncpmount содержит настройки - переменные, которые можно выставить и вручную, но удобнее через YaST -> System -> /etc/sysconfig Editor. К тому же при этом они корректно обрабатываются утилитой SUSEconfig. Этот файл не должен иметь доступов по чтению для кого-либо, кроме пользователя root, поскольку содержит в открытом виде все креденшиалсы (включая пароль). У меня он имеет владельца/группу root/root и права доступа 0600 (rw-------).
Код: Выделить всё
## Path:   Network/Novell/ncpmount
## Description:   Credentials for eDirectory user (used by /etc/init.d/ncpmount script)
## ServiceRestart:   ncpmount
## Type:   string("root")
## Default:   "root"
#
# Linux user account for starting connection
#
LXUser="root"

## Type:   string
## Default:   ""
#
# eDirectory tree to connect
#
NWTree="MYTREE"

## Type:   string
## Default:   ""
#
# Context of eDirectory user
#
NWContext="MYORG"

## Type:   string
## Default:   ""
#
# Name of eDirectory user (without of context)
#
NWUser="arcserve"

## Type:   string
## Default:   ""
#
# Password of eDirectory user
#
NWPassword="12345678"

## Type:   string("-r","-P ProfileName","-L LoginscriptFileName","")
## Default:   "-r"
#
# Login Script to run.
# The "-r" value means to run the standard login script for user.
# Use "-P ProfileName" or "-L LoginscriptFileName"
# for alternative login scripts.
# Use empty value for ignoring any login scripts at all.
#
NWScript="-r"

Второй файл - сам скрипт /etc/init.d/ncpmount (он должен быть выполняемым для root-а и не иметь прав записи для остальных, например - root/root 0755 rwxr-xr-x). После этого можно будет сделать необходимые ссылки на этот файл командой insserv ncpmount .
Код: Выделить всё
#! /bin/sh
# Copyright (c) 2010 Constantin Oshmyan
#
# Author: Constantin Oshmyan
#
# Revision History:
# 02-Sep-2010: Initial revision
#
# /etc/init.d/ncpmount
#
### BEGIN INIT INFO
# Provides: ncpmount
# Required-Start: $remote_fs $network $syslog $named novfsd
# Required-Stop: $network $syslog
# Should-Start: novell-xregd
# Default-Start: 3 5
# Default-Stop:
# Description:  access to Novell NetWare servers via Novell Client for Linux
### END INIT INFO

. /etc/rc.status
[ -f /opt/novell/ncl/bin/nwlogin ] || {
    echo -n "The Novell Client for Linux is not installed"
    rc_status -s
    rc_exit
}

[ -f /etc/sysconfig/ncpmount ] && . /etc/sysconfig/ncpmount
ncp="no"
[ "$NWTree" -a "$NWContext" -a "$NWUser" -a "$NWPassword" ] && ncp="yes"

rc_reset
case "$1" in
    start)
        echo -n "Starting Netware interconnection"
        if [ "$ncp" = yes ] ; then
            #Set the environment variables. HOME, NWPassword and PATH are
            #necessary for correct login and map drives via login script.
            #HOME variable is taken by "su" utility from the /etc/passwd file
            export NWPassword
            echo $PATH|grep -q '/opt/novell/ncl/bin' || PATH=${PATH}:/opt/novell/ncl/bin
            su $LXUser -c "nwlogin -t \"$NWTree\" -c \"$NWContext\" -u \"$NWUser\" $NWScript -E"
            rc_status -v
        else
            rc_status -u
        fi
        ;;
    stop)
        echo -n "Stopping Netware interconnection"
        if [ "$ncp" = yes ] ; then
            su $LXUser -c "/opt/novell/ncl/bin/nwlogout -a"
            rc_status -v
        else
            rc_status -u
        fi
        ;;
    status)
        echo -n "Checking for logged in status"
        su $LXUser -c "/opt/novell/ncl/bin/nwconnections | grep -q -i \"$NWTree\"" || rc_failed 3
        rc_status -v
        ;;
    restart)
        $0 stop
        $0 start

        # Remember status and be quiet
        rc_status
        ;;
    *)
        echo "Usage: $0 {start|stop|restart|status}"
        exit 1
        ;;
esac
rc_exit
Аватара пользователя
Константин Ошмян
 
Сообщения: 972
Зарегистрирован: 13 авг 2002, 21:36
Откуда: Рига


Вернуться в *nix

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron