SIO 08.08.2010 12:35
Tips & tricks — Пользователям, отказавшимся от *dm, посвящается
Представьте ситуацию: вы отошли от компьютера, конечно же, заблокировав экран. В это время неизвестный нехороший человек подошел к компьютеру. Этот нехороший человек переключается в консоль, из которой вы запустили иксы - и легко получает шелл с вашими привилегиями. Способов это сделать великое множество: нажать ctrl+c или ctrl+\ - и иксы умрут, ctrl+z - и иксы уйдут в фоновый режим.. Что может сделать дальше этот человек - ограничено лишь его фантазией, его совестью, и привилегиями вашего пользователя.Такой бреши в безопасности легко избежать: не надо оставлять залогиненный шелл, когда запускаете иксы. Выглядеть это будет примерно так:
1 |
|
Ну и на десерт: автозапуск иксов при логине вашим пользователем в первой консоли
--
Заметка написана по следам обсуждения в [email protected]. Благодарности в алфавитном порядке получают: ixti@laptop, koctep, kostix, sceptic, teo1. Если кого забыл, поправьте, пожалуйста. За петлянием коллективной мысли следить здесь
cppmm 08.08.2010 14:04 #
+ 1 -
Раньше тоже так делал. Потом узнал про slim. Но вообще, совет правильный, да.
Т.е. те, кто использует slim среди демонов это не касается? И кстати я получить шелл с моими привилегиями никак не могу (Ctrl+Alt+*)
а один буком пользуюсь и запускаю иксы через пятый ранлевел как
при выходе из иксов кидает на tty1 где уже ждет login
а нафига setsid? (только не надо рассказывать что это такое, я про то нафига он тут?)
x:5:once:/bin/su muhas -l -c "/bin/bash --login -c startx >/dev/null 2>/dev/null"
при выходе из иксов кидает на tty1 где уже ждет login
а нафига setsid? (только не надо рассказывать что это такое, я про то нафига он тут?)
setsid для совместимости с zsh. В отличие от баша он по дефолту убивал детей при выходе
не понял, детей иксов? так они и так помирают при выходе с иксов, не?
так как они умрут если exit отработает только после того как из иксов выедет(упадут и прочее)?
Не, альтернативой этому подразумевалось
startx&; exit
Сработает в баше, не прокатит в zsh
startx&; exit
Сработает в баше, не прокатит в zsh
Наши костыли - самые костылеватые костыли в мире. Сделал тем способом, который раньше нашел. В том, что опция есть - я не сомневался, не подскажете, что именно искать в мане?
Вот это вроде (из man zshoptions):
CHECK_JOBS
Report the status of background and suspended jobs before exiting a shell with job control; a second attempt to exit the shell will succeed. NO_CHECK_JOBS is best used only in combination
with NO_HUP, else such jobs will be killed automatically.
The check is omitted if the commands run from the previous command line included a `jobs' command, since it is assumed the user is aware that there are background or suspended jobs. A `jobs'
command run from one of the hook functions defined in the section SPECIAL FUNCTIONS in zshmisc(1) is not counted for this purpose.
Report the status of background and suspended jobs before exiting a shell with job control; a second attempt to exit the shell will succeed. NO_CHECK_JOBS is best used only in combination
with NO_HUP, else such jobs will be killed automatically.
The check is omitted if the commands run from the previous command line included a `jobs' command, since it is assumed the user is aware that there are background or suspended jobs. A `jobs'
command run from one of the hook functions defined in the section SPECIAL FUNCTIONS in zshmisc(1) is not counted for this purpose.
а как-нибудь реально просто заблочить виртуальный терминал?
т.е. видимо надо какую-то хрень, которая будет спрашивать пароль, при этом по Ctrl-C и ctrl-Z ничего происходить не должно
С ctrl-c еще ничего — на SIGTERM можно наплевать, а вот на SIGSTOP наплевать нельзя, следовательно, надо уметь говорить shell'у, чтоб он перестал слать сигнал по ctrl-z
т.е. видимо надо какую-то хрень, которая будет спрашивать пароль, при этом по Ctrl-C и ctrl-Z ничего происходить не должно
С ctrl-c еще ничего — на SIGTERM можно наплевать, а вот на SIGSTOP наплевать нельзя, следовательно, надо уметь говорить shell'у, чтоб он перестал слать сигнал по ctrl-z
и ещё одна замечательная программа: screen
Там надо жать CTRL+A,X
Там надо жать CTRL+A,X
Паранойи тред. Господа, если человек имеет физический доступ к компьютеру, логический доступ он сможет заиметь всегда.
"То, что у вас паранойя, еще не значит, что за вами не следят"
А вообще, любой замок ломается, но это ведь не повод оставлять дверь дома открытой?
А вообще, любой замок ломается, но это ведь не повод оставлять дверь дома открытой?
Вообще говоря, сия дыра не нова — на позиксе, например, её обсуждали ещё год назад. Другое дело, что решение, аналогичное твоему, показали только недавно, и оно годится только для bash. Не возражаешь, если я опишу твой вариант (со ссылками, конечно)?
Ну и за setsid отдельное спасибо — интересная утилитка.
Ну и за setsid отдельное спасибо — интересная утилитка.
TTYNAME=`basename $TTY`
case $TTYNAME in
tty<5-9>) exec /usr/bin/startx -- vt${TTYNAME#tty} ;;
esac
1. Попробуй переключится в тот же самый терминал (исксы юзает тот же терминал, на котором запущен startx),
2. попробуй вызвать шелл, которого уже нет в памяти (exec...).
А что будет, если startx завершится с ошибкой? Тогда clear и exit не выполнятся и юзер вывалится в шел. Элементарный exec решает любые подобные проблемы на корню.
Как правильно заметили выше, такой метод запуска не спасает не только от ^Z, но и от ^C и ^\, а следовательно, ничем не лучше обычного startx. Только писанины больше =)
Объясните, пожалуйста, этот момент:
не спасает не только от ^Z, но и от ^C и ^\
(видимо, я не понимаю некоторые тонкости, т.к. использую xdm; например, мне не понятно, как, убив после startx && clear && exit иксы, можно попасть в шелл с правами пользователя)
При && следующая команда выполняется только после успешного завершения предыдущей. Если предыдущую прервать по ^c - часть после && не будет выполнена
Ну так.
1. (если) startx завершается успешно
2. после && clear && exit пользователь разлогинивается
3. остаются только запущенные под пользователем иксы
И как после этого попасть в шелл с правами пользователя??
1. (если) startx завершается успешно
2. после && clear && exit пользователь разлогинивается
3. остаются только запущенные под пользователем иксы
И как после этого попасть в шелл с правами пользователя??
Если хотите попробуйте, нет поверьте на слово, я пробовал не раз. Если жать ^C достаточно быстро то спокойно можно успеть убить и иксы, и клир, и экзит. Так что вариант с exec самый правильный, логичный и надёжный.
Завершение по ^C не считается успешным. Это раз. startx висит на переднем плане пока запущены иксы. Это два.
Вы хотите прийти к решению вида startx&; exit, которое из коробки работает только в баш. Это три. И да, я написал про это решение и почему мне оно не нравится гораздо выше.
Вы хотите прийти к решению вида startx&; exit, которое из коробки работает только в баш. Это три. И да, я написал про это решение и почему мне оно не нравится гораздо выше.