分类目录归档:服务架构

“IDE/ATAPI账户没有足够权限”错误解决

当我通过直接拷贝文件的方式迁移Hyper-V虚拟机时遇到了以上错误,错误内容为:IDE/ATAPI 帐户没有足够的权限。

错误原因为直接拷贝文件,之前的文件所有者和现有用户不一致(虽然表面上看起来是同一个用户)。

解决方法:解绑虚拟磁盘后重新绑定即可。步骤如下:

首先打开出问题的虚拟机设置

在IDE控制器0处,删除之前的虚拟硬盘。这里的删除只是断开连接而已,并不是真正的删除文件。删除后点击确定保存。

重新进入设置,在IDE控制器0出添加刚才解绑的虚拟硬盘

选择虚拟硬盘绑定

完成以上步骤后,重新连接虚拟机开机即可。

参考:Hyper-V虚拟机启动报错:IDE/ATAPI 帐户没有足够的权限

.kdb转.pem格式

.kdb格式密钥数据库无法直接导出.pem格式密钥文件。需要先转换为.p12格式。具体转换方法参考: IHS密钥数据库KDB导出证书和私钥

转换成为p12文件后,通过外部工具(例如 OpenSSL)来完成到pem文件的转换。命令如下:

openssl pkcs12 -export -out Cert.p12 -in cert.pem -inkey key.pem -passin pass:root -passout pass:root

参考:将 PEM 证书转换为 PFX/P12 格式 — IBM

IHS密钥数据库KDB导出证书和私钥

IHS生成的证书默认保存在.kdb的密钥数据库文件中。如果需要导出其中的证书和私钥则需要使用ikeyman工具操作。本文将说明如何使用ikeyman工具从.kdb数据库文件中提取证书(.crt)、私钥(.key)、pem密钥文件(.pem)。

第一步:使用ikeyman将.kdb文件导出为.p12格式。

打开.kdb数据库

输入授权密码

点击右侧的Export/Import,选择导出格式为PKCS12

输入导出后的数据库的密码

第二步,从.p12文件中提取出证书和私钥

这一步需要使用openssl工具。安装步骤不在此详述。

导出证书(.crt)

openssl pkcs12 -in key.p12 -out sample.crt -nodes -nokeys

导出私钥(.key)

openssl pkcs12 -in key.p12 -out sample.key -nodes -nocerts

导出为.pem文件

openssl pkcs12 -in key.p12 -out sample.pem -nodes

其他命令可以使用openssl pkcs12 -h查看

常见问题

在导出过程中,遇到如下错误:“restricted policy files”

解决办法:将java sdk 的policy由restricted转换成unrestricted

参考下附参考链接中的第二个。

附,openssl常见证书格式转换示例

# PEM--DER/CER(BASE64--DER编码的转换)
openssl x509 -outform der -in foo.pem -out foo.der

# PEM--P7B(PEM--PKCS#7)
openssl crl2pkcs7 -nocrl -certfile foo.crt -out certificate.p7b -certfile CA.crt

# PEM--PFX(PEM--PKCS#12)
openssl pkcs12 -export -out foo.pfx -inkey foo.key -in foo.crt -certfile CA.crt

# PEM--p12(PEM--PKCS#12)
openssl pkcs12 -export -out foo.p12 -in foo.pem -inkey foo.key

# CER/DER--PEM(编码DER--BASE64)
openssl x509 -inform der -in foo.crt -out foo.pem

# P7B--PEM(PKCS#7--PEM)
openssl pkcs7 -print_certs -in foo.p7b -out foo.pem

# P7B--PFX(PKCS#7--PKCS#12)
openssl pkcs7 -export -in foo.p7b -inkey foo.key -out foo.pfx -certfile CA.crt

# PFX/p12--PEM(PKCS#12--PEM)
# 如无需加密pem中私钥,可以添加选项-nodes
# 如无需导出私钥,可以添加选项-nokeys;
openssl pkcs12 -in foo.pfx -out foo.pem

