뭘 이런걸..
Intel 및 AMD의 CPU는 CPUID 리프 0x1의 ECX의 비트 31을 하이퍼 바이저 존재 비트로 예약하고 있습니다. 이 비트에 의해 하이퍼 바이저는 게스트 OS에 그 존재를 나타낼 수 있습니다. 하이퍼 바이저는이 비트를설정하여 실제 CPU (모든 기존 CPU와 장래의 CPU)는이 비트를 0으로 설정합니다. 게스트 OS는 31 비트를테스트하여 그 하이퍼 바이저가 가상 머신 내에서 실행되고 있는지를 확인할 수 있습니다.
Intel 및 AMD는 소프트웨어에서 사용할 수 있도록 CPUID 리프 0x40000000 ~ 0x400000FF도 예약하고 있습니다. 하이퍼 바이저는 이러한 리프를 사용하여 하이퍼 바이저에서 가상 머신 내에서 실행되는 게스트 OS에 정보를 전달하기위한 인터페이스를 제공 할 수 있습니다. 하이퍼 바이저 비트는 하이퍼 바이저가 존재하는 것을 의미하며 이러한 추가 소프트웨어 리프를 테스트하는 것이 안전하다는 것을 보여줍니다. VMware는 0x40000000 리프를 하이퍼 바이저 CPUID 정보 리프로 정의합니다. VMware 하이퍼 바이저 코드를 실행함으로써 하이퍼바이저 서명이 있는지 CPUID 정보 리프를 테스트 할 수 있습니다. VMware는 CPUID 리프 0x40000000의 EBX, ECX, EDX에 "VMwareVMware"라는 문자열을 저장합니다.
#include <stdio.h>
#include <string.h>
// https://stackoverflow.com/questions/6491566/getting-the-machine-serial-number-and-cpu-id-using-c-c-in-linux
static inline void cpuid (unsigned int *eax, unsigned int *ebx, unsigned int *ecx, unsigned int *edx)
{
/* ecx is often an input as well as an output. */
asm volatile (
"cpuid"
: "=a" (*eax), "=b" (*ebx), "=c" (*ecx), "=d" (*edx)
: "0" (*eax), "2" (*ecx)
);
}
// https://kb.vmware.com/s/article/1009458
int cpuid_check (void) {
unsigned int eax, ebx, ecx, edx;
char hyper_vendor_id[13];
//cpuid(0x1, &eax, &ebx, &ecx, &edx);
eax = 0x1;
cpuid (&eax, &ebx, &ecx, &edx);
// bit 31 of ecx is set
// 0x8000000 10000 0000 0000 0000 0000 0000 0000 0000
if ( ecx >= 0x80000000 ) {
//cpuid(0x40000000, &eax, &ebx, &ecx, &edx);
eax = 0x40000000;
cpuid (&eax, &ebx, &ecx, &edx);
memcpy (hyper_vendor_id + 0, &ebx, 4);
memcpy (hyper_vendor_id + 4, &ecx, 4);
memcpy (hyper_vendor_id + 8, &edx, 4);
hyper_vendor_id[12] = '\0';
//printf ("This is GuesVM %s\n");
//printf ("##################### %s\n", hyper_vendor_id);
// VMwareVMware
if ( ! strncmp (hyper_vendor_id, "VMware", 6) )
return 0; // Success - running under VMware
// XenVMMXenVMM
else if ( ! strncmp (hyper_vendor_id, "XenVM", 5) )
return 0; // Success - running under Xen
}
return 1;
}
int main (void) {
// if guest vm return 0 and case others, return 1
return cpuid_check ();
}
https://people.redhat.com/~rjones/virt-what/의 virt-what 패키지를 이용하시면 되겠네요.
gwi.kldp.org# conf
gwi.kldp.org(config)# snmp-server community lldpset rw
[root@kill ~]$ snmpwalk -v2c -c lldpset gwi.kldp.org 1.3.6.1.4.1.3955.89.110.1.1.1.0
SNMPv2-SMI::enterprises.3955.89.110.1.1.1.0 = INTEGER: 2
[root@kill ~]$ snmpset -v2c -c kldp gwi.kldp.org 1.3.6.1.4.1.3955.89.110.1.1.1.0 i 1
SNMPv2-SMI::enterprises.3955.89.110.1.1.1.0 = INTEGER: 1
[root@kill ~]$ snmpget -v2c -c kldp gwi.kldp.org 1.3.6.1.4.1.3955.89.110.1.1.1.0
SNMPv2-SMI::enterprises.3955.89.110.1.1.1.0 = INTEGER: 1
gwi.kldp.org# show lldp nei
Port Device ID Port ID System Name Capabilities
------- ----------------- ----------------- ------------------- ------------
3 00:31:b5:c7:64:32 00:31:b5:c7:64:32 netgear.kldp.org H
6 00:36:29:43:61:dc 00:36:29:43:61:dc cicso.kldp.org H
8 00:3e:24:c1:19:64 00:3e:24:c1:19:64 O
gwi.kldp.org#
console# conf
console(config)# snmp-server enable
console(config)# snmp-server community lldpset ro
<VirtaulHost *:80>
ServerName oops.org
ServerAlias www.oops.org
</VirtaulHost>
<IfModule md_module>
MDomain oops.org
MDCertificateAgreement https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf
<VirtaulHost *:443>
ServerName oops.org
ServerAlias www.oops.org
SSLEngine On
</VirtaulHost>
</IfModule>
[root@host ~]# tail -f /var/log/httpd/error_log
[Tue Apr 10 23:53:51.043029 2018] [md:notice] [pid 88797] AH10059: The Managed Domain oops.org has been setup and changes will be activated on next (graceful) server restart.
[root@host ~]# cat /sys/kernel/debug/x86/pti_enabled
1
cat /sys/kernel/debug/x86/ibpb_enabled
1
cat /sys/kernel/debug/x86/ibrs_enabled
1
CentOS 6 의 경우에는 /sys/kernel/debug 를 아래와 같이 mount 해 주어야 합니다.[root@host ~]# mount -t debugfs nodev /sys/kernel/debug
[root@host ~]# echo "1" > /sys/kernel/debug/x86/pti_enabled
[root@host ~]# echo "1" > /sys/kernel/debug/x86/ibpb_enabled
[root@host ~]# echo "1" > /sys/kernel/debug/x86/ibrs_enabled
[root@host ~]# echo "1" > /sys/kernel/debug/x86/pti_enabled
[root@host ~]# echo "0" > /sys/kernel/debug/x86/ibpb_enabled
[root@host ~]# echo "1" > /sys/kernel/debug/x86/ibrs_enabled
[root@host ~]# echo "0" > /sys/kernel/debug/x86/pti_enabled
[root@host ~]# echo "0" > /sys/kernel/debug/x86/ibpb_enabled
[root@host ~]# echo "2" > /sys/kernel/debug/x86/ibrs_enabled
[root@host ~]# echo "0" > /sys/kernel/debug/x86/pti_enabled
[root@host ~]# echo "2" > /sys/kernel/debug/x86/ibpb_enabled
[root@host ~]# echo "1" > /sys/kernel/debug/x86/ibrs_enabled
noibrs noibpb nopti
CentOS 7 3.10.0-693.11.6.el7부터 사용이 가능 합니다. 물론, 이전 커널들은 page table isolate 같은 것을 하지 않았으니 이 기능 자체가 필요 없는 것이고요.
CentOS 6 2.6.32-696.18.7.el6
https://access.redhat.com/articles/3311301 에 업데이트 된 내용이 있습니다.
retp_enabled 이 추가가 되었습니다.
영구적으로 적용하지 않는 옵션은 "spectre_v2=off nopti" 이렇게 kernel parameter에 넣어도 된다고 하는 군요. 링크 페이지 참조 하시기 바랍니다.
retp_enable 는 google이 발표한 성능 저하 없는 spectre retpoline 패치 기능을 의미하는데, gcc 도 같이 업데이트가 되어야 합니다. 단, skylake 에서는 retp 대신에 ibrs 를 사용한다고 되어 있습니다.
즉, CentOS 에서 retp_enable 을 사용하려면, gcc 와 libgcc 도 같이 최신 버전으로 업데이트 되어야 합니다.
안녕 3.2 출시 준비를 마쳤습니다.
일단, CentSO 7.4 업데이트에 해당되는 안녕의 package 들은 이미 repository에 선 반영이 되어 있으며, CentOS 7.4 가 출시되면, annyung-release pacakge가 배포 되면서 공식적으로 AnNyung 3.2 (Aang) 배너로 변경하게 됩니다.
annyung-release-3.2 는 CentOS 7.4가 정식으로 출시되고, 한국 mirror에 sync가 되는 시점에 배포할 예정입니다.
참고할 사항으로는,
안녕 리눅스의 openssl 1.0.1e package들이 deprecated 되어 repository에서 제거 되었습니다. 안녕의 openssl은 HTTP/2 protocol 지원을 위하여
1.0.2의 ALPN 기능을 back porting 하여 제공하였으나, CentOS 7.4 부터 1.0.2k를 지원하므로 더이상 유지할 이유가 없어져 안녕 repository에서
제거가 되었습니다.
또한, 안녕의 openssl package는 CentOS의 package로 업데이트 되는 것을 방지하기 위하여, CentOS의 package보다 상위 버전처럼 하기 위하여 높>은 값의 epoch 버전을 가지고 있습니다. 그러므로 아무런 조치를 하지 않는다면 안녕의 1.0.1e는 CentOS 7.4를 설치하더라도 1.0.2k로 업데이트 >되지 않습니다.
이 문제를 해결하기 위하여, annyung-release-3.2 package에서 이를 보정하도록 되어 있고, CentOS 7.4가 한국 mirror 서버들에 동기화가 되었을>때, annyung-release-3.2를 배포할 예정이므로, CentOS 7.4로 업데이트가 되었다고 해도 annyung-release 3.2가 설치 되어 있지 않으면 여전히 op
enssl 1.0.1e 버전이 유지되오니 참고 하시기 바랍니다.
annyung-release 3.2가 설치 되기 전에, 또는 annyung-release package를 설치하기를 원치 않는 경우에는 다음 명령으로 1.0.2k 로 현시점에 바로
업데이트 할 수 있습니다.
rpm -q openssl | grep "\.an3" >& /dev/null
[ $? -eq 0 ] && yum downgrade "openssl*"
bcdedit /set disabledynamictick yes
Comments List
설정 파일 저장하는 부분의 api declare 가 완전히 변경이 되어 시간이 소요되고 있습니다. iPuTTy에서 설정파일을 파일로 저장하는 기능이 있는데, 이 부분을 완전히 새로 작성해야 할 것 같네요.