Bu soruyu kendi oturumlarını kaydetmek isteyen bir kişi tarafından sorulmasına rağmen, alternatif bir kullanım durumu, çeşitli kullanıcıların ne yaptığını takip etmek isteyen bir sistem yöneticisi olabilir.
Makinenin kullanıcılarının oturumlarından kayıt yapmakta isteksiz oldukları durumlarda script
, sistem genelinde koşmanın bashrc
uygun olmayacağından korkuyorum .
Gizli kalmak isteyen kullanıcılar sshd'den farklı bir kabuk (örn. zsh
) Açmasını veya yüklenmesini bash --rcfile ___
önlemek için koşmasını isteyerek günlüğü atlayabilir /etc/bash.bashrc
.
Alternatif bir yaklaşım
2008'deki ( arşivlenmiş ) bu kılavuz, bir kullanıcı ssh ile oturum açtığında çalıştırılmasını zorlamak için farklı bir yöntem kullanır script
; bu, kullanıcıların bir genel / özel anahtarla oturum açmasını gerektirir.
Bu, .ssh/authorized_keys
anahtarın önünde , kullanıcının dosyasına bir komut dosyası ekleyerek yapılır.
command="/usr/local/sbin/log-session" ssh-dss AAAAB3NzaC1kc3MAAAEBAMKr1HxJz.....
log-session
( Arşivlenmiş ) Daha sonra komut dosyası çalıştırmak için karar verir /usr/bin/script
kullanıcının oturumunu oturum açmak için.
exec script -a -f -q -c "$SSH_ORIGINAL_COMMAND" $LOGFILE
Kullanıcının eklenen komutu kaldırmasını önlemek için, yöneticinin kullanıcının authorized_keys
dosyasının sahipliğini üstlenmesi gerekir .
chown root:root ~user/.ssh/authorized_keys
Ne yazık ki, bu, kullanıcının kendisine herhangi bir ek anahtar ekleyemeyeceği veya ideal olandan uzak olan bir güvenlik sorunu varsa mevcut anahtarı iptal edemeyeceği anlamına gelir.
Uyarılar
Kullanıcıların ssh oturum açma sırasında SFTP gerçekleştirmelerine izin vermek için sshd'nin varsayılan yapılandırması yaygındır. Bu, kullanıcıların değişiklikler kaydedilmeden dosyaları düzenlemelerini sağlar. Yönetici kullanıcıların bunu yapmasını istemiyorsa, SFTP için bazı günlük kaydını etkinleştirmeli veya hizmeti devre dışı bırakmalıdır. Yine de kullanıcılar terminallerinde böyle bir şey çalıştırarak dosyalarda görünmeyen değişiklikler yapabilirler:
curl "http://users.own.server/server/new_data" > existing_file
Tüm dosya geçmişini kaydeden bir yazma üzerine dosya sistemi kullanarak bu değişiklikleri izlemeniz mümkün olabilir.
Ancak benzer bir numara, kullanıcının komutları oturum açmadan yürütmesine izin verir:
curl "http://users.own.server/server/secret_commands_824" | sh
Bunun kolay bir çözümü olduğunu bilmiyorum. Olasılıklar olabilir:
- Tüm ağ verilerini günlüğe kaydetme (ve daha sonra çözme).
- Tüm sistem çağrılarını günlüğe kaydetme.
Bu tür şeyler auditd ile mümkün olabilir .
Ama yine de ...
Kullanıcı oturumlarının günlüğe kaydedilmesinin yöneticiler için gerçek bir güvenlik sağlaması olası değildir. Varsayılan olarak bir kullanıcı yalnızca kendi dosyalarını değiştirebilir ve sisteme zarar veremez. Kötü niyetli bir kullanıcı ayrıcalıkları yükseltmeyi başardıysa, günlüğü devre dışı bırakabilir ve günlükleri silebilir (yönetici günlükleri yalnızca ek bir şekilde ayrı bir makinede depolanacak şekilde yapılandırmadıysa).
Kullanıcı oturumlarını otomatik olarak kaydeden yöneticiler muhtemelen kullanıcılara bunun yapıldığını bildirmelidir . Bazı yargı bölgelerinde, bu veri toplama biçimi veri veya gizlilik yasalarını ihlal edebilir . Ve en azından, kullanıcıların farkında olmaları için saygılı olur.
Bir yöneticinin, sudo
kullanıcıların oturumlarını günlüğe kaydetmeyle ilgilenmesi daha olasıdır . Bu belki de farklı bir cevapta ya da gerçekten de farklı bir soruda ele alınabilir.
exec
hattın başlangıcını hazırlayın .script -f
aynı kabuk PID'de başlamalıdır .