Как заставить pam_exec запускать скрипт в качестве текущего пользователя?

Мне нужно запустить скрипт, когда сеанс открыт, как пользователь, который открывает сеанс.

Я добавил в /etc/pam.d/common-session:

session optional pam_exec.so log=/tmp/test_pam_foo.log /usr/local/bin/test_pam_foo.sh 

Я также попытался активировать параметр seteuid

Основной скрипт /usr/local/bin/test_pam_foo.sh:

 #!/bin/sh id -u >> /tmp/test_pam_foo id -ru >> /tmp/test_pam_foo 

К сожалению, я получаю все время 0 в качестве действительного id и реального id.

Я что-то упускаю?

В качестве альтернативы я знаю существование pam_script , чтобы не путать с pam-скриптом .

Этот pam_script запускается по умолчанию в качестве текущего пользователя и имеет параметр runas который должен запускаться с правами root. Но я хотел бы предоставить привилегии использованию pam libs, которые уже упакованы в моем дистрибутиве (Ubuntu 12.04).

Ну, вы можете иметь /usr/local/bin/test_pam_foo.sh

измените пользователя, так как он находится в переменной среды PAM_USER .

Остерегайтесь заметки на странице руководства pam_exec о пользователе, потенциально контролирующем среду (в зависимости от того, какая служба использует ее (например, su )). Поэтому использование скрипта, вероятно, не очень хорошая идея (даже если вы исправите $PATH и другие проблемные переменные, будут некоторые, о которых вы не можете ничего сделать, например SHELLOPTS или BASH_ENV для сценариев bash).

Лучше всего было бы использовать обертку, которая меняет пользователя перед вызовом вашего скрипта.