openstack认证服务(认证组件)3_openstack 认证服务-程序员宅基地

技术标签: linux  服务器  openstack  

认证服务的作用

1.认证服务,因为所有服务(组件)的调用的需要通过认证服务。
2.目录服务的功能,目录服务它存了所有组件的API的连接端点,它提供整个Openstack的集群的用户认证授权,然后其余服务连接时需要申请什么资源,都要经过这个服务的认证,获取权限后,连接时的连接信息location就在这个的目录服务中,一旦授权通过,就会把服务的连接端点传给它。

服务的搭建

[root@controller ~]# mysql -uroot -p
MariaDB [(none)]> CREATE DATABASE keystone;要部署这个服务,就要在数据库创建这个服务的数据库。
MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' \
    ->   IDENTIFIED BY 'keystone';
Query OK, 0 rows affected (0.00 sec)    授权,授予所有权限给keyston这个用户,密码和用户保持一致
MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%'    IDENTIFIED BY 'keystone';
允许所有主机访问,这个用户可以远程也可以本机登陆

测试这个用户

[root@controller ~]# mysql -u keystone -p
MariaDB [(none)]> 

可以进来就没问题了

[root@controller ~]#  openssl rand -hex 10  生成随即的密钥
7480f9abeecdbc0abb33
因为keystone这个服务本身就是作认证授权的,那么默认情况下这个里面没有任何的用户,我们怎么样认证授权,所以需要给一个初始的令牌,admin token,这个就是生成初始令牌的

安装keystone

[root@controller ~]# yum install openstack-keystone httpd mod_wsgi 这个组件将通过Httpd的wsgi来启动
/etc/keystone/keystone.conf 它的主配置文件
[root@controller ~]# grep -v  ^# /etc/keystone/keystone.conf | uniq  以#开头的行做反响过滤

在这里插入图片描述
部分节选,里面没有参数都是配置区域,相关的参数必须到相关的配置区域设置,不能随便加。

在这里插入图片描述

[root@controller ~]# vim  /etc/keystone/keystone.conf

都是#注释的参数,所以一开始反向过滤。
在这里插入图片描述
在这里插入图片描述

[root@controller ~]#  openssl rand -hex 10
81771e79db4a68888816
[root@controller ~]# vim  /etc/keystone/keystone.conf

在这里插入图片描述
里面这里面没有用户,所以我们要做初始的admin token 来做初始的用户添加

[database]
connection = mysql+pymysql://keystone:keystone@controller/keystone 告诉如何连接数据库
连接用mysql数据库如何连接用的python,通过pymysql这个模块连接mysql,连接的用户和密码,controller代表数据库的主机,/keystone 表示访问的数据库,以后同步数据库就是用的这条语句,这条语句告诉我们的keystone如何连接数据库。
:/\[token]
[token]
provider = fernet  指定token的提供者,用的fernet提供令牌
[root@controller ~]# su -s /bin/sh -c "keystone-manage db_sync" keystone 
以keystone用户的身份来同步数据库,这个keystone不是数据库的用户,而是当前keystone的username(操作系统的用户),就是安装这个软件时,它就已经在这个系统创建了这个用户
在执行这个语句时,它会读取你数据库里的连接,就是刚才的databases模块

进入数据库查看

[root@controller ~]# mysql -pwestos
MariaDB [(none)]> use keystone
MariaDB [keystone]> show tables;它已经创建了相应的表结构

操作系统的用户

[root@controller ~]# id keystone
uid=163(keystone) gid=163(keystone) groups=163(keystone)

初始化token

[root@controller keystone]# cd /etc/keystone/ 会在这个目录下生成相应路径
[root@controller keystone]#  keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
[root@controller keystone]# ll
drwx------ 2 keystone keystone    24 Jul 28 23:45 fernet-keys 生成了,权限都是keystone,因为以keystone的用户身份来运行的

配置Apache HTTP 服务

[root@controller keystone]# vim /etc/httpd/conf/httpd.conf

