Эскалация предопределенных сценариев ssh для реализации на удаленном компьютере

Эта строка:

root 4056 2388 0 13:00 pts/4 00:00:00 sudo -EH -u someuser nohup sh /tmp/check.sh

сообщает, что sudo...был запущен от имени пользователя root. Это происходит потому, что двоичный файл sudoимеет setuid и ожидается (независимо от того, какой пользователь запросил sudoдля запуска ). Вы пытаетесь выяснить, под каким пользователем выполняется команда, которую затем запустил sudo .

Использование ps -ef|grep -i nohupдало вам только эту единственную строку вывода, потому что когда nohupзапускается, он немедленно отключается после выполнения команды, которую ему было предложено запустить, и тогда в psне осталось nohupвывод в grep для последующего использования.

Если вы вместо этого ищете check.sh, вы получите (по крайней мере )две строки вывода :ту, которую вы уже видите, и еще одну, предназначенную только дляsh /tmp/check.sh:

root        14260 14090  0 13:20 pts/4    00:00:00 sudo -HE -u someuser nohup sh /tmp/check.sh
someuser    14261 14260  0 13:20 pts/4    00:00:00 sh /tmp/check.sh

Это показывает, что shкоманда выполняется как пользователь, в то время как sudoпросто сидит и ждет завершения внутренней команды, продолжая выполняться как root.

0
20.04.2021, 11:22
1 ответ

Вместо того, чтобы иметь программы SUID на узле SSH, лучше подключиться как пользователь с необходимыми привилегиями, но связать определенную команду с этим ключом.

Мы делаем это в файле .ssh/authorized_keysцелевого пользователя. Например,

command="poweroff" ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJQwKcn2AJxNpuzRM/SfJLn0UEXCMmAmI2Xdqeng4nB9 saft@home

Если мы хотим использовать одну из нескольких команд, мы можем использовать сценарий, который интерпретирует $SSH_ORIGINAL_COMMANDсоответствующим образом:

#!/bin/sh

case "$SSH_ORIGINAL_COMMAND" in
  poweroff)
    exec poweroff
    ;;
  firefox)
    killall firefox; systemctl enable apache; exec firefox
    ;;
  *)
    printf '%s\n' >&2 \
        "Unrecognised command `$SSH_ORIGINAL_COMMAND'" \
        'Valid commands are:' \
        ' * poweroff' \
        ' * firefox'
    exit 1
    ;;
esac
0
28.04.2021, 22:51

Теги

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