Kullanıcı alanı programları günlüklerini nereye kaydetmelidir?


23

Ayrıcalıklar olmadan çalıştırmak istediğim bir senaryo yazıyorum. Betiğin karşılaştığı hataların bazı günlük dosyalarına kaydedilmesini istiyorum. Yazma ayrıcalıklarım yok /var/log. Ve bir tane de ana dizinde olmak istemiyorum.

Kullanıcı alanı komut dosyalarının çalışma zamanı bilgilerini kaydedebileceği bir yer var mı? /var/logHerhangi bir potansiyel güvenlik sorunu oluşturmadan komut dosyası günlük bilgilerimin olması için en iyi yöntem nedir ? Senaryoda uid / gid ayarlamakta tereddüt ediyorum.

Yanıtlar:


8

Normal bir kullanıcı olarak / var / log'a yazamazsınız, ancak sorarsanız syslog arka plan programı sizin için yapar. Mesajları standart sistem günlüklerine (örneğin /var/log/syslog) loggerkaydetmek istiyorsanız , 4.4BSD yardımcı programı sisteminizde mevcut olabilir. Debian'a varsayılan olarak kurulur ve bsdutilsDebian türevlerinde pakettedir.

Sistem günlüklerini okumak için ayrıcalıklara ihtiyaç duymanın dezavantajı ve betiğinizin mesajlarının diğer programlardan gelen mesajlarla karıştırılmasının sakıncası ile önceden var olan günlük döndürme, bakım ve izleme araçlarından yararlanabilirsiniz .

$ logger Hello
$ echo Goodbye | logger
$ sudo tail -2 /var/log/syslog
Feb 19 21:16:15 debian-host jander: Hello
Feb 19 21:16:21 debian-host logger: Goodbye

Çeşitli yapılandırma seçenekleri vardır; daha fazla okuyabilirsiniz man logger.


Bu yardımcı program için dil bağları var mı? Uygulamadaki stdout'un her satırı için alt işlemler oluşturmamayı tercih ederim.
ThorSummoner

@ThorSummoner: Gilles'un cevabının dediği gibi syslog, bir C kütüphanesi yordamıdır ve C ++ herhangi bir C kullanarak arayabilir extern "C". Diğer diller genellikle herhangi bir C'ye genel bağlanma veya belirli şeylere bağlanma sağlar, ancak dile bağlıdır.
dave_thompson_085

12

Sıradan bir kullanıcı olarak bir programı çalıştırmaya karar verirseniz, günlüklerinin doğal yeri ana dizininizde olur. Giriş dizininiz, çalıştırdığınız bir programın günlükleri veya başka bir şey olsalar da tüm dosyalarınızı saklamanız içindir.

Program sistemin bir parçası olarak yürütülürse, tipik bir sistem kullanıcısı olarak çalışıyorsa, günlükleri için doğal bir yer bulunur /var/log. Bir alt dizin oluşturun /var/log/myappve uygulamanızın buraya yazabilmesi için uygun izinleri verin.

Alakalıysa ve işletim sisteminiz izin veriyorsa, günlük dosyasını salt okunur olarak işaretleyin. Bunu sadece kök yapabilir. Bu, eğer uygulamanızın tehlikeye atılması durumunda, geçmişin kayıtlarını silemeyecektir, bu da uzlaşmanın adli analizi için çok yararlı olabilir. Günlüğü döndürmek için kökün müdahalesine ihtiyacınız olacak: chownbu nedenle, günlük dosyası artık uygulama tarafından açılmayacak rename, günlük dosyası, uygun mülkiyetine sahip yeni bir sadece son ek dosya oluşturabilir, ardından yeni boş dosyayı açması için uygulamayı bilgilendirin .

Herhangi bir uygulama günlüğünü, çağrı yaparak logger(1)veya sisteme giriş yaparak yapabilirsiniz syslog(3).


4

