страйс и полкит

Учитывая правильно -сформированный XML-документ, подобный следующему (, измененному из вашего примера):



  
    
      
      
    
  
  
    
      
    
  
  
    
      
    
  

вы можете использовать xmlstarletдля изменения всех атрибутов level, для которых установлено значение DEBUG, на TRACEдля каждого узла logger, чей дочерний узел appender-refимеет атрибут ref, равный logstash, вот так:

$ xmlstarlet ed -u '//logger[appender-ref/@ref = "logstash"]/@level[. = "DEBUG"]' -v 'TRACE' file.xml


  
    
      
      
    
  
  
    
      
    
  
  
    
      
    
  

XPath-запрос, аналогичный что использует choroba , также будет работать:

xmlstarlet ed -u '//logger[@level = "DEBUG"][appender-ref/@ref = "logstash"]/@level' -v 'TRACE' file.xml

1
27.11.2020, 17:30
1 ответ

Strace использует системный вызов ptrace для трассировки процессов.

Из соображений безопасности привилегированная программа, такая как pkexec, использующая механизм setuid , не может использовать эти привилегии, если отслеживающий ее процесс не является корневым (или, в Linux, не имеет SYS_PTRACEили SYS_ADMINвозможность .)

Когда вы запустите strace script.bash, strace успешно отследит оболочку, которая запускает скрипт -, который не имеет дополнительных привилегий -, и не будет отслеживать программы, запускаемые этим скриптом. Поэтому, когда скрипт запускается pkexec, pkexec запускается со всеми привилегиями.

Но strace -f script.bashбудет отслеживать оболочку, которая запускает сценарий , и каждую программу, запускаемую сценарием . Когда скрипт запустится pkexec, у pkexec не будет привилегий setuid, он выдаст сообщение об ошибке и завершит работу.

Один из способов отследить pkexec и все, что он запускает, — запустить strace от имени пользователя root.

Но вы не хотите запускать sudo strace -f script.bash, потому что это запустит скрипт (и pkexec )от имени пользователя root.

Вместо этого подключите strace к сценарию после того, как вы запустите сценарий как обычный пользователь. Измените скрипт следующим образом:

#!/bin/bash
echo please run sudo strace -f -p $$ while this script is doing its read
read -n 1 -r -s reply
if [[ $reply == [Yy] ]]; then
    pkexec "$NAME_INST" "$@"
fi
0
18.03.2021, 22:46

Теги

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