在这里插入图片描述
在http的include目录创建相应的文件,/etc/httpd/conf.d/
复制粘贴,先I,保证在插入模式,否则可能会少比如,sten 5000 因为遇见i才插入。

[root@controller keystone]# vim /etc/httpd/conf.d/wsgi-keystone.conf
Listen 5000       公共端口
Listen 35357      仅限管理员使用

<VirtualHost *:5000>
    WSGIDaemonProcess keystone-public processes=5 threads=1 user=keystone group=keystone display-name=%{
    GROUP}
    WSGIProcessGroup keystone-public
    WSGIScriptAlias / /usr/bin/keystone-wsgi-public
    WSGIApplicationGroup %{
    GLOBAL}
    WSGIPassAuthorization On
    ErrorLogFormat "%{cu}t %M"
    ErrorLog /var/log/httpd/keystone-error.log
    CustomLog /var/log/httpd/keystone-access.log combined

    <Directory /usr/bin>
        Require all granted
    </Directory>
</VirtualHost>

<VirtualHost *:35357>
    WSGIDaemonProcess keystone-admin processes=5 threads=1 user=keystone group=keystone display-name=%{
    GROUP}
    WSGIProcessGroup keystone-admin
    WSGIScriptAlias / /usr/bin/keystone-wsgi-admin
    WSGIApplicationGroup %{
    GLOBAL}
    WSGIPassAuthorization On
    ErrorLogFormat "%{cu}t %M"
    ErrorLog /var/log/httpd/keystone-error.log
    CustomLog /var/log/httpd/keystone-access.log combined

    <Directory /usr/bin>
        Require all granted
    </Directory>
</VirtualHost>

在这里插入图片描述
35357管理员
在这里插入图片描述
5000public

[root@controller keystone]# systemctl enable --now httpd.service
这个服务通过Httpd启动,因为时Python的wsgi模块来启动
[root@controller keystone]# netstat -antlp
tcp6       0      0 :::5000                 :::*                    LISTEN      10608/httpd         
tcp6       0      0 :::35357                :::*                    LISTEN      10608/httpd         
5000 35357 监听了,表示这个这个服务启动成功

服务的配置

[root@controller keystone]# head /etc/keystone/keystone.conf 
[DEFAULT]
admin_token = 81771e79db4a68888816
[root@controller keystone]# export OS_TOKEN=81771e79db4a68888816
[root@controller keystone]# export OS_URL=http://controller:35357/v3
连接的服务35357 API版本v3
[root@controller keystone]# export OS_IDENTITY_API_VERSION=3
[root@controller keystone]# openstack service create --name keystone --description "OpenStack Identity" identity
创建认证服务
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | OpenStack Identity               |
| enabled     | True                             |
| id          | ce0b4dea4ac743889f24f82c8d84919a |
| name        | keystone                         |
| type        | identity                         |
+-------------+----------------------------------+
[root@controller keystone]# openstack service list
+----------------------------------+----------+----------+
| ID                               | Name     | Type     |
+----------------------------------+----------+----------+
| ce0b4dea4ac743889f24f82c8d84919a | keystone | identity |
+----------------------------------+----------+----------+
所有指令 
[root@controller keystone]# openstack service --help
Command "service" matches:
  service create
  service delete
  service list
  service provider create
  service provider delete
  service provider list
  service provider set
  service provider show
  service set
  service show

创建服务,告诉服务连接端点。
所有服务的API连接端点都是public(外部) admin internal(内部)连接

openstack endpoint create --region RegionOne \
>   identity public http://controller:5000/v3
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | d17a00528466490c8f607f3aa159cd1f |
| interface    | public                           |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | ce0b4dea4ac743889f24f82c8d84919a |
| service_name | keystone                         |
| service_type | identity                         |
| url          | http://controller:5000/v3        |
+--------------+----------------------------------+