Genelde bir arka plan programı için günlük dosyası rooto zaman tarafından oluşturulur ve ayrıcalıklı olmayan kullanıcının yazabilmesi için izinler değiştirilir. logrotatedaha sonra rotasyon sırasındaki izinleri korumak için ayarlanır.

Bu bir servist değil bir komut ise, o zaman /tmp(tercihen kullanarak mktemp) STDOUToturum açın ve kullanıcıyı logun nereye gittiği ile bilgilendirin .


İyi bir fikir. ~ / .Profile dosyamda dropbox iblisinin çalışıp çalışmadığını kontrol eden birkaç satır var ve çalışmazsa başlatır. &İstemi tutmamak için bir ekleme yapmayı düşünüyordum , ancak dropbox'ı başlatmak konsola yazıyor. Şu anda bunun çıktısını yönlendiriyorum /dev/null, ancak dropbox başlamazsa hata ayıklamak için bir yol bulmak istiyorum.
Lord Loh.

1
Kontrol edin daemonize.
bahamat

Sadece bilmek için, "izinler değiştirilmez, böylece imtiyazlı olmayan kullanıcı buna yazabilir." Bu sadece chmod 666 tarafından mı yapılıyor? veya bir gruba veya buna benzer birşeye kullanıcı eklemek zorunda mıyım?
Lord Loh.

/ Var / tmp altında, / tmp'den daha iyi bir önyüklemede hayatta kalmak için garanti edilmez .
von

@ LordLoh .: Evet, ile chmod. Genellikle 0644veya 0664kullanıcı / grup sahipliği de kendisine yazılması beklenen arka plan programı ile değiştirilir.
bahamat

3

Kullanıcı alanı programlarının varsayılan olarak günlükleri atması bekleniyor izlenimi altındayım. Çeşitli programların günlükleri istedikleri yere döktüğünü ve sistemime asla hoş gelmediğini; Çok fazla olmadıkça / fark edilmeden asla fark edilmeyen bir yerde inşa etme eğilimi gösterir.

Onlar için kesin bir yer olsaydı tercih ederim, sistemimde onlar için istikrarlı bir yer bulmaya çalışıyorum.

İlk fikrim kullanmaktı /var/run/user/$UID/log, ancak sistemimde, bunun bir TMPFS montajı olduğunu, yeterince büyük olmadığını ya da günlüklerle kullanım için gerçekten iyi olduğunu tespit ettim.

Onlar için bir yer yarat

/ Var / run / kullanıcısını onunla bütünleşecek kadar iyi anlamadığım için, bunu 1000 kullanıcısı için elle taklit etmeyi seçtim.

# mkdir /var/log/user
# install -d /var/log/user/1000 --owner 1000 -g 1000 -m 0700

Bu klasör içindeki yapı için FHS / var / log spc'ye yapıştırılmasını tavsiye ederim , ancak spec serbest biçimli, böylece uyulması gereken çok fazla şey yok.

Logrotate Config

Sisteminiz tarafından sağlanan bu dizinde mevcut günlük döndürme yok, sisteminiz için bir tane oluşturmanızı öneririz:

# /etc/logrotate.d/userlogs

/var/log/user/*/log/*.log 
/var/log/user/*/log/**/*.log
{
        daily
        missingok
        rotate 7
        compress
        notifempty
        nocreate
}

Önceki / var / run / user / 1000 / log yazım aşağıda, ne yaptığınızı gerçekten bilmiyorsanız tavsiye edemem (Ve yaparsanız, bana nasıl yapılacağını da söyleyin!)

belki aşağıdaki gibi, ama bunu daha yeni yaptım çünkü benim için anlamlıydı.

/var/run/user/1000/log/<app>.log
/var/run/user/1000/log/<app>/<context>.log

/ Var / log / user / 1000 ile entegre et:

# Integrate with above /var/run/user, probably a bad idea:
# ln -s /var/log/user/1000/ /var/run/user/1000/log

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.