LINUX.ORG.RU

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


0

1

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

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

★★★★★

То, что вы хотите сделать - абсурд, если, конечно, это у вас не просто сезонное обострение велосипедостроительства.

Сделать это как следует вам все равно абсолютно точно не удастся, - MS пилит свой UAC (немного не то, что у вас, но из той же оперы) уже сколько времени, а воз, как говорится, и ныне там (хотя с ним лучше, чем без него, ясное дело).

Кроссплатформенное? Ага, механизмы безопасности в windows и *nix практически не отличаются друг от друга, ведь так? Т.е. придется писать, по сути, два совершенно разных приложения.

Защита системы от пользователя, имеющего права администратора на ней. Ну да, забыв на секунду, про то, что это просто лишено всякой логики, вспомним о том, что под виндовз (ХР) нет ни одного действительно работающего антивируса, - все пробиваются практически детскими игрушками, ведь когда в системе все равны (т.е. все с правами администратора), ни о каких гарантиях безопасности речи быть не может. Вы действительно думаете, что у вас лучше получится, чем у компаний-производителей антивирусов?

Совершенно безвозмездно дарю полностью работающее решение. Готовите образы системы для каждой лабы и между работами с помощью TFTP Multicast их разворачиваете. Если студент сделал себе format c:, - сам виноват, на пересдаче делать такого он уже не будет. Аналогично делаем для Linux. И преподавателю не придется 'y' тысячу раз нажимать (это вам только кажется, что это - ерунда).

shylent
()

Выдаю бредовую, хотя что-то мне подсказывает, единственно возможную идею (только для unix):

  • Цепляешься ptrace'ом к интерпретатору
  • Ловишь библиотечные вызовы fork/exec (хотя проще сисколы, наверное)
  • Обрабатываешь пойманное
  • Вертаешь ошибку в если стартовать нельзя (поправить регистры в контексте интерпретатора должно быть не сложно)

Как это провернуть можно покурить в исходниках strace и ltrace.

Ещё не передумал? :)

ЗЫ: Что-то подобное, наверное, можно провернуть и с виндой. Как перехватить вызова API можно почитать на любом кулхацкерском сайте.

ЗЗЫ: Ах да, чуть самое главное не забыл :) Писать на C/C++ )))

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

Я покажу преподавателю-инициатору всего этого данный тред, а дальше будем решать что делать.

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

>Как, как я сделаю разрешение, которое иногда нужно, а иногда нет? А через что они вызываются мне неважно.
может всё-таки догадаешься разных пользователей завести с разными ограничениями для разных лаб и присвоить им группу «администраторы».

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

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

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

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

>может всё-таки догадаешься разных пользователей завести с разными ограничениями для разных лаб и присвоить им группу «администраторы»

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

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

>Готовите образы системы для каждой лабы и между работами с помощью TFTP Multicast их разворачиваете
да, отличное решение. А вкупе с загрузкой компа по сети (netboot, pxe) всё нехило автоматизируется: запустил компы, они загрузили урезанный live-образ linux с сервера, скачали образы хардов, перезаписали, пометили на сервере, что готовы к лабе, перезагрузились.

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

Все это чудесно-расчудесно, но мне все же придется писать свой велосипед. Потому что преподам хочется контролировать студентов на лабах, и хочется попробовать такой вот способ. Ничего плохого от этого не будет, не понравится - откажутся, понравится - будем развивать дальше.

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

> придется писать свой велосипед

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

Зачем же вы тогда спрашиваете? Просто пишите! Продадите потом за большие деньги (а что, если такое сделать действительно хорошо, с руками оторвут). Мучения студентов и преподавателей? Да кого это волнует, в самом деле, велосипед же важнее.

Открывайте emacs и вперед. Прямо сейчас, пока не пропало желание.

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

1. Передо мной выбор: или это, или лабы по настройке венды. По-моему велосипед лучше.

2. Никто не заставляет кого-то этим пользоваться. Значит и мучаться никто не будет.

3. Я пользуюсь vim'ом.

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

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

instant fail

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

3. Я пользуюсь vim'ом.

тогда даже не стоит и браться :)

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

1. Не люблю винду. Очень неудобно.

2. Поздно. Выбор сделан, полсеместра прошло. Все, кто выбрал лабы уже половину сдали.

3. Хочу потренировать навыки программирования. На лабах по настройке венды так не получится.

vurdalak ★★★★★
() автор топика

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

Я бы как-нибудь netcat прикостылил. Я сейчас пытался скрипт написать, но что-то пошло не так и он завесил мне систему)

В общем суть такова:

сервер:

#!/bin/sh
while true
do
  netcat -l -p 9876 | while read cmd
    read -p $cmd' received. Confirm (y) ?' -n1 -s yes
    if [ $yes = 'y'] then
      $cmd | netcat -l -p 9877
    fi
  done
done

клиент:

#!/bin/sh
echo $* | netcat $SERVER 9876
netcat $SERVER 9877

Надо сделать это работать и добавить передачу ввода с клиента на сервер.

Я пытался fifo прикостылить, но ниасилил.

Yareg ★★★
()

можно так

find /bin -executable | while read f; do 
  file=/usr/local/fake/`basename $f`
  cat > $file <<END
#! /bin/sh
exec my_sudo "$0" "$@"
END
done
export PATH="/usr/local/bin/fake"
anonymous
()
Ответ на: комментарий от korvin_

да, прикольный пример; его можно дополнить попыткой открытия на запись миллиона левых файлов, и затем че-нить из /etc/ или /proc/

кстати, как препод будет определять, законно ли записать че-то в /proc/, а?

то, что придется защищать пид-ы необходимых процессов от убивания — это ясно

но еще придется защищать их от убивания от имени других администраторов из винды

возможно, надо будет разрешать символические и жесткие ссылки — а в винде они есть!

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

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

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

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

http://www.acronis.com/enterprise/products/snapdeploy/

И прописать вбить серийники винды в базу, написать скрипт, выдергивающий после деплоймента серийник из базы и ассайнящий его на тачку.

Это будет проще, чем то странное, чего хочет ТС.

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

> По-моему велосипед лучше.

А вот по-моемому вам с преподавателями надо садится и учить матчасть. В винде есть политики групп для домена + чем писать всякую херню проще изучить удаленную отладку. Для linux существует немерянное кол-во полиси фреймворков.

Ничего личного, не вы выбирали предмет вопроса, но вашим преподам дикий незачет - учить надо вышеупомянутому, а не DIR TYPE COPY CON...

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

>выдергивающий после деплоймента серийник из базы и ассайнящий его на тачку

деплоймента

ассайнящий

Говори по-русски.

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

А как ты защитишь свою «консоль» от ^Z ?

:D

Предложение - web 2.0 - полноценный рабочий стол работающий через аякс. Соотвественно придется написать свои обертки/реализации всех программ, и это омжет из лабы стать твоим дипломным проектом! Но будет работать и кроссплатформенно вообще на любой ОС поддерживающей браузер с джаваскриптом, даже на телефонах!

http://www.eyeos.org/what-is-eyeos/try-eyeos-now/

OxiD ★★★★
()

Не кроссплатформенно, но.

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

Ну и пользователям системы ставить этот шелл вместо /bin/bash

madgnu ★★★★★
()

1. ставить виртуалку 2. ставить виртуалку 3. ставить виртуалку

пост ни о чём.

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

Ты чего-то не понял из того, что я написал, или просто сказать было нечего? Я тебе совет даю, как ты попросил, а ты вместо «спасибо» к словам цепляешься, это нормально?

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