sshd[5589]: ошибка: PAM: pam_open_session(): невозможно создать/удалить запись для указанного сеанса

Esto no está realmente relacionado con las citas, sino con el procesamiento de argumentos.

Considere el ejemplo arriesgado:

find -exec sh -c "something {}" \;
  • Esto es analizado por el shell y dividido en seis palabras :find, -exec, sh, -c,something {}(ya no hay comillas ), ;. No hay nada que ampliar. El shell ejecuta findcon esas seis palabras como argumentos.

  • Cuando findencuentra algo para procesar, digamos foo; rm -rf $HOME, reemplaza {}con foo; rm -rf $HOMEy ejecuta shcon los argumentos sh, -cy something foo; rm -rf $HOME.

  • shahora ve -cy, como resultado, analizasomething foo; rm -rf $HOME(el primer argumento de opción no -)y ejecuta el resultado.

Ahora considere la variante más segura:

find -exec sh -c 'something "$@"' sh {} \;
  • El shell ejecuta findcon los argumentos find, -exec, sh, -c, something "$@", sh, {}, ;.

  • Ahora, cuando findencuentra foo; rm -rf $HOME, reemplaza {}nuevamente y ejecuta shcon los argumentos sh, -c, something "$@", sh, foo; rm -rf $HOME.

  • shve -cy analiza something "$@"como el comando a ejecutar, y shy foo; rm -rf $HOMEcomo los parámetros posicionales(a partir de $0), expande "$@"afoo; rm -rf $HOMEcomo un valor único , y ejecuta somethingcon el argumento único foo; rm -rf $HOME.

Puede ver esto usando printf. Cree un nuevo directorio, ingréselo,y corre

touch "hello; echo pwned"

Ejecutando la primera variante de la siguiente manera

find -exec sh -c "printf \"Argument: %s\n\" {}" \;

produce

Argument:.
Argument:./hello
pwned

mientras que la segunda variante, se ejecuta como

find -exec sh -c 'printf "Argument: %s\n" "$@"' sh {} \;

produce

Argument:.
Argument:./hello; echo pwned

1
06.06.2019, 19:46
1 ответ

Некоторые люди, очевидно, согласились бы с отключением selinux или установкой разрешающего режима в качестве ответа; но тогда всегда найдутся несколько язвительных гуру Linux, которые вмешаются со словами: «Прекратите отключать selinux!» НО ЭТО ВСЕ, ЧТО ОНИ СКАЖУТ! Перестаньте говорить людям «прекратить отключать selinux», ЕСЛИ ВЫ ТАКЖЕ НЕ СКАЗАЕТЕ ИМ РЕШЕНИЕ!

Что ж, я нашел решение этой проблемы, и поскольку мне не удалось найти его нигде в Интернете, я опубликую его здесь. Я следовал руководству Red Hat, которое можно найти здесь .

Могу поспорить, что большинство людей не знают об инструменте audit2allow . Это спасение жизни. Я использовал его, чтобы легко создать загружаемый модуль selinux, и он решил мою проблему, поэтому мне не пришлось отключать selinux. По сути, я только что прошел этапы подключения через SSH, запустив инструмент audit2allow , после чего он автоматически создал модуль. Затем я загрузил модуль, перезагрузился, и все в порядке.

audit2allow -a -M mycertwatch

******************** IMPORTANT ***********************
To make this policy package active, execute:

semodule -i mycertwatch.pp
3
27.01.2020, 23:30

Теги

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