Bir bash betiğinden gerçekte ne yürüttüğünüzü kontrol etmek için herhangi bir yöntem var mı?
(Örneğin: sizin bash komut çeşitli komutlar çağırıyor Say tar
, mail
, scp
, mysqldump
) ile emin olmak isteyen tar
gerçek, gerçek olan tar
ile belirlenebilir olan root
dosya ve üst dizin sahibi ve yazma izinleri olan tek varlık kullanıcıya ve sahibi /tmp/surprise/tar
olan www-data
veya olmayan bazıları apache2
.
Tabii biliyorum PATH
ve çevre, bunun çalışan bir bash betiğinden ek olarak kontrol edilip edilemeyeceğini merak ediyorum ve eğer öyleyse, tam olarak nasıl?
Örnek: (sözde kod)
tarfile=$(which tar)
isroot=$(ls -l "$tarfile") | grep "root root"
#and so on...
which
ne tar
yapacağını doğru bir şekilde söylememenin yanı sıra ls
, varsa dosya (lar) hakkında yanlış bilgi döndürmek için saldırıya uğrayabilir . Ayrıca grep
yanlış bilgi döndürmek için kesmek olabilir; bunun yerine kabuk eşleştirme kullanılarak önlenebilir, ancak daha sonra kabuk saldırıya uğrayabilir. Ve kabuk type
ilk etapta yanlış sonuçlar vermek için hacklenebilir - veya kabuğun değiştirilebilirliği 50 yıllık işletim sistemlerine kıyasla Unix'in önemli bir yeniliği olduğu için tamamen değiştirilebilir. Bkz. Ken Thompson'ın 1984 Turing adresi. Tamamen kaplumbağalar.
TE
İmzaları olan bir veritabanına sahip olan (yani MD5 sağlama toplamından daha kapsamlı olan Linux - sadece AIX - Güvenilir Yürütme ( ) adında bir bileşeni olan) için bunu yanıtlayamıyorum . TE aktif olduğunda ve bir dosya veritabanındayken seçebilirsiniz Programın çalışıp çalışmadığı veya yalnızca veritabanıyla eşleşmediği konusunda uyarır. Ayrıca, iki ayar daha vardır: TEP
(güvenilir yürütme PATH) ve TLP
(güvenilir KÜTÜPHANE PATH) Yalnızca TEP'deki programlar yürütülebilir ve kitaplıklar yalnızca Linux'ta dizin, TLP'ye dahil edilmiştir.Linux'da size yardımcı olabilecek 'AppArmor' adı verilen bir şey var