Изменение силы cwd пользователя как корень

Debian и производные имеют трудные/средние/мягкие зависимости, но это не решает Вашу проблему.

APT, Debian, эквивалентный из Конфетки, различает вручную установленные и автоматически установленные пакеты, который решает Вашу проблему (автоматически установленные пакеты удалены, если никакой вручную установленный пакет не зависит от них). Я не знаю, была ли эта функция портирована к Конфетке.

6
16.03.2012, 17:59
2 ответа

Нет никакого способа изменить рабочий каталог процесса от за пределами него, корень или нет. Это было бы чрезвычайно тревожащим для процесса жертвы, и нет только никакого API для него.

Теперь Вы могли использовать злые шутки. Один из них присоединяет отладчик к Вашему целевому процессу и вызывает a chdir на нем - посмотрите этот вопрос на Переполнении стека. Некоторые операционные системы могли бы предложить другие API, чтобы сделать такие задачи (вводящий syscalls в не подозревающих процессах).

Что касается Вашей цели перемонтирования файловой системы из-под кого-то, это чрезвычайно безнадежно, даже если Вам технически удается взломать его - возможности являются процессом, будет иметь открытые дескрипторы файлов на "старом" монтировании, и нет никакого портативного способа правильно повторно прикрепить их к файлам на "новом" монтировании, даже если соответствующие файлы все еще там.
Подход, который, казалось бы, работал бы в теории, должен будет отсортировать, в спящем режиме процессы, которые Вы хотите из пути к тому обслуживанию. Но существует много проблем с этим, особенно рассматривая не просто файлы, но сетевые сокеты. (См. этот другой вопрос для некоторых интересных моментов.)

Короче говоря, Вы более обеспечены с вежливым kill (с льготным периодом), нет никакого сообщения, с чем неожиданные последствия могли явиться результатом того, чтобы играть в игры cwd на вероятностном процессе.

10
27.01.2020, 20:21
  • 1
    Спасибо Циновка. Это - очень положительные стороны, которые я не рассматривал. Мне все еще нравится решение для отладчика, хотя >:) –  fthinker 16.03.2012, 16:58

Процесс ответственен за управление его собственным текущим каталогом. Нет никакого способа изменить его с внешней стороны.

Можно обмануть путем делания изменения процесса его собственным каталогом. Если Вы работаете как корень, или как тот же пользователь как процесс, можно использовать ptrace системный вызов, чтобы сделать весь способ агрессивных вещей на процессе, включая изменение его памяти под его носом и выполнением системных вызовов. Это - то, что используют отладчики.

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

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

#!/bin/sh
if [ $# -ne 2 ]; then
  echo 1>&2 "Usage: $0 PID DIR"
  exit 120
fi
case "$1" in
  *[!0-9]*) echo 1>&2 "Invalid pid \`$1'"; exit 3;;
esac
case "$2" in
  *[\\\"]*)
    echo 1>&2 "Unsupported character in directory name, sorry."
    exit 3;;
esac

gdb -n -pid "$1" -batch -x /dev/stdin <<EOF
call chdir("$2")
detach
quit
EOF
9
27.01.2020, 20:21

Теги

Похожие вопросы