[root@controller keystone]# openstack endpoint create --region RegionOne \
>   identity internal http://controller:5000/v3
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | a1dff090d3954dfdaf656e93475d7b0c |
| interface    | internal                         |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | ce0b4dea4ac743889f24f82c8d84919a |
| service_name | keystone                         |
| service_type | identity                         |
| url          | http://controller:5000/v3        |
+--------------+----------------------------------+
[root@controller keystone]# openstack endpoint create --region RegionOne \
>   identity admin http://controller:35357/v3
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | b1ed58f13acf463485598d59d7a5779a |
| interface    | admin                            |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | ce0b4dea4ac743889f24f82c8d84919a |
| service_name | keystone                         |
| service_type | identity                         |
| url          | http://controller:35357/v3       |
+--------------+----------------------------------+

创建域、项目、用户和角色(所有信息会存入到数据库中)

你敲的指令都是存入数据库当中
创建默认域default

[root@controller keystone]# openstack domain create --description "Default Domain" default
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | Default Domain                   |
| enabled     | True                             |
| id          | a3fa46c854fb4f17b0ca9c9197b572f4 |
| name        | default                          |
+-------------+----------------------------------+

创建 admin 项目

openstack project create --domain default \
>   --description "Admin Project" admin
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | Admin Project                    |
| domain_id   | a3fa46c854fb4f17b0ca9c9197b572f4 |
| enabled     | True                             |
| id          | 93e8c2ef36d745048542fd3611bf1a4f |
| is_domain   | False                            |
| name        | admin                            |
| parent_id   | a3fa46c854fb4f17b0ca9c9197b572f4 |
+-------------+----------------------------------+

创建 admin 用户

[root@controller keystone]# openstack user create --domain default --password admin admin 非交互式输入一遍密码
如果openstack user create --domain default --password-prompt admin  prompt 交互式输入两遍密码
推荐非交互,因为当忘记密码时,history可以查到第一个的语句就找到密码了,如果交互式找到了也看不到密码
+-----------+----------------------------------+
| Field     | Value                            |
+-----------+----------------------------------+
| domain_id | a3fa46c854fb4f17b0ca9c9197b572f4 |
| enabled   | True                             |
| id        | 5f37738bff6e4777924567132b08ef4f |
| name      | admin                            |
+-----------+----------------------------------+

创建 admin 角色

[root@controller keystone]# openstack role create admin
+-----------+----------------------------------+
| Field     | Value                            |
+-----------+----------------------------------+
| domain_id | None                             |
| id        | 3015c8e7b5b04e2293b18798215988b7 |
| name      | admin                            |
+-----------+----------------------------------+

添加admin角色到 admin 项目和用户上(让admin这个用户作为admin角色以管理员的身份管理admin项目)就是授权,认证授权。

[root@controller keystone]# openstack role add --project admin --user admin admin
这个时候keystone有了第一个用户admin,管理员。

创建service项目

 openstack project create --domain default \
>   --description "Service Project" service
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | Service Project                  |
| domain_id   | a3fa46c854fb4f17b0ca9c9197b572f4 |
| enabled     | True                             |
| id          | 9da33d8309ab4adc8a62f8a29e9a9255 |
| is_domain   | False                            |
| name        | service                          |
| parent_id   | a3fa46c854fb4f17b0ca9c9197b572f4 |
+-------------+----------------------------------+

创建 demo 项目和用户。(创建普通用户)

[root@controller keystone]# openstack project create --domain default \
>   --description "Demo Project" demo
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | Demo Project                     |
| domain_id   | a3fa46c854fb4f17b0ca9c9197b572f4 |
| enabled     | True                             |
| id          | 4d1b36afe45f4a3dbf6d7fb63cbe9bda |
| is_domain   | False                            |
| name        | demo                             |
| parent_id   | a3fa46c854fb4f17b0ca9c9197b572f4 |
+-------------+----------------------------------+

[root@controller keystone]#  openstack user create --domain default --password demo demo
+-----------+----------------------------------+
| Field     | Value                            |
+-----------+----------------------------------+
| domain_id | a3fa46c854fb4f17b0ca9c9197b572f4 |
| enabled   | True                             |
| id        | e4effbf5ec7f4365947cb9471b56e64b |
| name      | demo                             |
+-----------+----------------------------------+

