Согласно man startx
, следующие файлы управляют поведением startx
:
$(HOME)/.xinitrc Client to run. Typically a shell script which runs many programs in the
background.
$(HOME)/.xserverrc Server to run. The default is X.
/etc/X11/xinit/xinitrc Client to run if the user has no .xinitrc file.
/etc/X11/xinit/xserverrc Server to run if the user has no .xserverrc file.
Так, если Вы хотите продолжать использовать startx
, необходимо скорректировать содержание Вашего .xinitrc
файл.
Но это не могло бы быть необходимо, так как тяжелые настольные среды, такие как KDE часто идут с готовыми к использованию сценариями запуска. В случае KDE существует названный тот startkde
(Я не помню, используется ли это в качестве замены для startx
, или необходимо поместить его в xinitrc
).
Я не вижу, как это может относиться sudo
.
Для setuid сценариев идея - это:
Предположите, что у Вас есть a /usr/local/bin/myscript
это - корень setuid и запускается с #! /bin/sh
. Ни у кого нет доступа для записи к /usr/local/bin
или myscript
, но кто-либо может сделать:
ln -s /usr/local/bin/myscript /tmp/-i
И /tmp/-i
также становится setuid сценарием, и даже при том, что у Вас все еще не будет доступа для записи к нему, у Вас действительно есть доступ для записи к /tmp
.
В системах, где setuid сценарии не выполняются посредством /dev/fd
, когда Вы выполняетесь cd /tmp && -i
, setuid укусил средства, которые он выполнит: /bin/sh -i
как корень:
/bin/sh -i
Теперь, для того особого случая, легкая работа вокруг должна записать хижине рекомендуемый путь: #! /bin/sh -
, но даже затем, существует состояние состязания. Теперь это становится:
/bin/sh - -i
Но между 3 и 4 выше, у Вас есть много времени для изменения "-i" или ("любой-файл", поскольку это - другой вектор атаки здесь) к некоторому злу "-i" файл, который содержит, например, просто "sh", и Вы получаете корневую оболочку (для корневого сценария setuid).
С более старыми версиями ksh
, Вы не должны были даже делать этого, потому что в 4, ksh сначала искал "-i" в $PATH
, таким образом, было достаточно поместить Ваше зло "-i" в $PATH
(ksh
открыл бы тот вместо того в /tmp
).
Все те векторы атаки фиксируются если, когда Вы делаете: cd /tmp; -i
, система делает вместо этого (все еще в execve системном вызове):
x
из процесса./bin/sh /dev/fd/x
sh
открывается /dev/fd/x
который может только относиться к файлу, который был execve
d.Дело в том, что файл открыт как часть execve, таким образом, мы знаем, что это - код с доверяемым содержанием, которое будет интерпретируемым с измененным priviledges.
Теперь, когда не относится sudo
потому что sudo
политика на основе path
.
Если sudo
в правиле говорится, что можно выполнить/usr/local/bin/myscript как корень, затем можно сделать:
sudo /usr/local/bin/myscript
Но Вы не можете сделать:
sudo /tmp/any-file
Даже если "любой-файл" является hardlink или символьной ссылкой на /usr/local/bin/myscript
. sudo
не использует /dev/fd
AFAICT.
sh
(т.е. копия/bin/sh
)? – kjo 21.03.2013, 16:20