LINUX.ORG.RU

Перехват команд консоли


0

1

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

Если для этого подходит другой язык, буду не против. Главное - чтобы работало под вендой и линуксом.

★★★★★

Т.е. вы хотите сделать какой-то извращенный аналог sudo с централизованным управлением, да еще и «кроссплатформенно»?

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от Eddy_Em

>Т.е. вы хотите сделать какой-то извращенный аналог sudo с централизованным управлением, да еще и «кроссплатформенно»?

Именно. Будет применятся в ВУЗе на лабах, где требуются права администратора (например, добавление/удаление пользователей).

vurdalak ★★★★★ ()
Ответ на: комментарий от vurdalak

Можно правда не кроссплатформенно, а отдельные клиенты под венду и линукс, но тогда придется писать их по-разному.

vurdalak ★★★★★ ()
Ответ на: комментарий от Eddy_Em

И да, все должно быть прозрачно. Т.е. не запускать отдельный интерпретатор, который будет запрашивать разрешение, а именно перехватывать вызовы из обычной консоли.

vurdalak ★★★★★ ()
Ответ на: комментарий от flareguner

>Я думаю, придется для каждой платформы свое писать. Думаю на С это будет не сложно.

1. А поподробнее можно? Через какой механизм это реализовывать?

2. Разве си не кросплатформенный? Надо только перекомпилировать или для разных платформ будут использоваться разные механизмы?

3. Кроме си есть варианты? Я просто его немного не люблю. Тот же лисп/ява/другие?

vurdalak ★★★★★ ()

Что значит «перехват команд консоли»?

Хотя бы для винды - это каких команд какой консоли, команд cmd.exe чтоли, вроде TYPE или DIR? И как ты, хотя бы в теории, собрался их перехватывать?

Love5an ()
Ответ на: комментарий от Love5an

>Хотя бы для винды - это каких команд какой консоли, команд cmd.exe чтоли, вроде TYPE или DIR? И как ты, хотя бы в теории, собрался их перехватывать?

Да, именна такие команды. А как перехватывать - это и есть вопрос. Например, прослушивать создание новых процессов или блокировать/приостанавливать его.

vurdalak ★★★★★ ()
Ответ на: комментарий от Love5an

В винде «консоль» это не интерпретатор неких команд, а среда для приложений, у которых нет гуйни. А cmd.exe это просто одно из таких приложений.

Его внутренние команды ты хер перехватишь, они намертво вклеены в приложение.
Перехватывать же команды оболочки Windows(т.е. вызов программ и прочее) в принципе можно, но это, по-моему, уже из области вирусопейсательства.

Love5an ()
Ответ на: комментарий от Love5an

Ну пускай будет вирусопейсательство, мне-то что. Главное - проверять вызовы пользователем «net user» или «format c:».

vurdalak ★★★★★ ()
Ответ на: комментарий от vurdalak

1) Это уже точно не знаю, в винде это будет иначе сделано.

2) В винде же терминал как-то иначе работает, чем в юниксе

3) Не знаю, но такие вещи лучше писать на С, ИМХО.

flareguner ()
Ответ на: комментарий от flareguner

Ладно, и на том спасибо. Одно я понял: придется делать платформозависимым. Да еще и учить, как работает венда.

vurdalak ★★★★★ ()
Ответ на: комментарий от vurdalak

Про мастдай ничего не знаю, но в линуксе, ИМХО, самый простой вариант - переместить /etc/sudoers в отдельную директорию, и монтировать ее с сервера по nfs. А на сервере можете править, когда чего надо...

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от Eddy_Em

Не выйдет. Надо интерактивно обрабатывать запросы. Т.е. в одном случае одну и ту же команду разрешить, а в другом - запретить. А sudo обработает ее всегда одинаково.

vurdalak ★★★★★ ()
Ответ на: комментарий от vurdalak

Можно написать в целом единую кодовую ветку, а платформозависимые части отгородить директивами вида


#ifdef PLATFORM_WINDOWS
<code frafggmanet for win
#endif

#ifdef PLATFROM_UNIX
<code for unix>
#endif


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

flareguner ()
Ответ на: комментарий от vurdalak

Я думаю все-таки С. Задача ближе к системному программированию, и довольно простая. Вообще, главное перехватить команду. А потом проверять вашим методом, можно ли её запускать. И либо посылать юзера нафиг, либо разрешать ему.

flareguner ()

