В утилите pcred из комплекта Solaris 10 появилась возможность на лету менять
идентификатор владельца уже запущенного процесса:# ps -ef | grep sleep
vasya 4088 4081 0 09:50:53 pts/11 0:00 sleep 10000000# pcred -u 123 4088
# ps -ef | grep sleep
kolya 4088 4081 0 09:50:53 pts/11 0:00 sleep 10000000URL: http://www.unixpin.com/wordpress/2008/11/21/proc-uid/
Обсуждается: http://www.opennet.me/tips/info/1843.shtml
Зачем?
чтобы хаксорам было проще заметать следы
Чтобы данные, к которым процесс имеет доступ при запуске, перестали быть доступны процессу во время его работы.Первый пример, который мне в голову пришел - чтение файла с паролем ключа SSL и дальнейшее забывание того, как его прочесть снова.
а процесс сам не может сделать setuid после открытия файла и закрыть его после чтения?
ну это еще программа должна быть правильная.
далеко не все программы правильные...
в Linux это через capability реализовано. Достаточно давно.
А подробнее, как это сделать ?
расскажите, интересно же !
$ man capabilities (или http://linux.die.net/man/7/capabilities )
....
CAP_SETUID
Allow arbitrary manipulations of process UIDs (setuid(2), setreuid(2), setresuid(2), setfsuid(2)); allow forged UID when passing socket credentials via Unix domain sockets.
.....
по русски здесь же - http://www.opennet.me/man.shtml?topic=capabilities&category=...
...
CAP_SETUID
Разрешить произвольные манипуляции UID процессов (setuid(2), etc.); разрешить ложные UID при прохождении параметров сокетов через доменные сокеты Unix.
подробнее здесь - http://en.wikipedia.org/wiki/Capability-based_security
p.s.:
к сожалению они так и не стали стандартом POSIX (но в линух реализованы). отсюда имеем эту статью, т.е. "кто в лес, кто по дрова"...
Разница с солярисной фичей в том, что линуксовый процесс может менять setuid'ом только свой uid, а в солярисе один процесс может поменять uid другого.В POSIX нет ничего, что требует прав администратора. И в этом есть определённый смысл. Для таких вещей можно было бы придумать отдельную спецификацию, но они всё же сильно зависимы от ОС...
>Разница с солярисной фичей в том, что линуксовый процесс может менять setuid'ом только свой uid, а в солярисе один процесс может поменять uid другого.да. я именно это и имел в виду.
и честно говоря не могу представить себе зачем бы мне это понадобилось.
особенно не понятно, что будет с уже открытыми файловыми дескрипторами (и не только) в ходе такого изменения, но попробую.
вообще писал про это
CAP_SETPCAP
If file capabilities are not supported: grant or remove any capability in the caller's
permitted capability set to or from any other process. (This property of CAP_SETPCAP is
not available when the kernel is configured to support file capabilities, since CAP_SET‐
PCAP has entirely different semantics for such kernels.)If file capabilities are supported: add any capability from the calling thread's bound‐
ing set to its inheritable set; drop capabilities from the bounding set (via prctl(2)
PR_CAPBSET_DROP); make changes to the securebits flags.Возможно, не совсем реализована. И разница в том, что процесс может дать другому процессу cap_setuid. Только вряд ли сможет контроллировать, на какой UID тот сделает set.
Типа, все на благо хацкера? =)
>Типа, все на благо хацкера? =)Угу. Осталось только в motd прописать рутовый пароль ;)
Теоретически, конечно, может быть нужно для кривых прог, которые не умеют дропать привелегии и содержат в себе проверку на запуск из-под рута - но я бы побоялся использовать такое г... изначально.