# PEM BASE64--X.509文本格式
openssl x509 -in foo_base64.pem -text -out foo_x509.pem

# PFX文件中提取私钥(.key)
openssl pkcs12 -in foo.pfx -nocerts -nodes -out foo.key

# PEM--SPC
openssl crl2pkcs7 -nocrl -certfile foo.pem -outform DER -out foo.spc

# PEM--PVK(openssl 1.x开始支持)
openssl rsa -in foo.pem -outform PVK -pvk-strong -out foo.pvk

# PEM--PVK
http://www.drh-consultancy.demon.co.uk/pvk.html

# 对于openssl 1.x之前的版本,可以下载pvk转换器后通过以下命令完成
pvk -in ca.key -out ca.pvk -nocrypt -topvk

参考:

IHS创建自签名证书

IHS创建自签名证书时,需要使用自带的ikeyman程序。此程序需要GUI界面支持,无法直接以CLI方式运行。这里的使用方法为在服务器上安装VNCServer,在本地使用vncviewer软件连接服务器。关于VNC的配置和使用这里不进行详述。

连接完成后,进入bin目录(一般为/opt/IBM/HTTPServer/bin),运行ikeyman

cd /opt/IBM/HTTPServer/bin
./ikeyman

运行后,进入到GUI界面。如果显示乱码,则先修改语言

LANG=en_US.utf-8

下面创建一个新的密钥数据库文件。依次点击菜单栏上的Key Database File -> New… 参考以下配置

Key database type: CMS
File Name: key.kdb
Location: /opt/IBM/HTTPServer/certs/

输入密码加密密钥数据库。创建密钥数据库后,就可以在数据库中新建证书了。在Key database content选框中选择Personal Certificates,然后点击右侧按钮中的New Self-Signed…创建自签名证书。创建对话框中需要填写的信息如下:

  • 密钥标签:输入用于标识数据库中的密钥和证书的描述性注释。
  • 密钥大小:从下拉菜单中选择加密级别。
  • 公共名:输入 Web 服务器的标准主机名作为公共名。示例:www.myserver.com
  • 组织名:输入您的组织名。
  • 可选:组织单元
  • 可选:区域
  • 可选:省/直辖市/自治区
  • 可选:邮政编码
  • 国家或地区:输入国家或地区代码。请至少指定两个字符。示例:US 证书请求文件名或使用缺省名称。
  • 有效期

完成后,点击ok,自签名证书配置就完成了。接下来,在IHS的httpd.conf文件中加上key配置即可

LoadModule ibm_ssl_module modules/mod_ibm_ssl.so
Listen 443
<VirtualHost *:443>
SSLEnable
KeyFile /opt/IBM/HTTPServer/certs/key.kdb
</VirutalHost>

参考:创建自签名证书 – IBM

LAMP Stack for WordPress

Introduction

WordPress is a free and open source blogging platform or content management system based on PHP and MySQL. Currently WordPress is the most popular CMS all over the world, and has 20000 plus plugins to extend its functionality.You can easily create a simple website, blog or complex portals and enterprise websites using WordPress.

WordPress provides lots of features. Some of them are listed below:

  • WordPress is available in more than 70 languages. So you can build a website in a language as your choice.
  • You can easily manage your content, schedule, look and publication using WordPress, and also secure your posts and content with a password.
  • WordPress comes with thousands of themes for you to create a beautiful website. You can also upload your own theme with the click of a button.
  • With the importers feature you can easily import your blog from another website to WordPress.
  • WordPress provides search engine optimization out of the box, and also provides many SEO plugins.

In this tutorial, we will discuss how to install and configure WordPress on a CentOS 7 server.

Requirements

  • A server running CentOS 7.
  • A non-root user with sudo privilege setup on your server.

Getting Started

Update your system with the latest package versions by running the following command:

sudo yum update -y