创建 user 角色(普通用户角色)

[root@controller keystone]# openstack role create user
+-----------+----------------------------------+
| Field     | Value                            |
+-----------+----------------------------------+
| domain_id | None                             |
| id        | 267922e9a395422894684faccbb416a6 |
| name      | user                             |
+-----------+----------------------------------+

添加 user角色到 demo 项目和用户(一个普通用户角色和上面对比)

[root@controller keystone]# openstack role add --project demo --user demo user

验证操作

每个token都有过期时间
验证刚才创建的用户是否成功
把一开始初始化的token去掉包括OS_URL admin连接的接口

[root@controller keystone]# unset OS_TOKEN OS_URL

告诉认证用户的域和域名和项目名称是什么,认证用户是admin,想知道通过这个keystone能不能拿到这个连接的token

 openstack --os-auth-url http://controller:35357/v3 \
>   --os-project-domain-name default --os-user-domain-name default \
>   --os-project-name admin --os-username admin token issue
Password: admin
+------------+----------------------------------------------------------------------------------------------------------+
| Field      | Value                                                                                                    |
+------------+----------------------------------------------------------------------------------------------------------+
| expires    | 2021-07-28T18:08:33.919052Z                                                                              |
| id         | gAAAAABhAY8RBpineiPibM4m5xxXIWbMADGqQ5VhLDARHxFEUWAScUM3vug2Ns1Szy7bEgQ6m2PG1YSWT-                       |
|            | IVwSLPzPDbFWVbb46p1TlXSZU0Dxw5XzoCYtue8TRz-WhSWS2D08aVWHMogeQhUJ95IZ1xUYFEO2HNK_yXY-bzbFW5iAHDieFZ3vo    |
| project_id | 93e8c2ef36d745048542fd3611bf1a4f                                                                         |
| user_id    | 5f37738bff6e4777924567132b08ef4f                                                                         |
+------------+----------------------------------------------------------------------------------------------------------+

同理测试普通用户demo

[root@controller keystone]# openstack --os-auth-url http://controller:5000/v3 \
>   --os-project-domain-name default --os-user-domain-name default \
>   --os-project-name demo --os-username demo token issue
Password: 
+------------+----------------------------------------------------------------------------------------------------------+
| Field      | Value                                                                                                    |
+------------+----------------------------------------------------------------------------------------------------------+
| expires    | 2021-07-28T18:13:24.189087Z                                                                              |
| id         | gAAAAABhAZA026nX--eMV1e6CSxpX69JrqOa-KOtM84emnGeqOEgTEzxzX5_c-eBsQM4PHf3E6REAfQfDIcNVX-                  |
|            | l_3oa2JbdMb3Kzx1errSzJCPquSH5yO9OVQYiBvbM3T9VCGZPFqIU4nevu9n-k7ON30Zv8w_NN0wCLfaBw7UtWQ9bb38BbPo         |
| project_id | 4d1b36afe45f4a3dbf6d7fb63cbe9bda                                                                         |
| user_id    | e4effbf5ec7f4365947cb9471b56e64b                                                                         |
+------------+---------------------------------------------------------------------------------------------------------

每次调用token手动打指令太麻烦,所以通过脚本来使用。

创建 OpenStack 客户端环境脚本

专属管理员

[root@controller ~]# vim admin-openrc
export OS_PROJECT_DOMAIN_NAME=default
export OS_USER_DOMAIN_NAME=default
export OS_PROJECT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=admin
export OS_AUTH_URL=http://controller:35357/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2

普通用户脚本

[root@controller ~]# vim demo-openrc
export OS_PROJECT_DOMAIN_NAME=default
export OS_USER_DOMAIN_NAME=default
export OS_PROJECT_NAME=demo
export OS_USERNAME=demo
export OS_PASSWORD=demo
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2

使变量生效

[root@controller ~]# source admin-openrc
[root@controller ~]# openstack user list  执行客户端指令
+----------------------------------+-------+
| ID                               | Name  |
+----------------------------------+-------+
| 5f37738bff6e4777924567132b08ef4f | admin |
| e4effbf5ec7f4365947cb9471b56e64b | demo  |
+----------------------------------+---------+

