LINUX.ORG.RU

Залогиниться под рутом в скрипте

 , ,


2

4

Есть удаленный компьютер под Debian Wheezy, на котором:

  • нет ssh,
  • не настроен sudo,
  • у su нет опции -S,
  • остутствует expect и pexpect,
  • при загрузке обновляется репозиторий git и из него выполняется определенный скрипт на Python 3.

Возможно ли с такими ограничениями выполнить определенные действия от рута питоном или создав bash-сценарий и запустив его?
В частности нужно создать правило udev.

Настроить sudo.

Deleted ()

setuid, но нужен бинарник: на скриптах не работает.

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

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

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

Читать умеешь?

нужно создать правило udev

Формулируй задачу

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

run.c

#include <stdlib.h>
#include <unistd.h>

// пишу с телефона, могут быть неточности
int main(int argc, char **argv) {
    setuid(geteuid());

    return system(argv[1]);
}
gcc run.c -o run
chown root:yourgroup run
chmod u+s,g+x,o-x run

./run /path/to/your/script.py

Этот.

KennyMinigun ★★★★★ ()
Последнее исправление: KennyMinigun (всего исправлений: 1)
Ответ на: комментарий от metrokto

да, этот. просто вызываешь setuid(0) от юзера и ты рут. лол

anonymous ()

у тебя рутовый пасс есть, или ты его ломаешь?

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

Ага. Так он и признался, что хакает кого-то.

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

Но это потенциальная дыра в безопасности. По этому делай так только если знаешь, что делаешь, добавь так называемых «sanity checks». А чтоб не велосипедить — настрой sudo.

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

chown root:yourgroup run

Но для такого нужны права этого самого рута...

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

просто питоном, с хоть темже subprocess можно форкать и общаться с чайлдами, зачем expect.
или ремоутшелл поднять, аля телнет.

bl ★★★ ()
Ответ на: Читать умеешь? от metrokto

Re: Читать умеешь?

это не задача. Правило udev создаётся для чего-то. Может тебе puppet подойдёт, например.

anonymous ()

А не проще взять и сам скрипт запустить от рута? По формулировке вроде можно.

DeadEye ★★★★★ ()
Ответ на: комментарий от metrokto
from subprocess import Popen, PIPE
proc = Popen(['su', '--command="mkdir" /proof_of_work'], stdin=PIPE)
proc.communicate('rootpassword')
proc = Popen(['ls', '-la','/proof_of_work'], stdin=PIPE)
bl ★★★ ()
Ответ на: комментарий от bl

Во всех примерах с использованием subprocess.Popen, которые я нашел, используется sudo или su, а в данной версии sudo и su не имеют возможности читать пароль из stdin.

metrokto ★★ ()
Ответ на: комментарий от bl
Python 3.2.3 (default, Feb 20 2013, 17:02:41) 
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from subprocess import Popen, PIPE
>>> proc = Popen(['su', '--command="mkdir" /proof_of_work'], stdin=PIPE)
>>> su: должен запускаться из терминала
metrokto ★★ ()
Ответ на: комментарий от DeadEye

Доступа к компьютеру, кроме как из сценария на питоне нет.

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

Так если у тебя скрипт при загрузке, он и должен запуститься автоматом от рута.

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

Не, сделано так, чтобы запускалось от пользователя.

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

Ну тогда все хитрожопо и обидно. Иди к тому компу и дай по нему молотком. Либо попроси NOPASSWD для своего скрипта.

DeadEye ★★★★★ ()

супермегарешение: позвать администратора

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

Но для такого нужны права этого самого рута...

Ну так ручками поставь. Или у тебя даже рута в ручном режиме нет?

KennyMinigun ★★★★★ ()

А какая проблема поставить pexpect с пользовательскими правами (через setup.py, в смысле)?

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

дык shell у тебя есть? Ну команда system(или как её в питоне?) работает?

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

установи переменную окружения TERM, это должно убедить su, что он таки запущен в нормальном терминале.

provaton ★★★★★ ()

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

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

Подробнее тут. Пользователь может устанавливать модули?

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

Omg. Запустить команду не проблема. Проблема запустить ее от рута.

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

если, по твоим словам, он имеет права root

Это по каким словам? Десять раз уже сказал, пароль рута известен, но скрипт запущен от пользователя.

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

Пользователь может устанавливать модули?

А погуглить?

И собственно, почему нет? Места, где Питон ищет всяко-разно, определяются переменной окружения ($PYTHONPATH, кажется) точно так же, как переменной определяются пути для исполняемостей. И в Дебиане, вроде-бы, ~/.local/lib/python${PYTHON_VERSION}/ есть одно из дефолтных мест.

У setup.py должен быть ключ --user.

Zmicier ★★★★★ ()
Последнее исправление: Zmicier (всего исправлений: 1)
Ответ на: комментарий от provaton

Это на какой системе так? Afaik, нужен tty в каком либо виде, что также легко педалится сабпроцессом.

anonymous ()

Ну крону скажи выполнить скрипт от рута.

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

Спасибо!

Все оказалось весьма просто:

$ pip-3.2 install --user pexpect
import pexpect

child = pexpect.spawn("su -")
child.expect(".*:")
child.send("myPassword\r")
child.expect(".*# ")
child.sendline("command\r")

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

Тогда по-хорошему тебе надо обратиться к администратору.

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