Kök ayrıcalıkları olmadan dmidecode bilgileri nasıl alınır?


16

Çeşitli sistem bilgilerini görüntüleyen bir program yazıyorum (CentOS sisteminde). Örneğin, işlemci türü ve hızı (başlangıç /proc/cpuinfo), son önyükleme süresi (hesaplanan /proc/uptime), IP adresi ( ifconfigçıkıştan) ve yüklü yazıcıların listesi ( lpstatçıkıştan).

Şu anda, dmidecodeprogramdan birkaç veri elde edilmektedir :

  • Platform türü ( dmidecode -s system-product-name)
  • BIOS sürümü ( dmidecode -s bios-version)
  • Fiziksel bellek miktarı ( dmidecode -t17 | grep Size)

Bunlar yalnızca programım root olarak çalıştırılırsa kullanılabilir (aksi takdirde dmidecodealt işlem bir /dev/mem: Permission deniedhata ile başarısız olur ). Normal bir kullanıcının erişebileceği bu bilgiyi almanın alternatif bir yolu var mı?

Yanıtlar:


4

Ben sadece CentOS 5 sistemimi kontrol ettim - sonra:

chgrp kmem /usr/sbin/dmidecode
chmod g+s /usr/sbin/dmidecode

Dmidecode'u çalıştırmak hala mümkün değildir - kmem grubu / dev / mem için sadece okuma haklarına sahiptir - BIOS bilgisine ulaşmak için bir yazma söz konusu gibi görünüyor.

Diğer bazı seçenekler:

  1. Sudo kullan
  2. Diğer bilgi kaynaklarını kullanın (örneğin / proc / meminfo)
  3. Dmidecode'un statik çıktısını dünya tarafından okunabilir bir dosyaya yazan bir init-script kullanın

6

Tarafından sunulan bazı bilgiler dmidecodeadresinde mevcuttur /sys/devices/virtual/dmi/id.

Diğer bilgiler analiz ile elde edilebilir /proc/cpuinfo, /proc/meminfoya da /sys/system/node/node0/meminfo.


1
İçin +1 /sys/devices/virtual/dmi/id. Platforma özgü birçok bilgi burada mevcuttur. Kullanışlı bir komut dosyası için bkz. Unix.stackexchange.com/questions/75750/… . Sistem bilgisi için, diğer cümleniz de iyidir. İstediğinizi alabilen freehatta hatta birçok yardımcı program vardır htop.
Mike S

6
  1. DMI bilgilerini Kullanıcı olarak altında okuyabilirim /sys/class/dmi/id/. Seri numaraları dahil değildir (kök ayrıcalıkların okunmasını gerektirir).

    Sanırım bu gizlilik bilincine sahip çekirdek geliştiricilerinin davranışlarıdır.

  2. İlgili dmesg: dmesgçekirdek halka arabelleğine erişmek için kullanılan bir komuttur. Halka arabelleği, arabellek "taştığında" eski bilgilerin yenileri tarafından yazıldığını gösterir. Ayrıca bu, hiçbir zaman ayrıştırılamayan çekirdek modülü hata ayıklama çıktısını okumaktır.

  3. Çekirdek çıkışına systemdrun ile erişmek için :

    journalctl --quiet --system --boot SYSLOG_IDENTIFIER=kernel
    
  4. İlgili david-homer en ve Nils' cevabı: Dosya /dev/membasitçe hafıza bilgi vermek, ama userspace içine bütün fiziksel bellek eşleyen etmez. Bu nedenle DMI bellek adreslerine onun aracılığıyla erişebilir (ve çok daha kötü şeyler yapabilir).

  5. İlgili chgrpve chmod g+siçinde dmidecodede Nils' cevabı: Ben bu olmaz işi tahmin amaçlanan ile gid tasarruf çünkü chmod g+syapmaz dmidecodeyeni ayrıcalıkları var kullanın. erişim sağlayabilmesi için etkin grup kimliğini ayarlamak dmidecodeüzere aramak setegidzorundadır /dev/mem. Kaynak kodundan bakarsak, bunu dmidecodeyapmaz.


1
3'e ek: systemdSadece okunmadan sistemlerde çekirdek çıktısına erişmek için /var/log/kern.log. Sistem hala kullanılırken böyle bir dosya yoksa , konumunu bulmak syslogdiçin kern.*girişleri aramayı deneyin /etc/syslog.conf.
Ruslan

5

Dmesg'i deneyin. İstediğim bilgiyi normal bir kullanıcı hesabıyla bu şekilde elde edebildim.


Neden oy verdiğinizden emin değilim. Herkesin görmesi için çözümünüze dayalı daha ayrıntılı bir yanıt verdim. Bence çözümünüz iyi.
wally

4

Uzak Linux sistemlerinden bilgi okumak için DMIDecode kullanıyoruz ve henüz bunun için bir çözüm bulamadık. Bu konuda soran dmidecode ana sayfasında bir çağrı giriş yaptım ...

Dmidecode -t sistemi komutunu kullanmak, "/ dev / mem: İzin reddedildi" hatasını verir, bu da bellek bilgileri istemediğimiz için bir sorundur (sadece üretici, model ve seri numarası).

SunOS üzerinde çalışan smbios komutunun kök ayrıcalığına gerek kalmadan bu bilgiler için iyi çalıştığını fark ettim.

Şimdilik, "belirli bir hesabı en az gerekli ayrıcalıkla kullan" ifadesini "kullanıcı kök kimlik bilgileri" ile değiştireceğim.


4

lshal aynı bilgilerin çoğunu içerir ve kök ayrıcalıkları gerektirmez.


Bunun neden oylandığından emin değilim, onu çırparak bana tam olarak lshal | grep system.productsistem adı için gerekli bilgileri verdi ve hatta dell servis etiketi ilelshal | grep smbios.system.serial
Mark Booth

2
@MarkBooth belki HAL kullanımdan kaldırıldığı ve modern dağıtımlarda gönderilmediği için.
Ruslan

lshalsonunda RHEL7 tamamen gitti ve ben şimdi sudo cat /sys/devices/virtual/dmi/id/chassis_serialDell servis etiketi almak için kullanıyorum , ama bu sadece catsudoers üzerinden erişim var gibi çalışır .
Mark Booth

4

@Mtneagle'ın neden aşağı oy aldığından emin değilim.

OP'nin istediği üç öğe:

Platform türü ( dmidecode -s system-product-name)
BIOS sürümü ( dmidecode -s bios-version)
Fiziksel bellek (dmidecode -t17 | grep Size )

Bunların her birini bu şekilde elde edebiliriz:

dmesg | grep "DMI:" | cut -c "6-" | cut -d "," -f "1"
dmesg | grep "DMI:" | cut -c "6-" | cut -d "," -f "2"
dmesg | grep "Memory:" | cut -d '/' -f '2-' | cut -d ' ' -f '1'

(Ya da en azından sahip olduğum 4 farklı donanım sunucusunda çalışıyor ve Xen misafirindeki BIOS veya sunucu türü için temiz bir şey döndürmüyordu.)

Bariz bir şeyi kaçırdım mı?


Güncelleme: @Ruslan'a özlediğim bariz olana işaret ettiği için teşekkürler

Alıntı yapmak:

Evet sende var. Çekirdek mesajları bir halka arabelleğinde saklanır. Çok fazla satır yazdırıldığında, ilk satırlar silinir.

Dolayısıyla, makineniz birkaç hafta çalıştıysa ve en azından her gün askıya aldınız / devam ettirdiyseniz, burada şansınız olan bilgiler artık arabellekte olmayacaktır.

(Burada 18 günlük çalışma süresiyle böyle bir durumum var.) /var/log/kern.log

Gibi bir şey grep DMI: /var/log/kern.log | tail -n1


3
Evet sende var. Çekirdek mesajları bir halka arabelleğinde saklanır. Çok fazla satır yazdırıldığında, ilk satırlar silinir. Dolayısıyla, makineniz birkaç hafta çalıştıysa ve en azından her gün askıya aldıysanız / devam ettirdiyseniz, buradaki bilgilerin grepartık arabellekte olmayacağı olasılığı yüksektir . (Burada 18 günlük çalışma süresiyle böyle bir durumum var.) Bakmak daha iyi olabilir /var/log/kern.log. Gibi bir şey grep DMI: /var/log/kern.log | tail -n1.
Ruslan

Teşekkürler - umarım aldırmazsınız, cevabınıza (kredi ile) yorumunuzu ekledim.
wally

2

Fiziksel bellek toplam miktarı, sen ayrıştırmak olabilir almak için /proc/meminfo, free,vmstat 0 anda bu konuda görüşmeler beri, vb Ayrıca, çekirdek mesajı tampon ayrıştırmak başladı.

BIOS sürümü daha zor, bunun root olmayan bir kullanıcı olarak mümkün olduğuna inanmıyorum, ancak yanlış olabilirim. (Ve sistem ürün adı) bir yerde, belki de içinde /sys/veya bir yerde maruz kalabilir /proc/, ancak hiçbir şey bulamıyorum.


2
BIOS da belirtilmiştir, bu nedenle çekirdek günlüğüne veya dmesgçok fazla doldurulmamışsa danışın . Örnek çizgi:[ 0.000000] DMI: CLEVO CO. B7130 /B7130 , BIOS 6.00 08/27/2010
Lekensteyn

cat /sys/devices/virtual/dmi/id/bios_version... Voila '! Ama YMMV. Tüm mimarilerin bu yolu yoktur. x86_64 Intel gerekir.
Mike S

2

Linux hizmetlerimiz kök olarak çalışmaz. RPM yükleme sonrası komut dosyasında (kök olarak ÇALIŞIR) bir /etc/sudo.d dosyası yükler ve yürütülebilir dosyalarımızdan birkaçını ayarlarız (örneğin ağ yayını ayrıcalıkları için).

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.