Apakah ada metode untuk memeriksa apa yang sebenarnya Anda jalankan dari skrip bash?
Katakanlah bash script Anda memanggil beberapa perintah (misalnya: tar
, mail
, scp
, mysqldump
) dan Anda bersedia untuk memastikan bahwa tar
adalah yang sebenarnya, real tar
, yang ditentukan oleh root
pengguna menjadi file dan direktori induk pemilik satu-satunya dengan hak akses menulis dan bukan sebagian /tmp/surprise/tar
dengan www-data
atau apache2
menjadi pemilik.
Tentu saya tahu tentang PATH
dan lingkungan, saya ingin tahu apakah ini juga dapat diperiksa dari skrip bash yang sedang berjalan dan, jika demikian, bagaimana tepatnya?
Contoh: (pseudo-code)
tarfile=$(which tar)
isroot=$(ls -l "$tarfile") | grep "root root"
#and so on...
which
tidak mengatakan dengan benar apa yang tar
akan dilakukan, seperti dijawab oleh xhienne, ls
dapat diretas untuk mengembalikan info palsu tentang file, jika ada. Juga grep
bisa diretas untuk mengembalikan info palsu; yang bisa dihindari dengan menggunakan pencocokan shell saja, tetapi kemudian shell bisa diretas. Dan shell dapat diretas untuk memberikan hasil yang salah sejak type
awal - atau diganti seluruhnya karena penggantian shell adalah inovasi penting dari Unix dibandingkan dengan OS yang berusia 50 tahun. Lihat alamat Turing 1984 Ken Thompson. Ini kura-kura sepanjang jalan.
TE
) - yang memiliki database dengan tanda tangan (yaitu, lebih luas daripada MD5 checksum. Ketika TE aktif dan file ada dalam database Anda dapat memilih apakah program berjalan - atau hanya memperingatkan bahwa itu tidak cocok dengan database. Selanjutnya, ada dua pengaturan lain: TEP
(PATH eksekusi tepercaya) dan TLP
(PATH LIBrary tepercaya). Hanya program di TEP yang dapat dieksekusi dan perpustakaan hanya boleh dimuat dengan direktori ini termasuk dalam TLP. Di Linux saya ada sesuatu yang disebut 'AppArmor' yang dapat membantu Anda