Запустите loginhook, но получите UID текущего вошедшего в систему пользователя - PullRequest
1 голос
/ 03 октября 2011

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

В OS X я пытаюсь создать loginhook, который проверит, существует ли файл в папке / usr / share, иесли он не существует, он должен создать пустой файл с названием UID пользователя, который входит в систему.

Например, если мой UID равен 501, при входе в систему сценарий должен проверить,файл с именем «501» существует в / usr / share.Если он не существует, он должен его создать.

Проблема, с которой я сталкиваюсь, заключается в том, что все loginhooks запускаются от имени пользователя root, поэтому, если файл создан, его имя просто "0".

Единственное, что я до сих пор придумал, это:

#!/bin/bash
userID=$(id -u)
if [ ! /usr/share/$userID ]
touch /usr/share/$userID
fi

Ответы [ 2 ]

1 голос
/ 06 октября 2011

С помощью и указаниями Вего я нашел свой ответ. Вего был в основном прав в этом sudo userID=$(id -u $(logname)) будет выдавать 501 (потому что мой UID 501) против 0, который является UID root.

Суть хуков входа в систему, как бы то ни было, заключается в том, что для запуска скрипта используется учетная запись mDNSResponder. Я пришел к такому выводу, потому что после запуска скрипта я получил файл с заголовком «65»; немного покопавшись, и я узнал, какая учетная запись имеет UID 65 на моей машине.

Итак, решение таково: userID=$(id -u $1) и причина этого заключается в том, что согласно статье Apple KB «В сценарии ловушки входа в систему переменная $ 1 возвращает короткое имя пользователя, который входит в систему».

1 голос
/ 04 октября 2011

Попробуйте добавить man 1 logname.

userID=$(id -u $(logname))


# compare
sudo id -u
sudo id -u $(logname)
...