Piszę skrypt, który chcę uruchomić bez uprawnień. Chcę, aby błędy napotkane przez skrypt były rejestrowane w pliku dziennika. Nie mam uprawnień, aby napisać do jednego /var/log
. I nie chcę mieć takiego w moim katalogu domowym.
Czy jest miejsce, w którym skrypty przestrzeni użytkownika mogą rejestrować informacje o środowisku wykonawczym? Jaka jest najlepsza praktyka, aby moje informacje z dziennika skryptu /var/log
nie powodowały żadnych potencjalnych problemów z bezpieczeństwem? Waham się ustawić uid / gid w skrypcie.
źródło
syslog
jest to procedura biblioteki C, a C ++ może wywoływać dowolne C przy użyciuextern "C"
. Inne języki często zapewniają ogólne powiązanie z dowolnym C lub powiązanie z określonymi rzeczami, ale zależy to od języka.Jeśli jako zwykły użytkownik zdecydujesz się uruchomić program, naturalnym miejscem dla jego logów jest twój katalog domowy. Twój katalog domowy jest przeznaczony do przechowywania wszystkich plików, niezależnie od tego, czy są to dzienniki uruchomionego programu, czy cokolwiek innego.
Jeśli program jest wykonywany jako część systemu, działając jako typowo dedykowany użytkownik systemu, wówczas znajduje się naturalne miejsce na jego logi
/var/log
. Utwórz podkatalog/var/log/myapp
i nadaj mu odpowiednie uprawnienia, aby aplikacja mogła tam pisać.Jeśli jest to istotne, a system operacyjny na to pozwala, zaznacz plik dziennika jako tylko załącznik. Tylko root może to zrobić. Ma to tę zaletę, że jeśli Twoja aplikacja zostanie przejęta, nie będzie w stanie usunąć przeszłych dzienników, co może być bardzo przydatne do analizy kryminalistycznej tego kompromisu. Będziesz potrzebować interwencji użytkownika root, aby obrócić dziennik:
chown
aby plik dziennika nie mógł być dłużej otwierany przez aplikację,rename
plik dziennika, utwórz nowy plik tylko do dołączania z odpowiednią własnością, a następnie powiadom aplikację o otwarciu nowego pustego pliku .Możesz utworzyć dowolny dziennik aplikacji w dziennikach systemowych, dzwoniąc
logger(1)
lubsyslog(3)
.źródło
Zasadniczo w przypadku demona plik dziennika jest
root
następnie tworzony, a uprawnienia są zmieniane, aby użytkownik nieuprzywilejowany mógł do niego pisać.logrotate
jest następnie konfigurowany w celu zachowania uprawnień podczas rotacji.Jeśli jest to polecenie, a nie demon, zaloguj się do
/tmp
(najlepiej za pomocąmktemp
) i poinformuj użytkownika,STDOUT
dokąd poszedł dziennik.źródło
&
aby nie wyświetlać monitu, ale uruchomienie Dropbox pisze w konsoli. Obecnie przekierowuję dane wyjściowe/dev/null
, ale chciałbym mieć jakiś sposób na debugowanie, jeśli Dropbox nie uruchomi się.daemonize
.chmod
. Zwykle0644
lub0664
własność użytkownika / grupy jest również zmieniana na własność demona, który ma do niego pisać.Jestem pod wrażeniem, że programy przestrzeni użytkownika domyślnie odrzucają dzienniki. Widziałem różne programy zrzucające logi tam, gdzie mają na to ochotę i nigdy nie jest to szczególnie mile widziane w moich systemach; zwykle gromadzi się w jakimś miejscu, które nigdy nie jest zauważane, chyba że / dopóki nie stanie się ogromne.
Wolałbym, gdyby było dla nich określone miejsce, bawię się w moim systemie, próbując znaleźć dla nich stabilne miejsce.
Moim pierwszym pomysłem było użycie
/var/run/user/$UID/log
, ale odkryłem, że w moim systemie jest to montaż TMPFS, niewystarczająco duży lub naprawdę dobry do użycia z logami.Utwórz dla nich miejsce
Ponieważ nie rozumiem / var / run / user wystarczająco dobrze, aby się z nim zintegrować, postanowiłem emulować go ręcznie dla użytkownika 1000.
Polecam trzymanie się Fcc / var / log spc dla struktury w tym folderze, ale specyfikacja jest swobodna, więc nie ma wiele do spełnienia.
Logrotate Config
Nie ma rotacji dzienników w tym katalogu udostępnianym przez twój system, zalecam utworzenie jednego dla twojego systemu:
Poniżej mój poprzedni / var / run / user / 1000 / log post, nie mogę go polecić, chyba że naprawdę wiesz, co robisz (a jeśli tak, to powiedz mi, jak to zrobić!)
może w następujący sposób, ale właśnie to wymyśliłem, ponieważ miało to dla mnie sens.Zintegruj z / var / log / user / 1000:
źródło