1. 程式人生 > >使用KVM虛擬機器遇到的問題(持續更新)

使用KVM虛擬機器遇到的問題(持續更新)

1.qemu-kvm、kvm、qemu 和 qemu-system-x86_64四種命令的區別

qemu 和 qemu-system-x86_64:啟動qemu虛擬機器的命令,x86_64為64位系統時使用的命令
qemu-x86_64  僅僅模擬CPU
qemu-system-x86_64 模擬整個PC

qemu-kv和 kvm:如果要開啟kvm支援,需要使用qemu-kvm或者kvm命令,暫時記為兩個命令是等效的

2.用libvirt庫建立虛擬機器時會報錯:internal error unable to start guest: libvir: error : cannot execute binary /usr/bin/qemu-kvm: Permission denied”

通過調研(https://bugzilla.redhat.com/show_bug.cgi?format=multiple&id=523956)得知,這跟selinux有關,但具體原因還不太清楚。
解決方法:將/etc/selinux/config中SELINUX項設為permissive,重啟系統,搞定~

如下是關於selinux的介紹:

幾乎可以肯定每個人都聽說過 SELinux (更準確的說,嘗試關閉過),甚至某些過往的經驗讓您對 SELinux 產生了偏見。不過隨著日益增長的 0-day 安全漏洞,或許現在是時候去了解下這個在 Linux 核心中已經有8年曆史的強制性訪問控制系統(MAC)了。

SELinux 與強制訪問控制系統

SELinux 全稱 Security Enhanced Linux (安全強化 Linux),是 MAC (Mandatory Access Control,強制訪問控制系統)的一個實現,目的在於明確的指明某個程序可以訪問哪些資源(檔案、網路埠等)

強制訪問控制系統的用途在於增強系統抵禦 0-Day 攻擊(利用尚未公開的漏洞實現的攻擊行為)的能力。所以它不是網路防火牆或 ACL 的替代品,在用途上也不重複

舉例來說,系統上的 Apache 被發現存在一個漏洞,使得某遠端使用者可以訪問系統上的敏感檔案(比如 /etc/passwd 來獲得系統已存在使用者),而修復該安全漏洞的 Apache 更新補丁尚未釋出。此時 SELinux 可以起到彌補該漏洞的緩和方案

。因為 /etc/passwd 不具有 Apache 的訪問標籤,所以 Apache 對於/etc/passwd 的訪問會被 SELinux 阻止。

相比其他強制性訪問控制系統,SELinux 有如下優勢:

  • 控制策略是可查詢而非程式不可見的。
  • 可以熱更改策略而無需重啟或者停止服務。
  • 可以從程序初始化、繼承和程式執行三個方面通過策略進行控制。
  • 控制範圍覆蓋檔案系統、目錄、檔案、檔案啟動描述符、埠、訊息介面和網路介面

那麼 SELinux 對於系統性能有什麼樣的影響呢?根據 Phoronix 在 2009 年使用 Fedora 11 所做的橫向比較來看,開啟 SELinux 僅在少數情況下導致系統性能約 5% 的降低

SELinux 是不是會十分影響一般桌面應用及程式開發呢?原先是,因為 SELinux 的策略主要針對伺服器環境。但隨著 SELinux 8年來的廣泛應用,目前SELinux 策略在一般桌面及程式開發環境下依然可以同時滿足安全性及便利性的要求。以剛剛釋出的 Fedora 15 為例,筆者在搭建完整的娛樂(包含多款第三方原生 Linux 遊戲及 Wine 遊戲)及開發環境(Android SDK + Eclipse)過程中,只有 Wine 程式的首次執行時受到 SELinux 預設策略的阻攔,在圖形化的“SELinux 故障排除程式”幫助下,點選一下按鈕就解決了。

瞭解和配置 SELinux

1. 獲取當前 SELinux 執行狀態

getenforce

可能返回結果有三種:EnforcingPermissive 和 Disabled。Disabled 代表 SELinux 被禁用,Permissive 代表僅記錄安全警告但不阻止可疑行為,Enforcing 代表記錄警告且阻止可疑行為。

目前常見發行版中,RHEL 和 Fedora 預設設定為 Enforcing,其餘的如 openSUSE 等為 Permissive。

2. 改變 SELinux 執行狀態

setenforce [ Enforcing | Permissive | 1 | 0 ]

該命令可以立刻改變 SELinux 執行狀態,在 Enforcing 和 Permissive 之間切換,結果保持至關機。一個典型的用途是看看到底是不是 SELinux 導致某個服務或者程式無法執行。若是在 setenforce 0 之後服務或者程式依然無法執行,那麼就可以肯定不是 SELinux 導致的。

若是想要永久變更系統 SELinux 執行環境,可以通過更改配置檔案 /etc/sysconfig/selinux 實現。注意當從 Disabled 切換到 Permissive 或者 Enforcing 模式後需要重啟計算機併為整個檔案系統重新建立安全標籤(touch /.autorelabel && reboot)。

3. SELinux 執行策略

配置檔案 /etc/sysconfig/selinux 還包含了 SELinux 執行策略的資訊,通過改變變數 SELINUXTYPE 的值實現,該值有兩種可能:targeted 代表僅針對預製的幾種網路服務和訪問請求使用 SELinux 保護,strict 代表所有網路服務和訪問請求都要經過 SELinux。

RHEL 和 Fedora 預設設定為 targeted,包含了對幾乎所有常見網路服務的 SELinux 策略配置,已經預設安裝並且可以無需修改直接使用。

若是想自己編輯 SELinux 策略,也提供了命令列下的策略編輯器 seedit 以及 Eclipse 下的編輯外掛 eclipse-slide 。

4. coreutils 工具的 SELinux 模式

常見的屬於 coreutils 的工具如 psls 等等,可以通過增加 Z 選項的方式獲知 SELinux 方面的資訊。

如 ps auxZ | grep lldpad

system_u:system_r:initrc_t:s0 root 1000 8.9 0.0 3040 668 ? Ss 21:01 6:08 /usr/sbin/lldpad -d

如 ls -Z /usr/lib/xulrunner-2/libmozjs.so

-rwxr-xr-x. root root system_u:object_r:lib_t:s0 /usr/lib/xulrunner-2/libmozjs.so

以此類推,Z 選項可以應用在幾乎全部 coreutils 工具裡。

Apache SELinux 配置例項

1. 讓 Apache 可以訪問位於非預設目錄下的網站檔案

首先,用 semanage fcontext -l | grep '/var/www' 獲知預設 /var/www 目錄的 SELinux 上下文:

/var/www(/.*)? all files system_u:object_r:httpd_sys_content_t:s0

從中可以看到 Apache 只能訪問包含 httpd_sys_content_t 標籤的檔案。

假設希望 Apache 使用 /srv/www 作為網站檔案目錄,那麼就需要給這個目錄下的檔案增加 httpd_sys_content_t 標籤,分兩步實現。

首先為 /srv/www 這個目錄下的檔案新增預設標籤型別:semanage fcontext -a -t httpd_sys_content_t '/srv/www(/.*)?' 然後用新的標籤型別標註已有檔案:restorecon -Rv /srv/www 之後 Apache 就可以使用該目錄下的檔案構建網站了。

其中 restorecon 在 SELinux 管理中很常見,起到恢復檔案預設標籤的作用。比如當從使用者主目錄下將某個檔案複製到 Apache 網站目錄下時,Apache 預設是無法訪問,因為使用者主目錄的下的檔案標籤是 user_home_t。此時就需要 restorecon 將其恢復為可被 Apache 訪問的 httpd_sys_content_t 型別:

restorecon -v /srv/www/foo.com/html/file.html

restorecon reset /srv/www/foo.com/html/file.html context unconfined_u:object_r:user_home_t:s0->system_u:object_r:httpd_sys_content_t:s0

2. 讓 Apache 偵聽非標準埠

預設情況下 Apache 只偵聽 80 和 443 兩個埠,若是直接指定其偵聽 888 埠的話,會在 service httpd restart 的時候報錯:

Starting httpd: (13)Permission denied: make_sock: could not bind to address [::]:888

(13)Permission denied: make_sock: could not bind to address 0.0.0.0:888

no listening sockets available, shutting down

Unable to open logs

這個時候,若是在桌面環境下 SELinux 故障排除工具應該已經彈出來報錯了。若是在終端下,可以通過檢視 /var/log/messages 日誌然後用 sealert -l加編號的方式檢視,或者直接使用 sealert -b 瀏覽。無論哪種方式,內容和以下會比較類似:

SELinux is preventing /usr/sbin/httpd from name_bind access on the tcp_socket port 888.

***** Plugin bind_ports (92.2 confidence) suggests *************************

If you want to allow /usr/sbin/httpd to bind to network port 888

Then you need to modify the port type.

Do

# semanage port -a -t PORT_TYPE -p tcp 888

`where PORT_TYPE is one of the following: ntop_port_t, http_cache_port_t, http_port_t.`

***** Plugin catchall_boolean (7.83 confidence) suggests *******************

If you want to allow system to run with NIS

Then you must tell SELinux about this by enabling the 'allow_ypbind' boolean.

Do

setsebool -P allow_ypbind 1

***** Plugin catchall (1.41 confidence) suggests ***************************

If you believe that httpd should be allowed name_bind access on the port 888 tcp_socket by default.

Then you should report this as a bug.

You can generate a local policy module to allow this access.

Do

allow this access for now by executing:

# grep httpd /var/log/audit/audit.log | audit2allow -M mypol

# semodule -i mypol.pp

可以看出 SELinux 根據三種不同情況分別給出了對應的解決方法。在這裡,第一種情況是我們想要的,於是按照其建議輸入:

semanage port -a -t http_port_t -p tcp 888

之後再次啟動 Apache 服務就不會有問題了。

這裡又可以見到 semanage 這個 SELinux 管理配置工具。它第一個選項代表要更改的型別,然後緊跟所要進行操作。詳細內容參考 Man 手冊

3. 允許 Apache 訪問建立私人網站

若是希望使用者可以通過在 ~/public_html/ 放置檔案的方式建立自己的個人網站的話,那麼需要在 Apache 策略中允許該操作執行。使用:

setsebool httpd_enable_homedirs 1

setsebool 是用來切換由布林值控制的 SELinux 策略的,當前布林值策略的狀態可以通過 getsebool 來獲知。

預設情況下 setsebool 的設定只保留到下一次重啟之前,若是想永久生效的話,需要新增 -P 引數,比如:

setsebool -P httpd_enable_homedirs 1

總結

希望通過這一個簡短的教程,掃除您對 SELinux 的誤解甚至恐懼,個人感覺它並不比 iptables 策略複雜。如果希望您的伺服器能有效抵擋 0-day 攻擊時,那麼 SELinux 或許就是一個值得考慮的緩和方案。


3.讓命令提交後不受本地關閉終端視窗/網路斷開連線的干擾

4.配置了網絡卡檔案,但ifconfig時顯示的資訊不對

解決方法:關閉服務NetworkManager

5.編譯動態庫時遇到relocation R_X86_64_32 against `a local symbol'的錯誤  

編譯動態庫時遇到如下錯誤:
...
... relocation R_X86_64_32 against `a local symbol' can not be used when making a shared object; recompile with -fPIC
... could not read symbols: Bad value
解決辦法編譯器已經提示了:recompile with -fPIC
但是我們應該重新編譯誰帶上這個引數呢?經過我幾番折騰,發現如下情況:
1、編譯.o檔案的時候,沒有加引數-fPIC,這問題個在gcc version 3.4.6版本沒有發生,可能那個編譯器預設都給加上吧。
2、當前程式中有用到某個靜態庫,那個靜態庫編譯.o檔案的時候沒有加上-fPIC(靜態庫其實就是.o檔案打包)。補充一點:我發現手寫Makefile時即使不加-fPIC也沒有這個問題,這一點很鬱悶,這個只在用automake工具編譯出.a檔案時才出現過。

6."error while loading shared libraries: xxx.so.x" 錯誤的原因和解決辦法

一般我們在Linux下執行某些外部程式的時候可能會提示找不到共享庫的錯誤, 比如:

tmux: error while loading shared libraries: libevent-1.4.so.2: cannot open shared object file: No such file or directory

原因一般有兩個, 一個是作業系統裡確實沒有包含該共享庫(lib*.so.*檔案)或者共享庫版本不對, 遇到這種情況那就去網上下載並安裝上即可. 
另外一個原因就是已經安裝了該共享庫, 但執行需要呼叫該共享庫的程式的時候, 程式按照預設共享庫路徑找不到該共享庫檔案. 
所以安裝共享庫後要注意共享庫路徑設定問題, 如下:
1) 如果共享庫檔案安裝到了/lib或/usr/lib目錄下, 那麼需執行一下ldconfig命令
ldconfig命令的用途, 主要是在預設搜尋目錄(/lib和/usr/lib)以及動態庫配置檔案/etc/ld.so.conf內所列的目錄下, 搜尋出可共享的動態連結庫(格式如lib*.so*), 進而創建出動態裝入程式(ld.so)所需的連線和快取檔案. 快取檔案預設為/etc/ld.so.cache, 此檔案儲存已排好序的動態連結庫名字列表. 
2) 如果共享庫檔案安裝到了/usr/local/lib(很多開源的共享庫都會安裝到該目錄下)或其它"非/lib或/usr/lib"目錄下, 那麼在執行ldconfig命令前, 還要把新共享庫目錄加入到共享庫配置檔案/etc/ld.so.conf中, 如下:
cat /etc/ld.so.conf
include ld.so.conf.d/*.conf
echo "/usr/local/lib" >> /etc/ld.so.conf
# ldconfig
3) 如果共享庫檔案安裝到了其它"非/lib或/usr/lib" 目錄下,  但是又不想在/etc/ld.so.conf中加路徑(或者是沒有許可權加路徑). 那可以export一個全域性變數LD_LIBRARY_PATH, 然後執行程式的時候就會去這個目錄中找共享庫. 
LD_LIBRARY_PATH的意思是告訴loader在哪些目錄中可以找到共享庫. 可以設定多個搜尋目錄, 這些目錄之間用冒號分隔開. 比如安裝了一個mysql到/usr/local/mysql目錄下, 其中有一大堆庫檔案在/usr/local/mysql/lib下面, 則可以在.bashrc或.bash_profile或shell里加入以下語句即可:
e
xport LD_LIBRARY_PATH=/usr/local/mysql/lib:$LD_LIBRARY_PATH    

一般來講這只是一種臨時的解決方案, 在沒有許可權或臨時需要的時候使用.
--End--

相關推薦

使用KVM虛擬機器遇到的問題持續更新

1.qemu-kvm、kvm、qemu 和 qemu-system-x86_64四種命令的區別 qemu 和 qemu-system-x86_64:啟動qemu虛擬機器的命令,x86_64為64位系統時使用的命令 qemu-x86_64  僅僅模擬CPU qemu-syst

虛擬機器\物理機上5臺伺服器cloudrea manager5.12大資料平臺搭建持續更新

前言 全文共1.4w字(僅安裝整個大資料平臺,關於cdh manager管理,會單獨記錄)。相比有的地方几十頁的文件已經少了不少,但是還真的比較多。強烈建議多看官方文件,寫得特別詳細,是的,確實有些多。一定要耐心,一定要仔細仔細再仔細。相信我,

Java虛擬機器詳解------JVM引數持續更新

  JVM引數有很多,其實我們直接使用預設的JVM引數,不去修改都可以滿足大多數情況。但是如果你想在有限的硬體資源下,部署的系統達到最大的執行效率,那麼進行相關的JVM引數設定是必不可少的。下面我們就來對這些JVM引數進行詳細的介紹。   JVM引數主要分為以下三種(可以根據書寫形式來區分): 1、標準引

深入理解Java虛擬機器--個人總結持續更新

# 深入理解Java虛擬機器--個人總結(持續更新) **每天按照書本學一點,會把自己的總結思考寫下來,形成輸出,持續更新,立帖為證** ```java -- 2020年7月7日 開始第一次學習 -- 2020年7月8日 今天在百忙Rush B中抽出時間,學了點習,計劃明天把本地方法棧和Java堆看完總結

機器學習課程不完全收錄持續更新

google 趨勢 con ash color mooc tar 業界 積極 機器學習已經火遍全球了,目前幾乎所有科技公司都或多或少都在積極地響應AI的趨勢,但是此時需要培養更多的人工智能和機器學習專家,然而優質的學習資源卻相當匱乏。幾大科技巨頭和業界領軍大神也相應提供了各

github上值得關注的機器學習深度學習大牛持續更新

前言: 因為想搜相關內容發現搜到的基本上都是前端大牛(這可能是由於js是github上最受歡迎的語言),所以打算自己mark一下同時方便他人,於是寫下這篇博文,本文持續更新,如果有童鞋覺得有不錯的賬號也可以評論推薦給我~我也會更新上去~ 大牛:(排名不分先後) 一: Wes McKinn

機器學習專項練習筆記持續更新

##1.卷積神經網路計算尺寸 輸出尺寸=(輸入尺寸-filter尺寸+2*padding)/stride+1 卷積向下取整,池化向上取整 stride=1時,當kernel=3,padding=1或kernel=5,padding=2 卷積前後尺寸不變。 ##2.序列模式挖掘

機器學習/深度學習資源下載合集持續更新...

這篇文章轉載自「譯智社」的成員 —— 林夕的文章機器學習/深度學習資源下載集合(持續更新…)。如果你對人工智慧感興趣,歡迎關注公眾號 —— 譯智社。 從入門到進階,所用到機器學習資料,包括書、視訊、原始碼。文章首發於 Github,若下載資源請跳轉 Github. 文

kvm虛擬機器管理建立、連線

建立虛機、遠端管理kvm虛機、virsh命令列下管理虛機、、kvm通過virsh console 連入虛擬機器   一、建立虛機 1)開啟虛擬化管理器   2)選擇ISO安裝

機器學習面試常見題總結持續更新

1、邏輯迴歸(LR)損失函式為什麼使用最大似然估計而不用最小二乘法?連結:https://www.zhihu.com/question/65350200/answer/266277291首先,機器學習的損失函式是人為設計的,用於評判模型好壞(對未知的預測能力)的一個標準、尺子

Arcengine開發所錯誤解決方案持續更新

錯誤1:ArcGIS無法嵌入互操作型別解決辦法例: 無法嵌入互操作型別“ESRI.ArcGIS.Carto.FeatureLayerClass”。請改用適用的介面 解決: 1、展開當前專案(Project)的“引用”; 2、找到引用的“ESRI.ArcGIS.Cart

2016年計算機視覺&機器學習領域國內重要會議 彙總 持續更新

前言 國內每年都會舉辦很多計算機視覺(Computer Vision,CV)、 機器學習(Machine Learning,ML)領域相關的很多學術會議和研討會等。有一些是收費徵稿的學術會議,有一些是免費不徵稿的研討會;有一些偏重學術研究,有一些偏重應用落地;

機器學習】【深度學習】【人工智慧】【演算法工程師】面試問題彙總持續更新

1. 演算法 【1】動態規劃經典題目總結 2. 資料結構 2.1 陣列和字串 【1】【演算法】刪除一個數組中為0的元素 【2】牛客網線上程式設計專題《劍指offer-面試題34》醜數 【3】牛客網線上程式設計專題《劍指offer-面試題4》替換空格 【4】牛客網線上程

機器學習、深度學習、計算機視覺、自然語言處理及應用案例——乾貨分享持續更新......

機器學習、深度學習、計算機視覺、自然語言處理及應用案例——乾貨分享(持續更新……) GitChat提問碼: 1、機器學習/深度學習 1.1 對抗生成網路GAN 【2017.04.21】 對抗生成網路GAN變種大集合

機器學習、深度學習、計算機視覺、自然語言處理及應用案例——乾貨分享持續更新……

人臉檢測與識別的趨勢和分析  【paper】【GitHub】【全域性/區域性一致影象補全】《Globally and Locally Consistent Image Completion》S Iizuka, E Simo-Serra, H Ishikawa (2017)  【paper】【GitHub】【基

input輸入限制持續更新

pan only bmi pbo length 讀文本 num tom clipboard 1.只讀文本框內容 <!-- 在input裏添加屬性值 readonly --> <input type="text" value="" readonly&g

struts2學習筆記——常見報錯及解決方法匯總持續更新

允許 clip 之間 con ack 技術 ext tro height 操作環境:(1)Tomcat 7.0.72.0      (2)OS Name: Windows 7      (3)JVM Version: 1.8.0_25-b18      (4)e

ScvQ常用的網站持續更新...

sta https tac cto stack 開源中國 更新 title com GitHub:     https://github.com/ScvQ 開源中國:     http://git.oschina.net/ScvQ 博客園:     http://www.c

FPGA設計思想持續更新

流水線 切割 下一個 logs 學習 altera uart lte 問題 一、 流水線設計   將原本一個時鐘周期完成的較大的組合邏輯通過合理的切割後分由多個時鐘周期完成。該部分邏輯運行的時鐘頻率會有明顯對的提升,提高系統的性能用面積換速度   一個流水線設計需要4個步驟

python類相關總結持續更新

屬於 模塊 error pan 類成員 pro 相關 ror __str__ __init__   構造函數 __dict__   vars()函數,獲取命名空間裏面的名稱 __str__   str()函數,輸出成員相關信息的內容 __repr__   repl()函數,