Что мы подразумеваем под словом wrapper? Под эти словом
подразумевается программа, которая из себя вызывает другую или
несколько. Для чего это нужно? Представьте себе ситуацию, с которой мне
пришлось сталкнуться в моей организации. Начнем с того, что орга
низация занимается разработкой программных продуктов и дизайном веб
серверов. В нашей сети есть машины и под Linux и под Windows 95/NT и
даже Mac. Многим (в связи со спецификой работы) нужен терминальный
доступ к серверу. Было два варианта: поставить SSH
или открыть 23 порт с нормальным шелом. Первый вариант не подходит - все
сказали зачем нам дополнительный софт ставить, когда есть нормальный
телнет. Мне же не подходил второй вариант, но 20 человек против одного,
сами понимаете. Всех пользователей надо б
ыло ограничить в доступе к определенным директориям, запретить просмотр
системных файлв и
т.д.
Как выйти из такой ситуации? Поставить последний bash с возможностью
работать в restricted режиме? Тоже не подходит. Я давно слышал, что
многие запускали NCSA HTTP Daemon из под этого самого wrapper-a. Тем
самым, демон работал в своей собственной файловой
системе. Это мне как раз и нужно. Работа началсь. Первым делом, надо
создать свою собственную файловую систему. Я ее создал в /usr/ и назвал
env. Далее, создал в этой директории такие же поддиректории, как и в
корневой файловой системе:
Понятно, что можно скомпелировать нужные программы без того, чтобы они
нуждались в этих библиотеках, но времени было мало и пришлось их просто
скопировать.
Далее, стоит подумать о том, какие программы стоит отдать пользователям.
Стандартный набор выглядит у меня примерно так:
Можно еще что то положить и в sbin, но это уже не столь важно. Далее
поговорим о содержимом etc. Что стоит туда класть? Если у Вас Linux, то
достаточно положить
Файл паролей, где все пароли заменены звездочкой, делается для того,
чтобы ls показывал имя пользователя. И файл групп group и файл termcap.
Далее по вашему усмотрению.
Отлично, файловая система создана, приступаем к написанию wrapper-a.
Вот код моего:
Далее делаем: # gcc -o wrapper wrapper.c
А потом копируем его в /bin и делаем его chmod u+s /bin/wrapper
После чего, чтобы никто другой не ругался делаем: echo /bin/wrapper
>> /etc/shells
Создадим пробного пользователя с шелом /bin/wrapper. И попробуем войти
телнетом на машину:
FreeBSD/i386 (joshua) (ttyp1)
login: user120 Password: *****
Last login: Thu Apr 29 13:25:36 from invalid hostname Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994 The Regents of the University of California. All rights reserved.
Вот, теперь пользователь ничего не видит кроме того, что Вы ему
разрешили видеть и использовать.
А если хотите запустить демон в своей файловой системе? Вот небольшая
программа, которая сделает это: