[unix] 루트 권한없이 dmidecode 정보를 얻는 방법?

CentOS 시스템에서 다양한 시스템 정보를 표시하는 프로그램을 작성 중입니다. 예를 들어, 프로세서 유형 및 속도 (에서 /proc/cpuinfo), 마지막 부팅 시간 (에서 계산 /proc/uptime), IP 주소 ( ifconfig출력에서) 및 설치된 프린터 목록 ( lpstat출력에서).

현재 프로그램에서 몇 가지 데이터를 얻습니다 dmidecode.

  • 플랫폼 유형 ( dmidecode -s system-product-name)
  • BIOS 버전 ( dmidecode -s bios-version)
  • 실제 메모리 양 ( dmidecode -t17 | grep Size)

이것은 내 프로그램이 루트로 실행되는 경우에만 사용할 수 있습니다 (그렇지 않으면 dmidecode하위 프로세스가 오류와 함께 실패 하기 때문에 /dev/mem: Permission denied). 일반 사용자가 액세스 할 수있는이 정보를 얻는 다른 방법이 있습니까?



답변

방금 CentOS 5 시스템을 확인했습니다.

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

kmem 그룹은 / dev / mem에 대한 읽기 권한 만 가지고 있습니다-BIOS 정보를 얻기위한 쓰기가있는 것 같습니다.

그래서 다른 옵션들 :

  1. sudo 사용
  2. 다른 정보 소스를 사용하십시오 (예 : / proc / meminfo)
  3. dmidecode의 정적 출력을 세계가 읽을 수있는 파일에 쓰는 init-script를 사용하십시오.

답변

에서 제공하는 일부 정보 dmidecode는에서 제공됩니다 /sys/devices/virtual/dmi/id.

다른 정보를 분석하여 얻을 수 있습니다 /proc/cpuinfo, /proc/meminfo또는 /sys/system/node/node0/meminfo.


답변

  1. 에서 사용자로 DMI 정보를 읽을 수 있습니다 /sys/class/dmi/id/. 일련 번호는 포함되지 않습니다 (읽기 위해 루트 권한이 필요함).

    이것은 개인 정보 보호 커널 개발자가 의도 한 동작이라고 생각합니다.

  2. 관련 dmesg: dmesg커널 링 버퍼에 액세스하기위한 명령입니다. 링 버퍼는 버퍼가 “오버플로”될 때 최신 정보가 이전 정보를 덮어 씁니다. 또한 이것은 구문 분석이 불가능한 커널 모듈 디버그 출력을 읽고 있습니다.

  3. 다음을 systemd실행 하여 커널 출력에 액세스하려면 다음을 수행하십시오.

    journalctl --quiet --system --boot SYSLOG_IDENTIFIER=kernel
    
  4. david-homer ‘s and nils ‘ 답변 과 관련하여 : 파일 /dev/mem은 단순히 메모리 정보를 제공하는 것이 아니라 전체 실제 메모리를 사용자 공간에 매핑합니다. 따라서 DMI 메모리 주소를 통해 DMI 메모리 주소에 액세스 할 수 있습니다.

  5. 에 관한 chgrpchmod g+sdmidecode에서 NILS ‘ 대답 : 나는대로이하지 않습니다 일을 추측 의도와 GID를 저장하기 때문에 chmod g+s하지 않습니다 dmidecode그것은 새로운 권한의 사용합니다. dmidecodesetegid액세스하기 전에 효과적인 그룹 ID를 설정 하려면 호출 해야합니다 /dev/mem. 소스 코드에서 판단하면 그렇게 dmidecode하지 않습니다.


답변

dmesg를 사용해보십시오. 일반 사용자 계정으로이 방법으로 원하는 정보를 얻을 수있었습니다.


답변

원격 Linux 시스템에서 정보를 읽는 데 DMIDecode를 사용하고 있으며 아직 이에 대한 해결 방법을 찾지 못했습니다. dmidecode 홈 페이지에서 이에 대해 묻는 통화를 기록했습니다 …

dmidecode -t system 명령을 사용하면 “/ dev / mem : Permission denied”오류가 발생하는데 메모리 정보를 원하지 않기 때문에 문제가됩니다 (제조업체, 모델 및 일련 번호).

SunOS에서 실행되는 smbios 명령은 루트 권한이 없어도이 정보에 적합합니다.

지금은 “최소한 권한을 가진 특정 계정 사용”과 “사용자 루트 자격 증명”이 포함 된 문서를 대체 할 것입니다.


답변

lshal 동일한 정보를 많이 포함하며 루트 권한이 필요하지 않습니다.


답변

@mtneagle이 다운 투표를 한 이유는 확실하지 않습니다.

OP가 원하는 세 가지 항목은 다음과 같습니다.

플랫폼 유형 ( dmidecode -s system-product-name)

BIOS 버전 ( dmidecode -s bios-version)

실제 메모리 양 ( dmidecode -t17 | grep Size)

우리는 이것들 각각을 얻을 수 있습니다 :

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'

(또는 적어도 내가 가지고있는 4 개의 다른 하드웨어 서버에서 작동하며 Xen 게스트의 BIOS 또는 서버 유형에 대해서는 아무것도 반환하지 않았습니다.)

내가 분명한 것을 놓친 적이 있습니까?


업데이트 : 내가 놓친 명백한 점을 지적 한 @Ruslan에게 감사드립니다.

인용 :

네 당신이 그랬어요. 커널 메시지는 링 버퍼에 저장됩니다. 너무 많은 줄이 인쇄되면 첫 줄이 삭제됩니다.

따라서 컴퓨터가 몇 주 동안 작동하고 매일 매일 일시 중지 / 다시 시작한 경우 여기에서 grep하는 정보가 더 이상 버퍼에 없을 가능성이 높습니다.

(여기서 가동 시간이 18 일인 상황이 있습니다.) 조사해 보는 것이 좋습니다. /var/log/kern.log

같은 것 grep DMI: /var/log/kern.log | tail -n1