Once your system is up-to-date, you can proceed to the next step.

Installing LAMP

Before installing WordPress itself, you will need to install the LAMP stack and other required packages on your server.

You can install all the necessary packages with the following command:

sudo yum install httpd mariadb mariadb-server php php-common php-mysql php-gd php-xml php-mbstring php-mcrypt php-xmlrpc unzip wget -y

Once installation is complete, start the Apache and MariaDB services and enable them to start at boot with the following commands:

sudo systemctl start httpd
sudo systemctl start mariadb
sudo systemctl enable httpd
sudo systemctl enable mariadb

Configuring MariaDB for WordPress

By default MariaDB is not secured, so you will need to secure it first. You can do this by running mysql_secure_installation script:

sudo mysql_secure_installation

Answer all the questions as shown below:

Set root password? [Y/n] n
Remove anonymous users? [Y/n] y
Disallow root login remotely? [Y/n] y
Remove test database and access to it? [Y/n] y
Reload privilege tables now? [Y/n] y

Once you have finished, login to MariaDB console with the following command:

mysql -u root -p

Enter your MariaDB root password and hit Enter. After login, create a database for WordPress:

MariaDB [(none)]>CREATE DATABASE wordpress;
MariaDB [(none)]>GRANT ALL PRIVILEGES on wordpress.* to 'user'@'localhost' identified by 'password';
MariaDB [(none)]>FLUSH PRIVILEGES;
MariaDB [(none)]>exit

Installing and Configuring WordPress

You can download the latest version of the WordPress source from the official website. You can get the latest version of WordPress by running the following command:

wget http://wordpress.org/latest.tar.gz

Once download is finished, extract the downloaded file with the following command:

tar -xzvf latest.tar.gz

Next, move the extracted files to the Apache web root directory:

