Команда sudo не работает, когда strace прилагается с PID bash

Я беру журналы команды, выполняемые пользователем в выходном файле, добавляя PID BASH в strace .

$ strace -q -f -e execve -p $$ -o <outputFile>

Он работает нормально, и я получаю весь список команд в выходном файле.

Но я столкнулся с другой проблемой. Я не могу запустить команду sudo когда strace прилагается с BASH PID.

Я получаю следующую ошибку:

sudo: effective uid is not 0, is sudo installed setuid root?

Я проверил setuid , установленный на sudo binary

---s--x--x. 1 root root 123832 Mar 22 11:35 /usr/bin/sudo

sudo отлично работает, когда я останавливаю strace .

Это ошибка или есть какая-то техническая причина? Пожалуйста помоги мне с этим.

  • Попытка настроить пользователя sudo
  • Как я могу выполнить любую команду как обычный пользователь без sudo?
  • Файл Sudoers перепутался
  • потерянная способность sudo после изменения модуля pam
  • Защитить папку от sudoers
  • Подробная информация о командах sudo, выполняемых всеми пользователями
  • Как работает sudo (помимо setuid)?
  • Как заставить sudo запомнить мой пароль дольше?
  • 2 Solutions collect form web for “Команда sudo не работает, когда strace прилагается с PID bash”

    Существуют и другие способы регистрации всех команд, выполняемых пользователем. С установленным sysdig можно запустить что-то вроде

     # sysdig "user.name = jdoe and evt.type = execve" 

    регистрировать все вызовы execve(2) jdoe ; опция -p для sysdig может настроить формат вывода и т. д.

    Другой способ – использовать SystemTap который имеет то преимущество, что поддерживается RedHat; здесь мы предполагаем, что jdoe имеет UID 1000 ;

     probe begin { printf("begin trace...\n\n") } probe syscall.execve.return { if (uid() != 1000) next; printf("runs %s[%d]: %s\n", execname(), pid(), cmdline_str()); } 

    это может быть выполнено через что-то вроде

     # stap-prep ... # stap whatyousavedtheaboveas.stp 

    Оба метода, скорее всего, потребуют корректировки, чтобы точно зафиксировать то, что вам нужно, обрабатывать условия ошибки, когда execve не работает, и т. Д. С плюсом стороны sysdig и SystemTap намного эффективнее, чем strace (запустите vmstat 1 и посмотрите, как strace подталкивает контекстные переключатели через крыша при работе).

    В руководстве для strace упоминается, что:

    ОШИБКИ
    Программы, использующие бит setuid, не имеют эффективных прав идентификатора пользователя во время трассировки.

    Хотя я подозреваю, что это больше связано с последствиями безопасности для отладки процесса setuid, чем ошибка. Если я не ошибаюсь, strace использует тот же интерфейс трассировки, что, скажем, gdb , и позволяет, среди прочего, изменять память текущего процесса. Возможность сделать это для процесса, который работает с большей привилегией, чем вы предполагали, будет плохой идеей.

    Interesting Posts

    Swap alt и супер

    удаление `nullok` из system-auth предотвращает любой пароль root

    Как узнать, когда я установил свой дистрибутив?

    linux (ubuntu) графический вход с удаленного компьютера до того, как сеанс войдет в систему

    Как я могу заставить `time` использовать тот же формат, когда присутствует stdin?

    Удалять заголовки и содержимое из плоского файла, если они находятся ниже определенного количества строк

    Началось с Ubuntu, apt-get upgrade, теперь у меня есть Trisquel?

    Перенаправить вывод фонового процесса на пейджер «меньше» после завершения работы не до терминала по умолчанию

    Как сделать снимок экрана в LXDE с помощью scrot и кнопки Print Screen на моей клавиатуре?

    Как получить свой собственный IP-адрес и сохранить его в переменной в сценарии оболочки?

    Как разбить строку на управляющий символ?

    Захват последнего возвращаемого значения в Unix

    Переключатель ISP при сбое подключения (избыточное подключение к Интернету)

    Переменные и типы Bash

    Подключение к серверу для удаленного доступа к компьютеру Linux через графический интерфейс

    Linux и Unix - лучшая ОС в мире.