Да, самое главное - правильно выбрать язык. А сама технология этого - уже несущественные мелочи. Приехали.

anonymous ()
Ответ на: комментарий от flareguner

Ну вот и я о том же. Перехват суть самое интересное, остальное уже реализовано, надо только переписать с питона на си.

vurdalak ★★★★★ ()
Ответ на: комментарий от vurdalak

Можно кстати сделать проще. Написать на куте простую пускалку программ, где только воодится исполняемый файл. Тогда можно и без привязки к платформе и геммороя с виндовым терминалом.

flareguner ()
Ответ на: комментарий от Eddy_Em

праивльно, это именно свой sudo, но работающий не с файлом разрешений, а с сервером в сети. Следовательно эти пакеты «авторизации» могут быть перехвачены и заменены. Значит необходимо шифрование, аутентификация и прочее.

anonymous ()
Ответ на: комментарий от flareguner

Тоже не пойдет. Я же говорил, нельзя позволить пользователю каким-либо способом запустить команду. Он входит под правами админа. Пока никто не смотрит он может закрыть эту вашу пускалку и набрать что-либо в cmd. А админу потом разгребать.

P.S. Пускалку я уже давно сделал, могу показать, как доберусь до домашнего компа.

vurdalak ★★★★★ ()
Ответ на: комментарий от anonymous

>пакеты «авторизации» могут быть перехвачены и заменены

Студенты перехватывают и заменяют сетевые пакеты во время лабораторной работы? Думаю, от таких не спасешься. Хотя добавить шифрование и авторизацию можно будет, но в уже готовую прогу как дополнительную фичу.

vurdalak ★★★★★ ()
Ответ на: комментарий от vurdalak

«Команды» format и net, как и большинство других «команд» это приложения. Находятся они в %windir%/system32/
И вопрос с ними решается банально урезанием прав некоего пользователя/группы на пользование ими. «свойства» -> «безопасность»
По-хорошему, надо запретить пользоваться ими всем, кроме администраторов. Ну, конечно, подразумевается, что ваши «пользователи» не под админами сидят.
В Windows довольно продвинутая система безопасности, надо полагаться на нее и не писать хаки.

Бтв.
Под «оболочкой» имелся виду сам Windows Shell, а не командная строка.

Love5an ()
Ответ на: комментарий от vurdalak

Для безопасности можно монтировать по ssh. Для интерактивности - написать простенкую графическую морду для управления разрешениями. Ничего сложного нет.

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от Love5an

Да сколько можно объяснять.

1. Пользователь работает под учетной записью администратора.

2. Пользователь ДОЛЖЕН иметь право на исполнение административных команд.

3. Выполнение команды или запрещение оной не должно быть нигде прописано. Это запрашивается ИНТЕРАКТИВНО у администратора при КАЖДОМ вызове команды.

4. Одна и та же команда может быть в одном случае разрешена, а в другом запрещена. Например, нельзя разрешать удалять пользователей на лабе с темой «утилита ping».

Еще раз повторюсь: статически прописывать право пользователя на приложение - не вариант.

vurdalak ★★★★★ ()
Ответ на: комментарий от vurdalak

1. противоречит всему остальному - либо используйте sudo, либо забудьте.

2. решается sudo.

3. зачем? Вы хотите, чтобы преподаватель сидел и 60 раз в минуту жал 'y' или 'n'? Проще уж создать заранее профили sudo, а перед уроком заменять текущий на нужный.

4. см. п. 3

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от vurdalak

Студент может создать 600 пользователей подряд. Потому что право на «создать пользователя» у него есть. А так препод один раз ответит y, а на второй раз заметит неладное и скажет n.

vurdalak ★★★★★ ()
Ответ на: комментарий от vurdalak

Вот же вам делать нечего... Делайте «песочницу» или виртуалку, и пусть они там развлекаются. Как чего испортят - восстанавливаете быстренько из резервной копии.

А так - придется вам делать патч для баша, чтобы, к примеру, по ssh на сервер отправлялись запросы на выполнение команд, чьим хозяином является root...

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от vurdalak

Так не бывает. Или админ, которому всё до лампочки. Или не админ с аналогом команды sudo, в которой работа с файлом sudoers заменена на работу с удалённым сервером.

anonymous ()
Ответ на: комментарий от vurdalak

>1. Пользователь работает под учетной записью администратора.
Это бред.

2. Пользователь ДОЛЖЕН иметь право на исполнение административных команд.

