2012-05-04 11 views
5

Düşük düzeyli öğelerle ilgili kodu yazarım. Güvenilir kod yazmak için çekirdek sembol adreslerini bilmem gerekiyor. Yani Ubuntu kernel-3.0.19'da kullanıcı kipindeyken kallsyms okumaya çalışıyorum. ve bu kullanıcı modunda kallsyms çıkışı. Kullanıcı kipindeki okuma kallimleri

... 00000000 r

nasıl ben kullanıcı modunda bu sorunu çözebilir ... 00000000 r 00000000 r __kstrtab_prepare_kernel_cred __kcrctab_prepare_kernel_cred __ksymtab_prepare_kernel_cred. Ben kök ve her şey yolundayken, ama ihtiyacım olan şey bu değil.

Teşekkürler.

cevap

8

Kök dışı bir kullanıcının gerçek adresleri yerine /proc/kallsyms sıfırları göstermesi kasıtlıdır. Bu güvenlik riskini biraz azaltır.

Ayrıntılar this upstream commit adresinde bulunmaktadır. Ayrıca, /proc/kallsyms'da %pK yazdırma belirtecinin , s_show numaralı belgede nasıl kullanıldığını görmek de sorumludur.

Kök kullanıcı olmadan sembol adreslerini bir şekilde almak hala mümkün. Kök ayrıcalıkları olmaksızın System.map'a erişilemez. /proc/sys/kernel/kptr_restrict'a yazmak için aynı.

+0

'Kök imtiyazları olmadan System.map'e erişilemiyor. RHEL sunucumda bu dosya /boot/System.map -... –

+0

okunmasına izin verilir, distro ve/veya çekirdek sürümüne bağlı olarak, sanırım. System.map, çekirdek işlevlerinin adreslerini içeriyorsa ve varsayılan olarak root olmayan bir kullanıcıya okunabilirse, bu aslında kallsyms'in korunmasını gereksiz kılar. RHEL 6 ise, çekirdeğin/proc/kallsyms'in korunmadığı durumda 2.6.32, IIRC olması muhtemeldir. Bu yüzden okunabilir System.map dosyası, bu durumda güvenlik risklerini artırmaz. – Eugene

+0

Dağıtım tarafından derlenmiş bir çekirdek kullanıyorsanız, uygun System.map için dağıtım arşivlerini görebilirsiniz, değil mi? – domen