sudo cp -avr wordpress/* /var/www/html/

Next, create a directory for WordPress to store uploaded files:

sudo mkdir /var/www/html/wp-content/uploads

Next, assign proper ownership and permissions to your WordPress files and folders:

sudo chown -R apache:apache /var/www/html/
sudo chmod -R 755 /var/www/html/

Next, you will need to make some changes in the WordPress main configuration file, so it can be connected with the database and user.

First, rename and edit the WordPress main configuration file:

cd /var/www/html/
sudo mv wp-config-sample.php wp-config.php
sudo nano wp-config.php

Change the DB_NAME, DB_USER, and DB_PASSWORD variables as shown below:

define('DB_NAME', 'wordpress');
define('DB_USER', 'user');
define('DB_PASSWORD', 'password');

Save and close the file when you are finished.

Accessing WordPress Web Installation Wizard

Before starting, you will need to allow access to the Apache ports using firewalld.

You can do this by running the following command:

sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload

Next, open your web browser and type the URL http://your-server-ip to finish the installation.

Hyper-V内网穿透策略

在家里弄了一台Hyper-V的小服务器,作为服务器,自然得能从公网访问。所以,就需要进行一些策略配置来达到公网访问(内网穿透)的目的。

基本信息:

  1. Hyper-V服务器一台,部署两台虚拟机
    • Hyper-V: 192.168.1.100
    • Windows: 192.168.1.101
    • CentOS: 192.168.1.102
  2. ASUS路由器一台
    • IP: 192.168.1.1
    • DDNS: zivers.asuscomm.com
  3. 公网域名:zivers.com
  4. 公网服务器一台:111.111.111.111

需求:

  1. 在公网使用SSH连接到CentOS虚拟机
  2. 在公网使用公网域名home.zivers.com访问到CentOS中的网站
  3. 在公网通过远程桌面登录到Hyper-V服务器和Windows虚拟机

下面是内网穿透方法。

路由器绑定

内网穿透的关键在于将域名绑定到路由器,这一步完成后,只需要通过端口转发将路由器端口与服务器内网IP绑定即可。

华硕路由器提供了自己的DDNS域名,如果不是使用华硕路由器,也可以用花生壳或No-IP域名替代,如果也不想用花生壳之流,可以使用ngrok插件实现。由于电信运营商提供的IP一直在变,所以想要访问到路由器,只能通过DDNS这种方式。DDNS实现了从DDNS域名 -> 实际IP的映射,那么我们只需要完成公网域名home.zivers.com -> DDNS域名的映射,实际上就是绑定了公网域名和路由器实际IP。而这一步,仅需要在DNS解析处设置一个CNAME解析记录即可。

端口转发

完成了路由器的绑定,下面只需要在路由器上设置端口规则。比如,在路由器上建立了如下规则:

ROUTER:8081 -> 192.168.1.102:80

这样访问home.zivers.com:8081实际上将会将请求转到192.168.1.102的80端口处理。也能通过端口来区分不同服务器上的同一服务。例如,我需要通过远程桌面分别访问到Hyper-V服务器和Windows虚拟机,这样我就需要开启两个端口转发规则,分别指向这两台服务器的3389端口。

ROUTER:3389 -> 192.168.1.100
ROUTER:3390 -> 192.168.1.101

Nginx反向代理

由于电信运营商封闭了80端口,所以在路由器上直接进行zivers.asuscomm.com:80 -> 192.168.1.102:80的端口转发是行不通的。那么,势必不能用常用的端口,所以我选择了8081,于是就成了:

home.zivers.com:8081 -> zivers.asuscomm.com:8081 -> 192.168.1.102:80

但是,这样也会有一个问题,就是正常用户不会在公网上使用带端口号的域名访问网站,所以这里就需要加上一层Nginx反向代理。将www.zivers.com代理到home.zivers.com:8081。这样只需要在公网访问www.zivers.com实际上访问的就是192.168.1.102:80了。下面是Nginx规则:

server {
    listen 80;
    server_name www.zivers.com;
    location / {
        proxy_pass http://home.zivers.com:8081;
    }
}

Hyper-V虚拟机开机内存占用过高原因

用Hyper-V启动了两台虚拟机,一台Win7,另一台CentOS。但启动后都出现了一个现象,明明是刚启动,但是内存却几乎已经占满。查看任务管理器/TOP,并没有任何应用占用了内存,那么内存究竟是被什么占了呢。

可以看见,两个系统的内存占用率都达到了90%以上。Google后,serverfault上的一帖给出了原因:

You enabled Dynamic Memory. So, while there’s nothing requiring that memory in your VM, the hypervisor asked for the memory back, and received it. To make sure that this memory that the guest OS has released back to the hypervisor isn’t accidentally used (which would cause the guest OS to fault,) the Dynamic Memory integration component (a device driver) in the guest has allocated it. This is why the report shows the memory as allocated.

简单的说就是我在Hyper-V创建虚拟机时启用了动态内存,动态内存的机制是:比如你给虚拟机分配了8G内存,虚拟机实际占用1G,那么剩下的7G就会被Hyper-V服务器回收,回收的这部分也显示为占用,所以就全部被占满了。

参考:Guest VM showing HIGH memory usage when nothing is using the memory

使用Hyper-V建立CentOS虚拟机

首先打开Hyper-V的管理面板

选择虚拟交换机管理器

创建新的外部网络虚拟交换机。之后创建的虚拟机将通过连接到这个虚拟交换机连接外部网络。

下面是我的网络情况

路由器(网关):192.168.50.1
家用PC:192.168.50.2~99
Windows Server(Hyper-V):192.168.50.100
CentOS(虚拟机,桥接到之前创建的虚拟交换机):192.168.50.101

创建好了的网络之后,下面创建虚拟机

选择第一代能够具有更好的兼容性,第二代性能更强。这里我选择的是第一代

网络选择连接到之前创建的虚拟交换机

选择安装镜像

其他的配置按照推荐即可。然后启动服务器完成正常的系统安装步骤,就不再这里详述了。