Что значит «административные команды»? Ну сделай пользователю запрет к format.com и разрешение к net.exe
Еще раз - большинство «команд» в cmd.exe - вызовы каких-либо приложений через оболочку виндовс(да-да, аналогично даблклику на ярлыке соответствующего приложения). Т.е. нет разницы, через cmd.exe они вызывались или через «проводник».

Остальное не читал, ибо бред. Автор, так и скажи начальству.

Love5an ()
Ответ на: комментарий от anonymous

Песочница или виртуалка - меганагрузка на допотопные компы. А еще в виртуалку надо поставить венду, да еще и лицензию. Так что теперь, запупить на каждый комп по +1 лицензии? И сами машинки проапгрейдить?

vurdalak ★★★★★ ()
Ответ на: комментарий от Love5an

>Ну сделай пользователю запрет к format.com и разрешение к net.exe

Как, как я сделаю разрешение, которое иногда нужно, а иногда нет? А через что они вызываются мне неважно.

vurdalak ★★★★★ ()
Ответ на: комментарий от vurdalak

Песочница доп. нагрузкой не является. man chroot. А ставить мастдай в виртуалку вам никто здесь не советовал - это, все-таки, ЛОР, а не ВОР.

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от vurdalak

>Как, как я сделаю разрешение, которое иногда нужно, а иногда нет?

Видимо, сделать так, что когда нужно, оно есть, а когда не нужно - его нет.

Love5an ()
Ответ на: комментарий от Eddy_Em

Мне нужно кроссплатформенное. Какой chroot? 90% машин в ВУЗе - на мастдае. И я этого не изменю, т.к. 95% работ выполняется в проприетарных win-only продуктах. А если показать 70-летнему преподу, преподающему астрофорт, линукс, он пошлет куда подальше, даже не пытаясь узнать что это.

vurdalak ★★★★★ ()
Ответ на: комментарий от Love5an

>сделать так, что когда нужно, оно есть, а когда не нужно - его нет.

В т.ч. и интерактивно, и удаленно.

Виндовое API на этот счет довольно крупное и замороченное, но начать можно вот здесь:
http://msdn.microsoft.com/en-us/library/ee663293%28v=VS.85%29.aspx

Love5an ()
Ответ на: комментарий от Love5an

>Виндовое API на этот счет довольно крупное и замороченное, но начать можно вот здесь

Спасибо. А оно все M$ Vi$ual $tudio или с помощью GCC откомпилируется? Я в вендовом апи не спец, не знаю с чем его едят.

vurdalak ★★★★★ ()
Ответ на: комментарий от vurdalak

астрофорт

Это что за зверь?

95% работ выполняется в проприетарных win-only продуктах.

А какого же вы тогда здесь спрашиваете, а не на винфаке?

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от anonymous

Не только. Есть и линуксовые лаборатории. Т.е. существует один предмет по программированию на никсах, и специально для этого в одной из лабораторий параллельно с мастдаем стоят генты.

vurdalak ★★★★★ ()
Ответ на: комментарий от Eddy_Em

Астрофорт - это такая среда и язык, где полэкрана занимают методички, а полэкрана - интерпретатор команд на этом языке. И все под досом, причем под чистым, никакие эмуляторы не катят. Лабы заключаются в программировании LPT, видеоадаптера и пр.

vurdalak ★★★★★ ()
Ответ на: комментарий от Eddy_Em

>А какого же вы тогда здесь спрашиваете, а не на винфаке?

Спрашиваю тут, ибо писать буду под линуксом, т.к. венды у меня нет. Ну и кроссплатформенность нужна обязательно.

vurdalak ★★★★★ ()
Ответ на: комментарий от vurdalak

Лабы заключаются в программировании LPT, видеоадаптера и пр.

Вот же старперы у вас. И охота им «обучать» студентов работать с железом через одно место? В линуксе все делается элементарно же... Я, например, не представляю, как мои программулинки перенести в мастдай - там нет v4l2, /dev/dsp, /dev/ttySx и т.п.

существует один предмет по программированию на никсах

Вот как там реализовать вашу идею вам уже рассказали. Можете тему отмечать как решенную. Про мастдай здесь спрашивать - только провоцировать флейм.

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от Eddy_Em

Знаю, что можно реализовать под линукс. Но мне нужно, чтобы работало везде. А спрашивать половину тут, а половину на винфаке - не хочу. Тем более я не люблю вендузятников, а там их полно.

vurdalak ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.