[root@controller ~]# openstack project list
+----------------------------------+---------+
| ID                               | Name    |
+----------------------------------+---------+
| 4d1b36afe45f4a3dbf6d7fb63cbe9bda | demo    |
| 93e8c2ef36d745048542fd3611bf1a4f | admin   |
| 9da33d8309ab4adc8a62f8a29e9a9255 | service |
+----------------------------------+---------+

[root@controller ~]# openstack endpoint list  服务连接端点,每种服务都对应内部外部和管理员。
+------------------------+-----------+--------------+--------------+---------+-----------+------------------------+
| ID                     | Region    | Service Name | Service Type | Enabled | Interface | URL                    |
+------------------------+-----------+--------------+--------------+---------+-----------+------------------------+
| a1dff090d3954dfdaf656e | RegionOne | keystone     | identity     | True    | internal  | http://controller:5000 |
| 93475d7b0c             |           |              |              |         |           | /v3                    |
| b1ed58f13acf463485598d | RegionOne | keystone     | identity     | True    | admin     | http://controller:3535 |
| 59d7a5779a             |           |              |              |         |           | 7/v3                   |
| d17a00528466490c8f607f | RegionOne | keystone     | identity     | True    | public    | http://controller:5000 |
| 3aa159cd1f             |           |              |              |         |           | /v3                    |
+------------------------+-----------+--------------+--------------+---------+-----------+------------------------+

切换成普通用户

[root@controller ~]# source demo-openrc
[root@controller ~]# openstack user list
You are not authorized to perform the requested action: identity:list_users (HTTP 403) (Request-ID: req-eb863bdd-cb71-443a-a784-b7524ebd26ff)

以后更改信息都要切成管理员用户

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/westos_yanzheng/article/details/119180291

智能推荐

wxWidgets:常用表达式_wxwidget 正则表达式 非数字字符-程序员宅基地

文章浏览阅读282次。wxWidgets:常用表达式wxWidgets:常用表达式不同风味的正则表达式转义Escapes元语法匹配限制和兼容性基本正则表达式正则表达式字符名称wxWidgets:常用表达式一个正则表达式描述字符的字符串。这是一种匹配某些字符串但不匹配其他字符串的模式。不同风味的正则表达式POSIX 定义的正则表达式 (RE) 有两种形式:扩展正则表达式(ERE) 和基本正则表达式(BRE)。ERE 大致是传统egrep 的那些,而 BRE 大致是传统ed 的那些。这个实现增加了第三种风格:高级正则表达式_wxwidget 正则表达式 非数字字符

Java中普通for循环和增强for循环的对比_for循环10万数据需要时间-程序员宅基地

文章浏览阅读3.4k次,点赞5次,收藏11次。Java中普通for循环和增强for循环的对比_for循环10万数据需要时间

学习PCB设计前的知识扫盲_pcb端子设计基础知识-程序员宅基地

文章浏览阅读2.7k次,点赞13次,收藏97次。0.工厂制作PCB线路板流程1.PCB的结构铜层阻焊丝印本质(PCB画电路板到底在画什么)基础工艺指标2.PCB图中的元素元素布局布线叠层设计3.PCB的设计依据原理图原理图元件库4.PCB的设计流程——总结_pcb端子设计基础知识

Python读取Excel内容;将读取的数据转换为list类型便于切片处理;列表的操作方法;pandas处理DataFrame类型数据;pandas操作;Python几种取整的方法_pandas excel list-程序员宅基地

文章浏览阅读4.5k次,点赞5次,收藏19次。Python读取Excel内容;将读取的数据转换为list类型便于切片处理;列表的操作方法;pandas处理DataFrame类型数据_pandas excel list

nginx日志与监控,日志分析_nginx的日志分析-程序员宅基地

文章浏览阅读4.6k次。在分析服务器运行情况和业务数据时,nginx日志是非常可靠的数据来源,而掌握常用的nginx日志分析命令的应用技巧则有着事半功倍的作用,可以快速进行定位和统计。下面是自己在分析nginx日志时常用命令的一些总结。1.利用grep ,wc命令统计某个请求或字符串出现的次数比如我要统计GET /task/showContent接口在某天的调用次数,则可以使用如下命令: cat _nginx的日志分析

ECharts--中国地图(无敌详细)_echarts中国地图-程序员宅基地

文章浏览阅读5.4w次,点赞64次,收藏262次。使用Echarts绘制中国地图,其中地图点信息由JSON文件编写,前端html直接从JSON文件中读取地区数据,渲染到前端即可。详细介绍用到的各个功能!代码直接复制运行即可!_echarts中国地图

随便推点

JVM常用调优参数 ——JVM篇_jvm调优-程序员宅基地

文章浏览阅读1.9w次,点赞50次,收藏366次。JVM常用性能调优参数详解​ 在学习完整个JVM内容后,其实目标不仅是学习了解整个JVM的基础知识,而是为了进行JVM性能调优做准备,所以以下的内容就是来说说JVM性能调优的知识。一、性能调优​ 性能调优包含多个层次,比如:架构调优、代码调优、JVM调优、数据库调优、操作系统调优等等。​ 架构调优和代码调优是JVM调优的基础,其中架构调优是对系统影响最大的。性能调优基本上按照以下步骤进行:明确优化目标发现性能瓶颈性能调优通过监控及数据统计工具获得数据确认是否达到目标二、何时进_jvm调优

三级嵌入式准备(二)_八个gpio引脚最多构成几个按键-程序员宅基地

文章浏览阅读435次,点赞3次,收藏7次。转载来源为https://blog.csdn.net/ReCclay/article/details/79439686 1、嵌入式系统的CPU主要使用的有DSP、ARM以及FPGA。2、DSP适用于数字信号处理的微处理器支持单指令多数据(DIMD)并行处理的指令显著提高音频、视频等数字信号的数据处理效率3、片上系统SOC已成为嵌入式处理器芯片的主流发展趋势它是..._八个gpio引脚最多构成几个按键

OpenStack的容器服务体验-程序员宅基地

文章浏览阅读70次。magnum 是用于 OpenStack 的容器服务。它有以下特点:抽象的容器、节点、服务等集成了用于容器技术的Kubernetes和Docker集成了多租户安全的 Keystone继承了k8s多租户网络安全的 Neutron环境准备在VMware Workstations建台虚拟机,Ubuntu 14.04 LTS,..._openstack 安装好没有容器服务

HDU - 2209 翻纸牌游戏(贪心)_hdu 2209-程序员宅基地

文章浏览阅读420次。 HDU - 2209 翻纸牌游戏 当前的这张牌是否翻转取决于它的前一张牌是否朝上,如果朝上,不翻转,朝下,则翻转,这是贪心的思想,但是,对于第一张牌来说,它的前面没有牌了,所以可以翻转,也可以不翻转,分两种情况来判断,参考的别人的代码 #include&lt;stdio.h&gt;#include&lt;algorithm&gt;#include&lt;string.h&gt;u..._hdu 2209

mysql异常代码c0000005_win7系统因0xc0000005错误导致应用程序无法正常启动的解决方法...-程序员宅基地

文章浏览阅读2k次。很多小伙伴都遇到过win7系统因0xc0000005错误导致应用程序无法正常启动的困惑吧,一些朋友看过网上零散的win7系统因0xc0000005错误导致应用程序无法正常启动的处理方法,并没有完完全全明白win7系统因0xc0000005错误导致应用程序无法正常启动是如何解决的,今天小编准备了简单的解决办法,只需要按照1、右键点击要运行的软件或游戏,在右键菜单中选择“兼容性疑难解答”; 2、让系..._mysql 0xc0000005

UNIX环境高级编程_标准io创建空头文件-程序员宅基地

文章浏览阅读492次。unix环境高级编程笔记_标准io创建空头文件