Update from Sync Service

This commit is contained in:
FNS Service
2026-04-16 00:28:41 +08:00
parent a808ee7fac
commit 5006db1185
221 changed files with 4666 additions and 4145 deletions

View File

@@ -1,7 +1,7 @@
**一、****FirewallD****简介**
FirewallD 提供了支持网络/防火墙区域(zone)定义网络链接以及接口安全等级的动态防火墙管理工具。它支持 IPv4, IPv6 防火墙设置以及以太网桥接,并且拥有运行时配置和永久配置选项。它也支持允许服务或者应用程序直接添加防火墙规则的接口。 以前的 system-config-firewall/lokkit 防火墙模型是静态的,每次修改都要求防火墙完全重启。这个过程包括内核 netfilter 防火墙模块的卸载和新配置所需模块的装载等。而模块的卸载将会破坏状态防火墙和确立的连接。
相反firewall daemon 动态管理防火墙,不需要重启整个防火墙便可应用更改。因而也就没有必要重载所有内核防火墙模块了。不过,要使用 firewall daemon 就要求防火墙的所有变更都要通过该守护进程来实现以确保守护进程中的状态和内核里的防火墙是一致的。另外firewall daemon 无法解析由 ip*tables 和 ebtables 命令行工具添加的防火墙规则。
守护进程通过 D-BUS 提供当前激活的防火墙设置信息,也通过 D-BUS 接受使用 PolicyKit 认证方式做的更改。
**一、****FirewallD****简介**
FirewallD 提供了支持网络/防火墙区域(zone)定义网络链接以及接口安全等级的动态防火墙管理工具。它支持 IPv4, IPv6 防火墙设置以及以太网桥接,并且拥有运行时配置和永久配置选项。它也支持允许服务或者应用程序直接添加防火墙规则的接口。 以前的 system-config-firewall/lokkit 防火墙模型是静态的,每次修改都要求防火墙完全重启。这个过程包括内核 netfilter 防火墙模块的卸载和新配置所需模块的装载等。而模块的卸载将会破坏状态防火墙和确立的连接。
相反firewall daemon 动态管理防火墙,不需要重启整个防火墙便可应用更改。因而也就没有必要重载所有内核防火墙模块了。不过,要使用 firewall daemon 就要求防火墙的所有变更都要通过该守护进程来实现以确保守护进程中的状态和内核里的防火墙是一致的。另外firewall daemon 无法解析由 ip*tables 和 ebtables 命令行工具添加的防火墙规则。
守护进程通过 D-BUS 提供当前激活的防火墙设置信息,也通过 D-BUS 接受使用 PolicyKit 认证方式做的更改。
**二、****FirewallD****特性**
- 守护进程应用程序、守护进程和用户可以通过 D-BUS 请求启用一个防火墙特性。特性可以是预定义的防火墙功能,如:服务、端口和协议的组合、端口/数据报转发、伪装、ICMP 拦截或自定义规则等。该功能可以启用确定的一段时间也可以再次停用。通过所谓的直接接口,其他的服务(例如 libvirt )能够通过 iptables 变元(arguments)和参数(parameters)增加自己的规则。amanda 、ftp 、samba 和 tftp 服务的 netfilter 防火墙助手也被“守护进程”解决了,只要它们还作为预定义服务的一部分。附加助手的装载不作为当前接口的一部分。由于一些助手只有在由模块控制的所有连接都关闭后才可装载。因而,跟踪连接信息很重要,需要列入考虑范围。
@@ -31,11 +31,11 @@ FirewallD 提供了支持网络/防火墙区域(zone)定义网络链接以及接
- Firewalld命令
#进程与状态相关systemctl start firewalld.service #启动防火墙 systemctl stop firewalld.service #停止防火墙 firewall-cmd --state #查看防火墙状态 firewall-cmd --reload #更新防火墙规则 firewall-cmd --state #查看防火墙状态 firewall-cmd --reload #重载防火墙规则 firewall-cmd --list-ports #查看所有打开的端口 firewall-cmd --list-services #查看所有允许的服务 firewall-cmd --get-services #获取所有支持的服务
#区域相关firewall-cmd --list-all-zones #查看所有区域信息 firewall-cmd --get-active-zones #查看活动区域信息 firewall-cmd --set-default-zone=public #设置public为默认区域 firewall-cmd --get-default-zone #查看默认区域信息 firewall-cmd --zone=public --add-interface=eth0 #将接口eth0加入区域public
#接口相关firewall-cmd --zone=public --remove-interface=eth0 #从区域public中删除接口eth0 firewall-cmd --zone=default --change-interface=eth0 #修改接口eth0所属区域为default firewall-cmd --get-zone-of-interface=eth0 #查看接口eth0所属区域
#端口控制firewall-cmd --add-port=80/tcp --permanent #永久添加80端口例外(全局)firewall-cmd --remove-port=80/tcp --permanent #永久删除80端口例外(全局)firewall-cmd --add-port=65001-65010/tcp --permanent #永久增加65001-65010例外(全局)
firewall-cmd --zone=public --add-port=80/tcp --permanent #永久添加80端口例外(区域public)firewall-cmd --zone=public --remove-port=80/tcp --permanent #永久删除80端口例外(区域public)firewall-cmd --zone=public --add-port=65001-65010/tcp --permanent #永久增加65001-65010例外(区域public)
# 进程与状态相关systemctl start firewalld.service #启动防火墙 systemctl stop firewalld.service #停止防火墙 firewall-cmd --state #查看防火墙状态 firewall-cmd --reload #更新防火墙规则 firewall-cmd --state #查看防火墙状态 firewall-cmd --reload #重载防火墙规则 firewall-cmd --list-ports #查看所有打开的端口 firewall-cmd --list-services #查看所有允许的服务 firewall-cmd --get-services #获取所有支持的服务
# 区域相关firewall-cmd --list-all-zones #查看所有区域信息 firewall-cmd --get-active-zones #查看活动区域信息 firewall-cmd --set-default-zone=public #设置public为默认区域 firewall-cmd --get-default-zone #查看默认区域信息 firewall-cmd --zone=public --add-interface=eth0 #将接口eth0加入区域public
# 接口相关firewall-cmd --zone=public --remove-interface=eth0 #从区域public中删除接口eth0 firewall-cmd --zone=default --change-interface=eth0 #修改接口eth0所属区域为default firewall-cmd --get-zone-of-interface=eth0 #查看接口eth0所属区域
# 端口控制firewall-cmd --add-port=80/tcp --permanent #永久添加80端口例外(全局)firewall-cmd --remove-port=80/tcp --permanent #永久删除80端口例外(全局)firewall-cmd --add-port=65001-65010/tcp --permanent #永久增加65001-65010例外(全局)
firewall-cmd --zone=public --add-port=80/tcp --permanent #永久添加80端口例外(区域public)firewall-cmd --zone=public --remove-port=80/tcp --permanent #永久删除80端口例外(区域public)firewall-cmd --zone=public --add-port=65001-65010/tcp --permanent #永久增加65001-65010例外(区域public)
**注:如果某个接口不属于任何****Zone****,那么这个接口的所有数据包使用默认的****Zone****的规则。**
- 命令含义:--zone #作用域--add-port=80/tcp #添加端口,格式为:端口/通讯协议--permanent #永久生效,没有此参数重启后失效
@@ -46,8 +46,8 @@ systemctl start firewalld.service #启动服务systemctl stop firewalld.servi
- 关闭CentOS7自带Firewall启用iptables
yum install iptables-services #安装iptables systemctl stop firewalld.service #停止firewalld systemctl mask firewalld.service #禁止自动和手动启动firewalld systemctl start iptables.service #启动iptablessystemctl start ip6tables.service #启动ip6tables systemctl enable iptables.service #设置iptables自启动 systemctl enable ip6tables.service #设置ip6tables自启动 注:静态防火墙规则配置文件是 /etc/sysconfig/iptables 以及 /etc/sysconfig/ip6tables
作者:风吹我已散博客
链接https://www.jianshu.com/p/a2e8829aa50e
来源:简书
作者:风吹我已散博客
链接https://www.jianshu.com/p/a2e8829aa50e
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

View File

@@ -1,39 +1,39 @@
**NTP****简介:**
NTP是网络时间协议(Network Time Protocol),它是用来同步网络中各个计算机的时间的协议。
在计算机的世界里,时间非常地重要
例如对于火箭发射这种科研活动对时间的统一性和准确性要求就非常地高是按照A这台计算机的时间还是按照B这台计算机的时间
NTP就是用来解决这个问题的NTPNetwork Time Protocol网络时间协议是用来使网络中的各个计算机时间同步的一种协议。
它的用途是把计算机的时钟同步到世界协调时UTC其精度在局域网内可达0.1ms在互联网上绝大多数的地方其精度可以达到1-50ms。
它可以使计算机对其服务器或时钟源如石英钟GPS等等进行时间同步它可以提供高精准度的时间校正而且可以使用加密确认的方式来防止病毒的协议攻击。
 
**环境:**
==系统:====CentOS Linux release 7.4.1708 (Core)== 
==NTP Server====服务器====IP========192.168.0.15==
==NTP Client====客户端====IP========192.168.0.16==
 
**1****、搭建****NTP****服务器**
**1.1****、查看服务器是否安装****ntp****,系统默认安装****ntpdate******
[root@localhost ~]# rpm -qa |grep ntpntpdate-4.2.6p5-28.el7.centos.x86_64ntp-4.2.6p5-28.el7.centos.x86_64
**1.2****、安装****ntp********ntpdate****已经系统默认安装过了**
[root@localhost ~]# yum install -y ntp
**NTP****简介:**
NTP是网络时间协议(Network Time Protocol),它是用来同步网络中各个计算机的时间的协议。
在计算机的世界里,时间非常地重要
例如对于火箭发射这种科研活动对时间的统一性和准确性要求就非常地高是按照A这台计算机的时间还是按照B这台计算机的时间
NTP就是用来解决这个问题的NTPNetwork Time Protocol网络时间协议是用来使网络中的各个计算机时间同步的一种协议。
它的用途是把计算机的时钟同步到世界协调时UTC其精度在局域网内可达0.1ms在互联网上绝大多数的地方其精度可以达到1-50ms。
它可以使计算机对其服务器或时钟源如石英钟GPS等等进行时间同步它可以提供高精准度的时间校正而且可以使用加密确认的方式来防止病毒的协议攻击。
**环境:**
==系统:====CentOS Linux release 7.4.1708 (Core)==
==NTP Server====服务器====IP========192.168.0.15==
==NTP Client====客户端====IP========192.168.0.16==
**1****、搭建****NTP****服务器**
**1.1****、查看服务器是否安装****ntp****,系统默认安装****ntpdate******
[root@localhost ~]# rpm -qa |grep ntpntpdate-4.2.6p5-28.el7.centos.x86_64ntp-4.2.6p5-28.el7.centos.x86_64
**1.2****、安装****ntp********ntpdate****已经系统默认安装过了**
[root@localhost ~]# yum install -y ntp
**1.3****、修改****ntp****配置文件**
[![Exported image](Exported%20image%2020260407231343-0.gif)](javascript:void\(0\);)
[root@localhost ~]# vim /etc/ntp.conf
[root@localhost ~]# vim /etc/ntp.conf
把配置文件下面四行注释掉server 0.cn.pool.ntp.org iburstserver 1.cn.pool.ntp.org iburstserver 2.cn.pool.ntp.org iburstserver 3.cn.pool.ntp.org iburst然后在下面添加这几行server 0.cn.pool.ntp.org iburstserver 1.cn.pool.ntp.org iburstserver 2.cn.pool.ntp.org iburstserver 3.cn.pool.ntp.org iburst
[![Exported image](Exported%20image%2020260407231344-1.gif)](javascript:void\(0\);)
**1.4****、启动****ntp****服务,并开机自启动**
[root@localhost ~]# systemctl start ntpd[root@localhost ~]# systemctl enable ntpd
**1.5****、查询****ntp****是否同步**
[root@localhost ~]# ntpq -p remote refid st t when poll reach delay offset jitter==============================================================================*119.28.206.193 100.122.36.196 2 u 128 128 377 19.711 -0.468 5.363
**1.6****、开启防火墙****ntp****默认端口****udp123**
[root@localhost ~]# firewall-cmd --permanent --zone=public --add-port=123/udpsuccess[root@localhost ~]# firewall-cmd --reloadsuccess
 
**2****、****NTP****客户端配置**
安装的NTP跟上面的步骤一样
**1.4****、启动****ntp****服务,并开机自启动**
[root@localhost ~]# systemctl start ntpd[root@localhost ~]# systemctl enable ntpd
**1.5****、查询****ntp****是否同步**
[root@localhost ~]# ntpq -p remote refid st t when poll reach delay offset jitter==============================================================================*119.28.206.193 100.122.36.196 2 u 128 128 377 19.711 -0.468 5.363
**1.6****、开启防火墙****ntp****默认端口****udp123**
[root@localhost ~]# firewall-cmd --permanent --zone=public --add-port=123/udpsuccess[root@localhost ~]# firewall-cmd --reloadsuccess
**2****、****NTP****客户端配置**
安装的NTP跟上面的步骤一样
**2.1****、修改****ntp****配置文件,将上面的****NTP****服务器作为客户端同步****NTP****时间服务器**
[![Exported image](Exported%20image%2020260407231346-2.gif)](javascript:void\(0\);)
@@ -42,9 +42,9 @@ NTP就是用来解决这个问题的NTPNetwork Time Protocol网络时
[![Exported image](Exported%20image%2020260407231348-3.gif)](javascript:void\(0\);)
**2.2****、与****NTP server****服务器同步一下时间:**
[root@localhost ~]# ntpdate -u 192.168.0.15
**2.3****、查看****ntp****同步状态**
能看到已经成功同步要记得开启ntpd这个服务器
**2.2****、与****NTP server****服务器同步一下时间:**
[root@localhost ~]# ntpdate -u 192.168.0.15
**2.3****、查看****ntp****同步状态**
能看到已经成功同步要记得开启ntpd这个服务器
[root@localhost ~]# ntpq -p remote refid st t when poll reach delay offset jitter============================================================================== 192.168.0.15 119.28.206.193 3 u 7 64 1 0.217 -288085 0.000
\> 来自 \<[https://www.cnblogs.com/Sungeek/p/10197345.html](https://www.cnblogs.com/Sungeek/p/10197345.html)\>
> 来自 <[https://www.cnblogs.com/Sungeek/p/10197345.html](https://www.cnblogs.com/Sungeek/p/10197345.html)>

View File

@@ -1,56 +1,56 @@
openssl req \
-newkey rsa:4096 -nodes -sha256 -keyout ca.key \
-x509 -days 3650 -out ca.crt \
openssl req \
-newkey rsa:4096 -nodes -sha256 -keyout ca.key \
-x509 -days 3650 -out ca.crt \
-subj "/C=CN/ST=Guangdong/L=Guangzhou/O=zhdgps/OU=IT/CN=test/emailAddress=11111111@qq.com"
openssl req \
-newkey rsa:4096 -nodes -sha256 -keyout harbor-registry.key \
-out harbor-registry.csr \
openssl req \
-newkey rsa:4096 -nodes -sha256 -keyout harbor-registry.key \
-out harbor-registry.csr \
-subj "/C=CN/ST=Guangdong/L=Guangzhou/O=zhdgps/OU=IT/CN=10.10.200.175/emailAddress=974418136@qq.com"
echo subjectAltName = IP:10.10.200.175 \> extfile.cnf
echo subjectAltName = IP:10.10.200.175 > extfile.cnf
openssl x509 -req -days 3650 -in harbor-registry.csr -CA ca.crt -CAkey ca.key -CAcreateserial -extfile extfile.cnf -out harbor-registry.crt
==因为Harbor发布时默认并不包含certificates并使用http来提供registry请求服务。然而我们建议在实际的生产环境中还是要使用安全的https。Harbor有一个Nginx实例以作为其他所有服务的反向代理。可以使用prepare脚本来配置Nginx以支持https。==
**1. 停止Harbor**
==上一章我们使用的是Harbor默认的http方式工作这里我们首先将Harbor停止并删除掉原有的一些数据以恢复到一个干净的环境==
==# docker-compose down -v========# ls /data/*========# rm -rf /data/database========# rm -rf /data/registry========# rm -rf /data/*========# rm -rf /var/log/harbor*========#== ====
==注意可能是因为目前Harbor工作负载过重导致上面调用====docker-compose down -v====经常会失败,可用如下方式来停止:==
==# docker ps | grep -v CONTAINER | grep -v docs | awk '{print $1'} | xargs docker stop========# docker ps | grep -v CONTAINER | grep -v docs | awk '{print $1'} | xargs docker rm -vf==
**2. 获取证书**
==这里假设你的registry主机名为====reg.yourdomain.com====并且通过DNS记录能够找到你运行Harbor的主机。首先你应该从CA处获得一个certificate。该certificate通常包含一个====a.crt====文件和一个====a.key====文件,例如:====yourdomain.com.crt====以及====yourdomain.com.key====。==
==在测试或开发环境下你也许会使用一个自签名证书而不是从CA那里获取。可以通过如下的命令产生你自己的证书==
**2.1 创建自签名根证书**
==可以通过如下的方式来产生一个====私钥====及====自签名证书====:==
==# openssl req \====== ==-newkey rsa:4096 -nodes -sha256 -keyout ca.key \====== ==-x509 -days 365 -out ca.crt======
**2.2 产生证书签名请求**
==假如你使用类似于====reg.yourdomain.com====的FQDN(Fully Qualified Domain Name)方式来连接registry主机则你必须使用====reg.yourdomain.com====来作为CN(Common Name)。否则假如你使用IP地址来连接你的registry主机的话CN可以指定为任何值例如指定为你的名字==
==# openssl req \====== ==-newkey rsa:4096 -nodes -sha256 -keyout yourdomain.com.key \====== ==-out yourdomain.com.csr======
**2.3 为registry主机产生证书**
==假如你使用类似于====reg.yourdomain.com====的FQDN(Full Qualified Domain Name)方式来连接registry主机你可以使用如下的命令来为registry主机产生证书==
==# openssl x509 -req -days 365 -in yourdomain.com.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out yourdomain.com.crt======
==假如你是使用ip的话 比如使用====192.168.1.101====来连接registry主机的话你需要使用如下命令==
==# echo subjectAltName = IP:192.168.1.101 \> extfile.cnf======
==# openssl x509 -req -days 365 -in yourdomain.com.csr -CA ca.crt -CAkey ca.key -CAcreateserial -extfile extfile.cnf -out yourdomain.com========.crt==
**3. 配置与安装**
==在你获得====yourdomain.com.crt====与====yourdomain.com.key====文件之后,你可以将它们放到一个目录,比如====/root/cert/====:==
==# cp yourdomain.com.crt /root/cert/========# cp yourdomain.com.key /root/cert/== ====
==然后修改====harbor.cfg====配置文件更新hostname及protocol然后更新====ssl_cert====及====ssl_cert_key======
==#set hostname========hostname = reg.yourdomain.com========#set ui_url_protocol========ui_url_protocol = https========......========#The path of cert and key files for nginx, they are applied only the protocol is set to https== ======ssl_cert = /root/cert/yourdomain.com.crt========ssl_cert_key = /root/cert/yourdomain.com.key======
==然后再执行如下命令为Harbor产生配置文件==
==# ./prepare======
==假如当前====Harbor====正在运行的话,停止并移除当前的运行实例。通过如下方式你的====image data====仍会保留在文件系统中:==
==# docker-compose down======
==最后重启Harbor。==
==因为Harbor发布时默认并不包含certificates并使用http来提供registry请求服务。然而我们建议在实际的生产环境中还是要使用安全的https。Harbor有一个Nginx实例以作为其他所有服务的反向代理。可以使用prepare脚本来配置Nginx以支持https。==
**1. 停止Harbor**
==上一章我们使用的是Harbor默认的http方式工作这里我们首先将Harbor停止并删除掉原有的一些数据以恢复到一个干净的环境==
==# docker-compose down -v========# ls /data/*========# rm -rf /data/database========# rm -rf /data/registry========# rm -rf /data/*========# rm -rf /var/log/harbor*========#== ====
==注意可能是因为目前Harbor工作负载过重导致上面调用====docker-compose down -v====经常会失败,可用如下方式来停止:==
==# docker ps | grep -v CONTAINER | grep -v docs | awk '{print $1'} | xargs docker stop========# docker ps | grep -v CONTAINER | grep -v docs | awk '{print $1'} | xargs docker rm -vf==
**2. 获取证书**
==这里假设你的registry主机名为====reg.yourdomain.com====并且通过DNS记录能够找到你运行Harbor的主机。首先你应该从CA处获得一个certificate。该certificate通常包含一个====a.crt====文件和一个====a.key====文件,例如:====yourdomain.com.crt====以及====yourdomain.com.key====。==
==在测试或开发环境下你也许会使用一个自签名证书而不是从CA那里获取。可以通过如下的命令产生你自己的证书==
**2.1 创建自签名根证书**
==可以通过如下的方式来产生一个====私钥====及====自签名证书====:==
==# openssl req \====== ==-newkey rsa:4096 -nodes -sha256 -keyout ca.key \====== ==-x509 -days 365 -out ca.crt======
**2.2 产生证书签名请求**
==假如你使用类似于====reg.yourdomain.com====的FQDN(Fully Qualified Domain Name)方式来连接registry主机则你必须使用====reg.yourdomain.com====来作为CN(Common Name)。否则假如你使用IP地址来连接你的registry主机的话CN可以指定为任何值例如指定为你的名字==
==# openssl req \====== ==-newkey rsa:4096 -nodes -sha256 -keyout yourdomain.com.key \====== ==-out yourdomain.com.csr======
**2.3 为registry主机产生证书**
==假如你使用类似于====reg.yourdomain.com====的FQDN(Full Qualified Domain Name)方式来连接registry主机你可以使用如下的命令来为registry主机产生证书==
==# openssl x509 -req -days 365 -in yourdomain.com.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out yourdomain.com.crt======
==假如你是使用ip的话 比如使用====192.168.1.101====来连接registry主机的话你需要使用如下命令==
==# echo subjectAltName = IP:192.168.1.101 > extfile.cnf======
==# openssl x509 -req -days 365 -in yourdomain.com.csr -CA ca.crt -CAkey ca.key -CAcreateserial -extfile extfile.cnf -out yourdomain.com========.crt==
**3. 配置与安装**
==在你获得====yourdomain.com.crt====与====yourdomain.com.key====文件之后,你可以将它们放到一个目录,比如====/root/cert/====:==
==# cp yourdomain.com.crt /root/cert/========# cp yourdomain.com.key /root/cert/== ====
==然后修改====harbor.cfg====配置文件更新hostname及protocol然后更新====ssl_cert====及====ssl_cert_key======
==#set hostname========hostname = reg.yourdomain.com========#set ui_url_protocol========ui_url_protocol = https========......========#The path of cert and key files for nginx, they are applied only the protocol is set to https== ======ssl_cert = /root/cert/yourdomain.com.crt========ssl_cert_key = /root/cert/yourdomain.com.key======
==然后再执行如下命令为Harbor产生配置文件==
==# ./prepare======
==假如当前====Harbor====正在运行的话,停止并移除当前的运行实例。通过如下方式你的====image data====仍会保留在文件系统中:==
==# docker-compose down======
==最后重启Harbor。==
==在设置了====https====之后,你可以通过如下的步骤来进行验证:==
- ==打开浏览器输入访问地址====https://reg.yourdomain.com====就会显示出Harbor的 UI界面==
- ==在安装有docker daemon的机器上请确保没有====--insecure-registry====设置),你必须拷贝上述步骤所产生的====ca.crt====到====/etc/docker/certs.d/reg.yourdomain.com====目录(或者====registry host IP====目录)。假如该目录并不存在的话请创建该目录。假如你将nginx 443端口映射到了其他端口的话则你必须创建====/etc/docker/certs.d/reg.yourdomain.com:port====目录(或者====registry host IP:port====目录然后运行相应的docker命令行来验证https是否工作正常==
==# docker login reg.yourdomain.com======
==假如你已经将nginx 443端口映射到了其他端口的话你需要在登录时添加相应的端口例如==
==# docker login reg.yourdomain.com:port======
**4. Troubleshooting**
==1) 你也许从一个certificate issuer处获得了一个intermediate certificate。在这种情况下你可以将该intermediate certificate与你自己的certificate合并创建出一个certificate bundle。你可以通过如下命令来实现==
==# cat intermediate-certificate.pem \>\> yourdomain.com.crt==
==# docker login reg.yourdomain.com======
==假如你已经将nginx 443端口映射到了其他端口的话你需要在登录时添加相应的端口例如==
==# docker login reg.yourdomain.com:port======
**4. Troubleshooting**
==1) 你也许从一个certificate issuer处获得了一个intermediate certificate。在这种情况下你可以将该intermediate certificate与你自己的certificate合并创建出一个certificate bundle。你可以通过如下命令来实现==
==# cat intermediate-certificate.pem >> yourdomain.com.crt==
==2) 在有一些docker daemon运行的操作系统上你也许需要在操作系统级别信任该证书==
- ==在Ubuntu操作系统上你可以通过如下命令来完成==
@@ -59,35 +59,35 @@ openssl req \
- ==在Redhat(Centos等操作系统上你可以通过如下命令来完成==
==# cp yourdomain.com.crt /etc/pki/ca-trust/source/anchors/reg.yourdomain.com.crt========# update-ca-trust======
**5. 部署示例**
==我们当前部署环境ip地址为====192.168.69.128==
**5.1 获得证书文件**
**1) 产生根证书**
==# openssl req \====== ==-newkey rsa:4096 -nodes -sha256 -keyout ca.key \====== ==-x509 -days 365 -out ca.crt \====== ==-subj "/C=CN/ST=Guangdong/L=Shenzhen/O=test_company/OU=IT/CN=test/emailAddress=11111111@qq.com"======
==# ls========ca.crt ca.key======
**2) 产生证书签名请求**
==# openssl req \====== ==-newkey rsa:4096 -nodes -sha256 -keyout harbor-registry.key \====== ==-out harbor-registry.csr \====== ==-subj "/C=CN/ST=Guangdong/L=Shenzhen/O=test_company/OU=IT/CN=192.168.69.128/emailAddress=11111111@qq.com"======
==# ls========ca.crt ca.key harbor-registry.csr harbor-registry.key======
**3) 为registry产生证书**
==# echo subjectAltName = IP:192.168.69.128 \> extfile.cnf======
==# openssl x509 -req -days 365 -in harbor-registry.csr -CA ca.crt -CAkey ca.key -CAcreateserial -extfile extfile.cnf -out harbor-registry.crt======
==# ls========ca.crt ca.key ca.srl extfile.cnf harbor-registry.crt harbor-registry.csr harbor-registry.key==
**5.2 配置及安装**
==1) 拷贝harbor-registry证书到====/opt/cert====目录==
==# mkdir -p /opt/cert========# cp harbor-registry.crt /opt/cert/========# cp harbor-registry.key /opt/cert/======
==2) 修改harbor.cfg配置文件==
==#set hostname========hostname = 192.168.69.128========#set ui_url_protocol========ui_url_protocol = https========......========#The path of cert and key files for nginx, they are applied only the protocol is set to https== ======ssl_cert = /opt/cert/harbor-registry.crt========ssl_cert_key = /opt/cert/harbor-registry.key======
==3) 重新产生配置文件==
==# ./prepare======
==4) 关闭harbor==
==# docker-compose down== ====
==5) 查看docker daemon是否有====--insecure-registry====选项==
==如果仍有该选项请将其去掉并执行如下命令重启docker daemon:==
==# systemctl daemon-reload========# systemctl restart docker======
==6) 重启Harbor==
==# docker-compose up -d========Creating network "harbor_harbor" with the default driver========Creating harbor-log ... done========Creating registry ... done========Creating harbor-adminserver ... done========Creating harbor-db ... done========Creating harbor-ui ... done========Creating harbor-jobservice ... done========Creating nginx ... done======
==# docker ps========CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES========c7b4d837fefc vmware/nginx-photon:v1.4.0 "nginx -g 'daemon of…" 6 seconds ago Up 3 seconds 0.0.0.0:80-\>80/tcp, 0.0.0.0:443-\>443/tcp, 0.0.0.0:4443-\>4443/tcp nginx========257ec984fc98 vmware/harbor-jobservice:v1.4.0 "/harbor/start.sh" 6 seconds ago Up 4 seconds (health: starting) harbor-jobservice========331fe98b1623 vmware/harbor-ui:v1.4.0 "/harbor/start.sh" 8 seconds ago Up 5 seconds (health: starting) harbor-ui========d155d8a3cf00 vmware/harbor-db:v1.4.0 "/usr/local/bin/dock…" 10 seconds ago Up 7 seconds (health: starting) 3306/tcp harbor-db========183a8f508491 vmware/harbor-adminserver:v1.4.0 "/harbor/start.sh" 10 seconds ago Up 7 seconds (health: starting) harbor-adminserver========579642c3cecc vmware/registry-photon:v2.6.2-v1.4.0 "/entrypoint.sh serv…" 10 seconds ago Up 7 seconds (health: starting) 5000/tcp registry========06a1618f789e vmware/harbor-log:v1.4.0 "/bin/sh -c /usr/loc…" 10 seconds ago Up 9 seconds (health: starting) 127.0.0.1:1514-\>10514/tcp harbor-log======
==# cp yourdomain.com.crt /etc/pki/ca-trust/source/anchors/reg.yourdomain.com.crt========# update-ca-trust======
**5. 部署示例**
==我们当前部署环境ip地址为====192.168.69.128==
**5.1 获得证书文件**
**1) 产生根证书**
==# openssl req \====== ==-newkey rsa:4096 -nodes -sha256 -keyout ca.key \====== ==-x509 -days 365 -out ca.crt \====== ==-subj "/C=CN/ST=Guangdong/L=Shenzhen/O=test_company/OU=IT/CN=test/emailAddress=11111111@qq.com"======
==# ls========ca.crt ca.key======
**2) 产生证书签名请求**
==# openssl req \====== ==-newkey rsa:4096 -nodes -sha256 -keyout harbor-registry.key \====== ==-out harbor-registry.csr \====== ==-subj "/C=CN/ST=Guangdong/L=Shenzhen/O=test_company/OU=IT/CN=192.168.69.128/emailAddress=11111111@qq.com"======
==# ls========ca.crt ca.key harbor-registry.csr harbor-registry.key======
**3) 为registry产生证书**
==# echo subjectAltName = IP:192.168.69.128 > extfile.cnf======
==# openssl x509 -req -days 365 -in harbor-registry.csr -CA ca.crt -CAkey ca.key -CAcreateserial -extfile extfile.cnf -out harbor-registry.crt======
==# ls========ca.crt ca.key ca.srl extfile.cnf harbor-registry.crt harbor-registry.csr harbor-registry.key==
**5.2 配置及安装**
==1) 拷贝harbor-registry证书到====/opt/cert====目录==
==# mkdir -p /opt/cert========# cp harbor-registry.crt /opt/cert/========# cp harbor-registry.key /opt/cert/======
==2) 修改harbor.cfg配置文件==
==#set hostname========hostname = 192.168.69.128========#set ui_url_protocol========ui_url_protocol = https========......========#The path of cert and key files for nginx, they are applied only the protocol is set to https== ======ssl_cert = /opt/cert/harbor-registry.crt========ssl_cert_key = /opt/cert/harbor-registry.key======
==3) 重新产生配置文件==
==# ./prepare======
==4) 关闭harbor==
==# docker-compose down== ====
==5) 查看docker daemon是否有====--insecure-registry====选项==
==如果仍有该选项请将其去掉并执行如下命令重启docker daemon:==
==# systemctl daemon-reload========# systemctl restart docker======
==6) 重启Harbor==
==# docker-compose up -d========Creating network "harbor_harbor" with the default driver========Creating harbor-log ... done========Creating registry ... done========Creating harbor-adminserver ... done========Creating harbor-db ... done========Creating harbor-ui ... done========Creating harbor-jobservice ... done========Creating nginx ... done======
==# docker ps========CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES========c7b4d837fefc vmware/nginx-photon:v1.4.0 "nginx -g 'daemon of…" 6 seconds ago Up 3 seconds 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, 0.0.0.0:4443->4443/tcp nginx========257ec984fc98 vmware/harbor-jobservice:v1.4.0 "/harbor/start.sh" 6 seconds ago Up 4 seconds (health: starting) harbor-jobservice========331fe98b1623 vmware/harbor-ui:v1.4.0 "/harbor/start.sh" 8 seconds ago Up 5 seconds (health: starting) harbor-ui========d155d8a3cf00 vmware/harbor-db:v1.4.0 "/usr/local/bin/dock…" 10 seconds ago Up 7 seconds (health: starting) 3306/tcp harbor-db========183a8f508491 vmware/harbor-adminserver:v1.4.0 "/harbor/start.sh" 10 seconds ago Up 7 seconds (health: starting) harbor-adminserver========579642c3cecc vmware/registry-photon:v2.6.2-v1.4.0 "/entrypoint.sh serv…" 10 seconds ago Up 7 seconds (health: starting) 5000/tcp registry========06a1618f789e vmware/harbor-log:v1.4.0 "/bin/sh -c /usr/loc…" 10 seconds ago Up 9 seconds (health: starting) 127.0.0.1:1514->10514/tcp harbor-log======
==7) 通过https形式访问Harbor==
- ==通过浏览器访问==
@@ -96,32 +96,32 @@ openssl req \
- ==通过docker命令来访问==
==首先新建====/etc/docker/certs.d/192.168.69.128====目录,然后将上面产生的====ca.crt====拷贝到该目录:==
==# mkdir -p /etc/docker/certs.d/192.168.69.128========# cp ca.crt /etc/docker/certs.d/192.168.69.128/======
==然后登录到docker registry:==
==# docker login 192.168.69.128========Username (admin): admin========Password:== ======Login Succeeded======
==用向====registry====中上传一个镜像:==
==# docker images========192.168.69.128/library/redis alpine c27f56585938 3 weeks ago 27.7MB======
==首先新建====/etc/docker/certs.d/192.168.69.128====目录,然后将上面产生的====ca.crt====拷贝到该目录:==
==# mkdir -p /etc/docker/certs.d/192.168.69.128========# cp ca.crt /etc/docker/certs.d/192.168.69.128/======
==然后登录到docker registry:==
==# docker login 192.168.69.128========Username (admin): admin========Password:== ======Login Succeeded======
==用向====registry====中上传一个镜像:==
==# docker images========192.168.69.128/library/redis alpine c27f56585938 3 weeks ago 27.7MB======
==[root@localhost test]# docker push 192.168.69.128/library/redis:alpine========The push refers to repository [192.168.69.128/library/redis]========f6b9463783dc: Pushed== ======222a85888a99: Pushed== ======1925395eabdd: Pushed== ======c3d278563734: Pushed== ======ad9247fe8c63: Pushed== ======cd7100a72410: Pushed== ======alpine: digest: sha256:9d017f829df3d0800f2a2582c710143767f6dda4df584b708260e73b1a1b6db3 size: 1568======
- ==通过curl命令来访问 registry API版本号==
==查询registry API版本号==
==# curl -iL -X GET== ==https://192.168.69.128/v2== ==--cacert ca.crt========HTTP/1.1 301 Moved Permanently========Server: nginx========Date: Tue, 10 Apr 2018 09:33:39 GMT========Content-Type: text/html========Content-Length: 178========Location:== ==https://192.168.69.128/v2/========Connection: keep-alive======
==HTTP/1.1 401 Unauthorized========Server: nginx========Date: Tue, 10 Apr 2018 09:33:39 GMT========Content-Type: application/json; charset=utf-8========Content-Length: 87========Connection: keep-alive========Docker-Distribution-Api-Version: registry/2.0========Set-Cookie: beegosessionID=575f32ac760f52c8cf1cdb748e48ab5e; Path=/; HttpOnly========Www-Authenticate: Bearer realm="https://192.168.69.128/service/token",service="harbor-registry"======
=={"errors":[{"code":"UNAUTHORIZED","message":"authentication required","detail":null}]}======
==# curl -iL -X GET -u admin:Harbor12345== ==https://192.168.69.128/service/token?account=admin\&service=harbor-registry== ==--cacert ca.crt========HTTP/1.1 200 OK========Server: nginx========Date: Tue, 10 Apr 2018 09:34:39 GMT========Content-Type: application/json; charset=utf-8========Content-Length: 1100========Connection: keep-alive========Set-Cookie: beegosessionID=77bc62dcdc4a810a0e208487a89f069a; Path=/; HttpOnly======
=={====== =="token": "nHLZqMPw",====== =="expires_in": 1800,====== =="issued_at": "2018-04-10T09:34:39Z"========}======
==# curl -iL -X GET -H "Content-Type: application/json" -H "Authorization: Bearer nHLZqMPw"== ==https://192.168.69.128/v2== ==--cacert ca.crt========HTTP/1.1 301 Moved Permanently========Server: nginx========Date: Tue, 10 Apr 2018 09:36:48 GMT========Content-Type: text/html========Content-Length: 178========Location:== ==https://192.168.69.128/v2/========Connection: keep-alive======
==HTTP/1.1 200 OK========Server: nginx========Date: Tue, 10 Apr 2018 09:36:48 GMT========Content-Type: application/json; charset=utf-8========Content-Length: 2========Connection: keep-alive========Docker-Distribution-Api-Version: registry/2.0========Set-Cookie: beegosessionID=e651b65d891617a999254ec875c1c63c; Path=/; HttpOnly======
==查询registry API版本号==
==# curl -iL -X GET== ==https://192.168.69.128/v2== ==--cacert ca.crt========HTTP/1.1 301 Moved Permanently========Server: nginx========Date: Tue, 10 Apr 2018 09:33:39 GMT========Content-Type: text/html========Content-Length: 178========Location:== ==https://192.168.69.128/v2/========Connection: keep-alive======
==HTTP/1.1 401 Unauthorized========Server: nginx========Date: Tue, 10 Apr 2018 09:33:39 GMT========Content-Type: application/json; charset=utf-8========Content-Length: 87========Connection: keep-alive========Docker-Distribution-Api-Version: registry/2.0========Set-Cookie: beegosessionID=575f32ac760f52c8cf1cdb748e48ab5e; Path=/; HttpOnly========Www-Authenticate: Bearer realm="https://192.168.69.128/service/token",service="harbor-registry"======
=={"errors":[{"code":"UNAUTHORIZED","message":"authentication required","detail":null}]}======
==# curl -iL -X GET -u admin:Harbor12345== ==https://192.168.69.128/service/token?account=admin\&service=harbor-registry== ==--cacert ca.crt========HTTP/1.1 200 OK========Server: nginx========Date: Tue, 10 Apr 2018 09:34:39 GMT========Content-Type: application/json; charset=utf-8========Content-Length: 1100========Connection: keep-alive========Set-Cookie: beegosessionID=77bc62dcdc4a810a0e208487a89f069a; Path=/; HttpOnly======
=={====== =="token": "nHLZqMPw",====== =="expires_in": 1800,====== =="issued_at": "2018-04-10T09:34:39Z"========}======
==# curl -iL -X GET -H "Content-Type: application/json" -H "Authorization: Bearer nHLZqMPw"== ==https://192.168.69.128/v2== ==--cacert ca.crt========HTTP/1.1 301 Moved Permanently========Server: nginx========Date: Tue, 10 Apr 2018 09:36:48 GMT========Content-Type: text/html========Content-Length: 178========Location:== ==https://192.168.69.128/v2/========Connection: keep-alive======
==HTTP/1.1 200 OK========Server: nginx========Date: Tue, 10 Apr 2018 09:36:48 GMT========Content-Type: application/json; charset=utf-8========Content-Length: 2========Connection: keep-alive========Docker-Distribution-Api-Version: registry/2.0========Set-Cookie: beegosessionID=e651b65d891617a999254ec875c1c63c; Path=/; HttpOnly======
==上面为了显示,我们对返回过来的====token====做了适当的裁剪。此外这里====curl====命令不适用====-k====选项,表示需要对服务器证书进行检查。==
- ==通过curl来访问registry中的镜像列表==
==# curl -iL -X GET -u admin:Harbor12345== ==https://192.168.69.128/service/token?account=admin\&service=harbor-registry\&scope=registry:catalog:*== ==--cacert ca.crt========HTTP/1.1 200 OK========Server: nginx========Date: Mon, 09 Apr 2018 09:33:52 GMT========Content-Type: application/json; charset=utf-8========Content-Length: 1166========Connection: keep-alive========Set-Cookie: beegosessionID=648fd5a5ec4f06389d45c02f7f5971b4; Path=/; HttpOnly======
=={====== =="token": "A7yfEdUBYD3bDhLM",====== =="expires_in": 1800,====== =="issued_at": "2018-04-09T09:33:52Z"========}======
==# curl -iL -X GET -H "Content-Type: application/json" -H "Authorization: Bearer LA7yfEdUBYD3bDhLM"== ==http://192.168.69.128/v2/_catalog== ==--cacert ca.crt========HTTP/1.1 200 OK========Server: nginx========Date: Mon, 09 Apr 2018 09:36:35 GMT========Content-Type: application/json; charset=utf-8========Content-Length: 34========Connection: keep-alive========Docker-Distribution-Api-Version: registry/2.0========Set-Cookie: beegosessionID=1b84e760ab0234045f06680e56e28818; Path=/; HttpOnly======
=={"repositories":["library/redis"]}======
==# curl -iL -X GET -u admin:Harbor12345== ==https://192.168.69.128/service/token?account=admin\&service=harbor-registry\&scope=registry:catalog:*== ==--cacert ca.crt========HTTP/1.1 200 OK========Server: nginx========Date: Mon, 09 Apr 2018 09:33:52 GMT========Content-Type: application/json; charset=utf-8========Content-Length: 1166========Connection: keep-alive========Set-Cookie: beegosessionID=648fd5a5ec4f06389d45c02f7f5971b4; Path=/; HttpOnly======
=={====== =="token": "A7yfEdUBYD3bDhLM",====== =="expires_in": 1800,====== =="issued_at": "2018-04-09T09:33:52Z"========}======
==# curl -iL -X GET -H "Content-Type: application/json" -H "Authorization: Bearer LA7yfEdUBYD3bDhLM"== ==http://192.168.69.128/v2/_catalog== ==--cacert ca.crt========HTTP/1.1 200 OK========Server: nginx========Date: Mon, 09 Apr 2018 09:36:35 GMT========Content-Type: application/json; charset=utf-8========Content-Length: 34========Connection: keep-alive========Docker-Distribution-Api-Version: registry/2.0========Set-Cookie: beegosessionID=1b84e760ab0234045f06680e56e28818; Path=/; HttpOnly======
=={"repositories":["library/redis"]}======
==上面为了显示,我们对返回过来的====token====做了适当的裁剪。此外这里====curl====命令不适用====-k====选项,表示需要对服务器证书进行检查。==
\> 来自 \<[https://ivanzz1001.github.io/records/post/docker/2018/04/09/docker-harbor-https](https://ivanzz1001.github.io/records/post/docker/2018/04/09/docker-harbor-https)\>
\> 来自 \<[https://ivanzz1001.github.io/records/post/docker/2018/04/09/docker-harbor-https](https://ivanzz1001.github.io/records/post/docker/2018/04/09/docker-harbor-https)\>
> 来自 <[https://ivanzz1001.github.io/records/post/docker/2018/04/09/docker-harbor-https](https://ivanzz1001.github.io/records/post/docker/2018/04/09/docker-harbor-https)>
> 来自 <[https://ivanzz1001.github.io/records/post/docker/2018/04/09/docker-harbor-https](https://ivanzz1001.github.io/records/post/docker/2018/04/09/docker-harbor-https)>

View File

@@ -1,20 +1,20 @@
J==enkins是开源的,使用Java编写的持续集成的工具在Centos上可以通过yum命令行直接安装。记录下安装的过程方便以后查找。==
==安装 java==
==$ sudo yum== ==install== ==-y== ==java========......==
==安装Jenkins==
==$ sudo wget -O /etc/yum.repos.d/jenkins.repo== ==http:====//jenkins-ci.org/redhat/jenkins.repo========$ sudo rpm --====import== ==http:====//pkg.jenkins-ci.org/redhat/jenkins-ci.org.key========$ sudo yum install -y jenkins========......==
==配置==
==Jenkins 的安装目录是:/var/lib/jenkins/==
==Jenkins 的皮遏制文件地址:/etc/sysconfig/jenkins==
==这里介绍下三个比较重要的配置:==
==JENKINS_HOME==
==JENKINS_USER==
==JENKINS_PORT==
==JENKINS_HOME是Jenkins的主目录Jenkins工作的目录都放在这里,Jenkins储存文件的地址,Jenkins的插件生成的文件都在这个目录下。==
==JENKINS_USER是Jenkins的用户拥有$JENKINS_HOME和/var/log/jenkins的权限。==
==JENKINS_PORT是Jenkins的端口默认端口是8080为了和别的系统占用端口冲突建议改变。==
==授权==
==有时候Jenkins需要操作别的用户的文件或者执行脚本那么就得有对应的权限比如Jenkins用户执行docker命令进行镜像制作与上传用如下的命令即可。==
==$ sudo usermod -a -G docker jenkins==
==启动 Jenkins==
J==enkins是开源的,使用Java编写的持续集成的工具在Centos上可以通过yum命令行直接安装。记录下安装的过程方便以后查找。==
==安装 java==
==$ sudo yum== ==install== ==-y== ==java========......==
==安装Jenkins==
==$ sudo wget -O /etc/yum.repos.d/jenkins.repo== ==http:====//jenkins-ci.org/redhat/jenkins.repo========$ sudo rpm --====import== ==http:====//pkg.jenkins-ci.org/redhat/jenkins-ci.org.key========$ sudo yum install -y jenkins========......==
==配置==
==Jenkins 的安装目录是:/var/lib/jenkins/==
==Jenkins 的皮遏制文件地址:/etc/sysconfig/jenkins==
==这里介绍下三个比较重要的配置:==
==JENKINS_HOME==
==JENKINS_USER==
==JENKINS_PORT==
==JENKINS_HOME是Jenkins的主目录Jenkins工作的目录都放在这里,Jenkins储存文件的地址,Jenkins的插件生成的文件都在这个目录下。==
==JENKINS_USER是Jenkins的用户拥有$JENKINS_HOME和/var/log/jenkins的权限。==
==JENKINS_PORT是Jenkins的端口默认端口是8080为了和别的系统占用端口冲突建议改变。==
==授权==
==有时候Jenkins需要操作别的用户的文件或者执行脚本那么就得有对应的权限比如Jenkins用户执行docker命令进行镜像制作与上传用如下的命令即可。==
==$ sudo usermod -a -G docker jenkins==
==启动 Jenkins==
$ systemctl enable jenkins # 开机启动$ systemctl start jenkins # 启动jenkins

View File

@@ -1,148 +1,148 @@
==一、前言==
==安全增强型 LinuxSecurity-Enhanced Linux简称 SELinux它是一个 Linux 内核模块,也是 Linux 的一个安全子系统。==
==SELinux 主要由美国国家安全局开发。2.6 及以上版本的 Linux 内核都已经集成了 SELinux 模块。==
==SELinux 的结构及配置非常复杂,而且有大量概念性的东西,要学精难度较大。很多 Linux 系统管理员嫌麻烦都把 SELinux 关闭了。==
==如果可以熟练掌握 SELinux 并正确运用,我觉得整个系统基本上可以到达"坚不可摧"的地步了(请永远记住没有绝对的安全)。==
==掌握 SELinux 的基本概念以及简单的配置方法是每个 Linux 系统管理员的必修课。==
==本文均在 CentOS 7.4.1708 系统中操作。==
==本文纯属个人学习经验分享交流,出错再所难免,仅供参考!如果发现错误的地方,可以的话麻烦指点下,特别感谢!==
==二、SELinux 的作用及权限管理机制==
==2.1 SELinux 的作用==
==SELinux 主要作用就是最大限度地减小系统中服务进程可访问的资源(最小权限原则)。==
==设想一下,如果一个以 root 身份运行的网络服务存在 0day 漏洞,黑客就可以利用这个漏洞,以 root 的身份在您的服务器上为所欲为了。是不是很可怕?==
==SELinux 就是来解决这个问题的。==
==2.2 DAC==
==在没有使用 SELinux 的操作系统中,决定一个资源是否能被访问的因素是:某个资源是否拥有对应用户的权限(读、写、执行)。==
==只要访问这个资源的进程符合以上的条件就可以被访问。==
==而最致命问题是root 用户不受任何管制,系统上任何资源都可以无限制地访问。==
==这种权限管理机制的主体是用户也称为自主访问控制DAC。==
==2.3 MAC==
==在使用了 SELinux 的操作系统中,决定一个资源是否能被访问的因素除了上述因素之外,还需要判断每一类进程是否拥有对某一类资源的访问权限。==
==这样一来,即使进程是以 root 身份运行的,也需要判断这个进程的类型以及允许访问的资源类型才能决定是否允许访问某个资源。进程的活动空间也可以被压缩到最小。==
==即使是以 root 身份运行的服务进程,一般也只能访问到它所需要的资源。即使程序出了漏洞,影响范围也只有在其允许访问的资源范围内。安全性大大增加。==
==这种权限管理机制的主体是进程也称为强制访问控制MAC。==
==而 MAC 又细分为了两种方式一种叫类别安全MCS模式另一种叫多级安全MLS模式。==
==下文中的操作均为 MCS 模式。==
==2.4 DAC 和 MAC 的对比==
==这里引用一张图片来说明。==
==可以看到,在 DAC 模式下,只要相应目录有相应用户的权限,就可以被访问。而在 MAC 模式下,还要受进程允许访问目录范围的限制。==
==三、SELinux 基本概念==
==3.1 主体Subject==
==可以完全等同于进程。==
==注:为了方便理解,如无特别说明,以下均把进程视为主体。==
==3.2 对象Object==
==被主体访问的资源。可以是文件、目录、端口、设备等。==
==注:为了方便理解,如无特别说明,以下均把文件或者目录视为对象。==
==3.3 政策和规则Policy & Rule==
==系统中通常有大量的文件和进程,为了节省时间和开销,通常我们只是选择性地对某些进程进行管制。==
==而哪些进程需要管制、要怎么管制是由政策决定的。==
==一套政策里面有多个规则。部分规则可以按照需求启用或禁用(以下把该类型的规则称为布尔型规则)。==
==规则是模块化、可扩展的。在安装新的应用程序时,应用程序可通过添加新的模块来添加规则。用户也可以手动地增减规则。==
==在 CentOS 7 系统中,有三套政策,分别是:==
==1. targeted对大部分网络服务进程进行管制。这是系统默认使用的政策下文均使用此政策。==
==2. minimum以 targeted 为基础,仅对选定的网络服务进程进行管制。一般不用。==
==3. mls多级安全保护。对所有的进程进行管制。这是最严格的政策配置难度非常大。一般不用除非对安全性有极高的要求。==
==政策可以在 /etc/selinux/config 中设定。==
==3.4 安全上下文Security Context==
==安全上下文是 SELinux 的核心。==
==安全上下文我自己把它分为「进程安全上下文」和「文件安全上下文」。==
==一个「进程安全上下文」一般对应多个「文件安全上下文」。==
==只有两者的安全上下文对应上了,进程才能访问文件。它们的对应关系由政策中的规则决定。==
==文件安全上下文由文件创建的位置和创建文件的进程所决定。而且系统有一套默认值,用户也可以对默认值进行设定。==
==需要注意的是,单纯的移动文件操作并不会改变文件的安全上下文。==
==安全上下文的结构及含义==
==安全上下文有四个字段分别用冒号隔开。形如system_u:object_r:admin_home_t:s0。==
==3.5 SELinux 的工作模式==
==SELinux 有三种工作模式,分别是:==
==1. enforcing强制模式。违反 SELinux 规则的行为将被阻止并记录到日志中。==
==2. permissive宽容模式。违反 SELinux 规则的行为只会记录到日志中。一般为调试用。==
==3. disabled关闭 SELinux。==
==SELinux 工作模式可以在 /etc/selinux/config 中设定。==
==如果想从 disabled 切换到 enforcing 或者 permissive 的话,需要重启系统。反过来也一样。==
==enforcing 和 permissive 模式可以通过 setenforce 1|0 命令快速切换。==
==需要注意的是,如果系统已经在关闭 SELinux 的状态下运行了一段时间,在打开 SELinux 之后的第一次重启速度可能会比较慢。因为系统必须为磁盘中的文件创建安全上下文(我表示我重启了大约 10 分钟,还以为是死机了……)。==
==SELinux 日志的记录需要借助 auditd.service 这个服务,请不要禁用它。==
==3.6 SELinux 工作流程==
==这里引用一张图片,不必过多解释。==
==注:上面的安全文本指的就是安全上下文。==
==四、SELinux 基本操作==
==4.1 查询文件或目录的安全上下文==
==命令基本用法==
==ls -Z==
==用法举例==
==查询 /etc/hosts 的安全上下文。==
==ls -Z /etc/hosts==
==执行结果==
==-rw-r--r--. root root system_u:object_r:net_conf_t:s0 /etc/hosts==
==4.2 查询进程的安全上下文==
==命令基本用法==
==ps auxZ | grep -v grep | grep==
==用法举例==
==查询 Nginx 相关进程的安全上下文。==
==ps auxZ | grep -v grep | grep nginx==
==执行结果==
==system_u:system_r:httpd_t:s0 root 7997 0.0 0.0 122784 2156 ? Ss 14:31 0:00 nginx: master process /usr/sbin/nginx==
==system_u:system_r:httpd_t:s0 nginx 7998 0.0 0.0 125332 7560 ? S 14:31 0:00 nginx: worker process==
==4.3 手动修改文件或目录的安全上下文==
==命令基本用法==
==chcon [...]==
==选项功能-u 修改安全上下文的用户字段-r 修改安全上下文的角色字段-t 修改安全上下文的类型字段-l 修改安全上下文的级别字段--reference 修改与指定文件或目录相一致的安全上下文-R递归操作-h修改软链接的安全上下文不加此选项则修改软链接对应文件==
==用法举例==
==修改 test 的安全上下文为 aaa_u:bbb_r:ccc_t:s0。==
==chcon -u aaa_u -r bbb_r -t ccc_t test==
==4.4 把文件或目录的安全上下文恢复到默认值==
==命令基本用法==
==restorecon [选项] [...]==
==选项功能-v打印操作过程-R递归操作==
==用法举例==
==添加一些网页文件到 Nginx 服务器的目录之后,为这些新文件设置正确的安全上下文。==
==restorecon -R /usr/share/nginx/html/==
==4.5 查询系统中的布尔型规则及其状态==
==命令基本用法==
==getsebool -a==
==由于该命令要么查询所有规则,要么只查询一个规则,所以一般都是先查询所有规则然后用 grep 筛选。==
==用法举例==
==查询与 httpd 有关的布尔型规则。==
==getsebool -a | grep httpd==
==执行结果==
==httpd_anon_write --\> off==
==httpd_builtin_scripting --\> on==
==httpd_can_check_spam --\> off==
==httpd_can_connect_ftp --\> off==
==#以下省略==
==4.6 开关一个布尔型规则==
==命令基本用法==
==setsebool [选项]==
==选项功能-P重启依然生效==
==用法举例==
==开启 httpd_anon_write 规则。==
==setsebool -P httpd_anon_write on==
==4.7 添加目录的默认安全上下文==
==命令基本用法==
==semanage fcontext -a -t "(/.*)?"==
==注:目录或文件的默认安全上下文可以通过 semanage fcontext -l 命令配合 grep过滤查看。==
==用法举例==
==为 Nginx 新增一个网站目录 /usr/share/nginx/html2 之后,需要为其设置与原目录相同的默认安全上下文。==
==semanage fcontext -a -t httpd_sys_content_t "/usr/share/nginx/html2(/.*)?"==
==4.8 添加某类进程允许访问的端口==
==命令基本用法==
==semanage port -a -t -p==
==注:各种服务类型所允许的端口号可以通过 semanage port -l 命令配合 grep 过滤查看。==
==用法举例==
==为 Nginx 需要使用 10080 的端口用于 HTTP 服务。==
==semanage port -a -t http_port_t -p tcp 10080==
==五、SELinux 错误分析和解决==
==5.1 认识 SELinux 日志==
==当开启了 SELinux 之后,很多服务的一些正常行为都会被视为违规行为(标题及下文中的错误均指违规行为)。==
==这时候我们就需要借助 SELinux 违规日志来分析解决。==
==SELinux 违规日志保存在 /var/log/audit/audit.log 中。==
==/var/log/audit/audit.log 的内容大概是这样的。==
==type=LOGIN msg=audit(1507898701.391:515): pid=8523 uid=0 subj=system_u:system_r:crond_t:s0-s0:c0.c1023 old-auid=4294967295 auid=0 tty=(none) old-ses=4294967295 ses=25 res=1==
==type=USER_START msg=audit(1507898701.421:516): pid=8523 uid=0 auid=0 ses=25 subj=system_u:system_r:crond_t:s0-s0:c0.c1023 msg='op=PAM:session_open grantors=pam_loginuid,pam_keyinit,pam_limits,pam_systemd acct="root" exe="/usr/sbin/crond" hostname=? addr=? terminal=cron res=success'==
==...==
==该文件的内容很多,而且混有很多与 SELinux 错误无关的系统审计日志。我们要借助 sealert 这个实用工具来帮忙分析(如果提示找不到命令的话请安装 setroubleshoot 软件包)。==
==5.2 使用sealert分析错误==
==命令基本用法==
==sealert -a /var/log/audit/audit.log==
==一、前言==
==安全增强型 LinuxSecurity-Enhanced Linux简称 SELinux它是一个 Linux 内核模块,也是 Linux 的一个安全子系统。==
==SELinux 主要由美国国家安全局开发。2.6 及以上版本的 Linux 内核都已经集成了 SELinux 模块。==
==SELinux 的结构及配置非常复杂,而且有大量概念性的东西,要学精难度较大。很多 Linux 系统管理员嫌麻烦都把 SELinux 关闭了。==
==如果可以熟练掌握 SELinux 并正确运用,我觉得整个系统基本上可以到达"坚不可摧"的地步了(请永远记住没有绝对的安全)。==
==掌握 SELinux 的基本概念以及简单的配置方法是每个 Linux 系统管理员的必修课。==
==本文均在 CentOS 7.4.1708 系统中操作。==
==本文纯属个人学习经验分享交流,出错再所难免,仅供参考!如果发现错误的地方,可以的话麻烦指点下,特别感谢!==
==二、SELinux 的作用及权限管理机制==
==2.1 SELinux 的作用==
==SELinux 主要作用就是最大限度地减小系统中服务进程可访问的资源(最小权限原则)。==
==设想一下,如果一个以 root 身份运行的网络服务存在 0day 漏洞,黑客就可以利用这个漏洞,以 root 的身份在您的服务器上为所欲为了。是不是很可怕?==
==SELinux 就是来解决这个问题的。==
==2.2 DAC==
==在没有使用 SELinux 的操作系统中,决定一个资源是否能被访问的因素是:某个资源是否拥有对应用户的权限(读、写、执行)。==
==只要访问这个资源的进程符合以上的条件就可以被访问。==
==而最致命问题是root 用户不受任何管制,系统上任何资源都可以无限制地访问。==
==这种权限管理机制的主体是用户也称为自主访问控制DAC。==
==2.3 MAC==
==在使用了 SELinux 的操作系统中,决定一个资源是否能被访问的因素除了上述因素之外,还需要判断每一类进程是否拥有对某一类资源的访问权限。==
==这样一来,即使进程是以 root 身份运行的,也需要判断这个进程的类型以及允许访问的资源类型才能决定是否允许访问某个资源。进程的活动空间也可以被压缩到最小。==
==即使是以 root 身份运行的服务进程,一般也只能访问到它所需要的资源。即使程序出了漏洞,影响范围也只有在其允许访问的资源范围内。安全性大大增加。==
==这种权限管理机制的主体是进程也称为强制访问控制MAC。==
==而 MAC 又细分为了两种方式一种叫类别安全MCS模式另一种叫多级安全MLS模式。==
==下文中的操作均为 MCS 模式。==
==2.4 DAC 和 MAC 的对比==
==这里引用一张图片来说明。==
==可以看到,在 DAC 模式下,只要相应目录有相应用户的权限,就可以被访问。而在 MAC 模式下,还要受进程允许访问目录范围的限制。==
==三、SELinux 基本概念==
==3.1 主体Subject==
==可以完全等同于进程。==
==注:为了方便理解,如无特别说明,以下均把进程视为主体。==
==3.2 对象Object==
==被主体访问的资源。可以是文件、目录、端口、设备等。==
==注:为了方便理解,如无特别说明,以下均把文件或者目录视为对象。==
==3.3 政策和规则Policy & Rule==
==系统中通常有大量的文件和进程,为了节省时间和开销,通常我们只是选择性地对某些进程进行管制。==
==而哪些进程需要管制、要怎么管制是由政策决定的。==
==一套政策里面有多个规则。部分规则可以按照需求启用或禁用(以下把该类型的规则称为布尔型规则)。==
==规则是模块化、可扩展的。在安装新的应用程序时,应用程序可通过添加新的模块来添加规则。用户也可以手动地增减规则。==
==在 CentOS 7 系统中,有三套政策,分别是:==
==1. targeted对大部分网络服务进程进行管制。这是系统默认使用的政策下文均使用此政策。==
==2. minimum以 targeted 为基础,仅对选定的网络服务进程进行管制。一般不用。==
==3. mls多级安全保护。对所有的进程进行管制。这是最严格的政策配置难度非常大。一般不用除非对安全性有极高的要求。==
==政策可以在 /etc/selinux/config 中设定。==
==3.4 安全上下文Security Context==
==安全上下文是 SELinux 的核心。==
==安全上下文我自己把它分为「进程安全上下文」和「文件安全上下文」。==
==一个「进程安全上下文」一般对应多个「文件安全上下文」。==
==只有两者的安全上下文对应上了,进程才能访问文件。它们的对应关系由政策中的规则决定。==
==文件安全上下文由文件创建的位置和创建文件的进程所决定。而且系统有一套默认值,用户也可以对默认值进行设定。==
==需要注意的是,单纯的移动文件操作并不会改变文件的安全上下文。==
==安全上下文的结构及含义==
==安全上下文有四个字段分别用冒号隔开。形如system_u:object_r:admin_home_t:s0。==
==3.5 SELinux 的工作模式==
==SELinux 有三种工作模式,分别是:==
==1. enforcing强制模式。违反 SELinux 规则的行为将被阻止并记录到日志中。==
==2. permissive宽容模式。违反 SELinux 规则的行为只会记录到日志中。一般为调试用。==
==3. disabled关闭 SELinux。==
==SELinux 工作模式可以在 /etc/selinux/config 中设定。==
==如果想从 disabled 切换到 enforcing 或者 permissive 的话,需要重启系统。反过来也一样。==
==enforcing 和 permissive 模式可以通过 setenforce 1|0 命令快速切换。==
==需要注意的是,如果系统已经在关闭 SELinux 的状态下运行了一段时间,在打开 SELinux 之后的第一次重启速度可能会比较慢。因为系统必须为磁盘中的文件创建安全上下文(我表示我重启了大约 10 分钟,还以为是死机了……)。==
==SELinux 日志的记录需要借助 auditd.service 这个服务,请不要禁用它。==
==3.6 SELinux 工作流程==
==这里引用一张图片,不必过多解释。==
==注:上面的安全文本指的就是安全上下文。==
==四、SELinux 基本操作==
==4.1 查询文件或目录的安全上下文==
==命令基本用法==
==ls -Z==
==用法举例==
==查询 /etc/hosts 的安全上下文。==
==ls -Z /etc/hosts==
==执行结果==
==-rw-r--r--. root root system_u:object_r:net_conf_t:s0 /etc/hosts==
==4.2 查询进程的安全上下文==
==命令基本用法==
==ps auxZ | grep -v grep | grep==
==用法举例==
==查询 Nginx 相关进程的安全上下文。==
==ps auxZ | grep -v grep | grep nginx==
==执行结果==
==system_u:system_r:httpd_t:s0 root 7997 0.0 0.0 122784 2156 ? Ss 14:31 0:00 nginx: master process /usr/sbin/nginx==
==system_u:system_r:httpd_t:s0 nginx 7998 0.0 0.0 125332 7560 ? S 14:31 0:00 nginx: worker process==
==4.3 手动修改文件或目录的安全上下文==
==命令基本用法==
==chcon [...]==
==选项功能-u 修改安全上下文的用户字段-r 修改安全上下文的角色字段-t 修改安全上下文的类型字段-l 修改安全上下文的级别字段--reference 修改与指定文件或目录相一致的安全上下文-R递归操作-h修改软链接的安全上下文不加此选项则修改软链接对应文件==
==用法举例==
==修改 test 的安全上下文为 aaa_u:bbb_r:ccc_t:s0。==
==chcon -u aaa_u -r bbb_r -t ccc_t test==
==4.4 把文件或目录的安全上下文恢复到默认值==
==命令基本用法==
==restorecon [选项] [...]==
==选项功能-v打印操作过程-R递归操作==
==用法举例==
==添加一些网页文件到 Nginx 服务器的目录之后,为这些新文件设置正确的安全上下文。==
==restorecon -R /usr/share/nginx/html/==
==4.5 查询系统中的布尔型规则及其状态==
==命令基本用法==
==getsebool -a==
==由于该命令要么查询所有规则,要么只查询一个规则,所以一般都是先查询所有规则然后用 grep 筛选。==
==用法举例==
==查询与 httpd 有关的布尔型规则。==
==getsebool -a | grep httpd==
==执行结果==
==httpd_anon_write --> off==
==httpd_builtin_scripting --> on==
==httpd_can_check_spam --> off==
==httpd_can_connect_ftp --> off==
==#以下省略==
==4.6 开关一个布尔型规则==
==命令基本用法==
==setsebool [选项]==
==选项功能-P重启依然生效==
==用法举例==
==开启 httpd_anon_write 规则。==
==setsebool -P httpd_anon_write on==
==4.7 添加目录的默认安全上下文==
==命令基本用法==
==semanage fcontext -a -t "(/.*)?"==
==注:目录或文件的默认安全上下文可以通过 semanage fcontext -l 命令配合 grep过滤查看。==
==用法举例==
==为 Nginx 新增一个网站目录 /usr/share/nginx/html2 之后,需要为其设置与原目录相同的默认安全上下文。==
==semanage fcontext -a -t httpd_sys_content_t "/usr/share/nginx/html2(/.*)?"==
==4.8 添加某类进程允许访问的端口==
==命令基本用法==
==semanage port -a -t -p==
==注:各种服务类型所允许的端口号可以通过 semanage port -l 命令配合 grep 过滤查看。==
==用法举例==
==为 Nginx 需要使用 10080 的端口用于 HTTP 服务。==
==semanage port -a -t http_port_t -p tcp 10080==
==五、SELinux 错误分析和解决==
==5.1 认识 SELinux 日志==
==当开启了 SELinux 之后,很多服务的一些正常行为都会被视为违规行为(标题及下文中的错误均指违规行为)。==
==这时候我们就需要借助 SELinux 违规日志来分析解决。==
==SELinux 违规日志保存在 /var/log/audit/audit.log 中。==
==/var/log/audit/audit.log 的内容大概是这样的。==
==type=LOGIN msg=audit(1507898701.391:515): pid=8523 uid=0 subj=system_u:system_r:crond_t:s0-s0:c0.c1023 old-auid=4294967295 auid=0 tty=(none) old-ses=4294967295 ses=25 res=1==
==type=USER_START msg=audit(1507898701.421:516): pid=8523 uid=0 auid=0 ses=25 subj=system_u:system_r:crond_t:s0-s0:c0.c1023 msg='op=PAM:session_open grantors=pam_loginuid,pam_keyinit,pam_limits,pam_systemd acct="root" exe="/usr/sbin/crond" hostname=? addr=? terminal=cron res=success'==
==...==
==该文件的内容很多,而且混有很多与 SELinux 错误无关的系统审计日志。我们要借助 sealert 这个实用工具来帮忙分析(如果提示找不到命令的话请安装 setroubleshoot 软件包)。==
==5.2 使用sealert分析错误==
==命令基本用法==
==sealert -a /var/log/audit/audit.log==
==执行完命令之后,系统需要花一段时间去分析日志中的违规行为并给出分析报告。分析报告的结构讲解请看下图:==
\> 来自 \<[https://blog.csdn.net/yanjun821126/article/details/80828908](https://blog.csdn.net/yanjun821126/article/details/80828908)\>
> 来自 <[https://blog.csdn.net/yanjun821126/article/details/80828908](https://blog.csdn.net/yanjun821126/article/details/80828908)>

View File

@@ -1,12 +1,12 @@
**centos支持rz、sz命令**
yum install lrzsz
rz的用法
在命令终端输入rz回车后就会出现文件选择对话框选择需要上传文件一次可以指定多个文件上传到服务器的路径为当前执行rz命令的目录。
如图选择要上传的文件AddOK
s
sz的用法
yum install lrzsz
rz的用法
在命令终端输入rz回车后就会出现文件选择对话框选择需要上传文件一次可以指定多个文件上传到服务器的路径为当前执行rz命令的目录。
如图选择要上传的文件AddOK
s
sz的用法
sz命令可以单下载一个文件也可以多个文件同时下载

View File

@@ -1,38 +1,38 @@
有以下命令可以查看:
# lsb_release -a
LSB Version:    :core-3.1-ia32:core-3.1-noarch:graphics-3.1-ia32:graphics-3.1-noarch
Distributor ID: CentOS
Description:    CentOS release 5.4 (Final)
Release:        5.4
# lsb_release -a
LSB Version:    :core-3.1-ia32:core-3.1-noarch:graphics-3.1-ia32:graphics-3.1-noarch
Distributor ID: CentOS
Description:    CentOS release 5.4 (Final)
Release:        5.4
Codename:       Final
这个命令适用于所有的linux包括Redhat、SuSE、Debian、Centos等发行版。
root@MyMail ~ # uname
Linux
root@MyMail ~ # uname -r
2.6.18-164.el5
[root@localhost ~]# uname -a
root@MyMail ~ # uname
Linux
root@MyMail ~ # uname -r
2.6.18-164.el5
[root@localhost ~]# uname -a
Linux localhost.localdomain 2.6.18-194.el5 #1 SMP Fri Apr 2 14:58:35 EDT 2010 i686 i686 i386 GNU/Linux
以下二种方法适用于RedHat,CentOS
root@MyMail ~ # cat /etc/redhat-release
CentOS release 5.4 (Final)
登录到linux执行rpm -q redhat-release
#rpm -q redhat-release
或CentOS
root@MyMail ~ # rpm -q centos-release
centos-release-5-4.el5.centos.1
**当前****centos** **版本与****redhat****对应的版本的命令**
# cat /proc/version
root@MyMail ~ # cat /etc/redhat-release
CentOS release 5.4 (Final)
登录到linux执行rpm -q redhat-release
# rpm -q redhat-release
或CentOS
root@MyMail ~ # rpm -q centos-release
centos-release-5-4.el5.centos.1
**当前****centos** **版本与****redhat****对应的版本的命令**
# cat /proc/version
Linux version 2.6.9-78.ELsmp (mockbuild@builder16.centos.org) (gcc version 3.4.6 20060404 (Red Hat 3.4.6-10)) #1 SMP Fri Jul 25 00:04:28 EDT 2008
\> 来自 \<[https://www.cnblogs.com/zzdylan/p/9930144.html](https://www.cnblogs.com/zzdylan/p/9930144.html)\>
> 来自 <[https://www.cnblogs.com/zzdylan/p/9930144.html](https://www.cnblogs.com/zzdylan/p/9930144.html)>

View File

@@ -1,9 +1,9 @@
==用户列表文件:====/etc/passwd==
用户组列表文件:/etc/group
查看系统中有哪些用户cut -d : -f 1 /etc/passwd
查看可以登录系统的用户cat /etc/passwd | grep -v /sbin/nologin | cut -d : -f 1
查看用户操作w命令(需要root权限)
查看某一用户w 用户名
查看登录用户who
==用户列表文件:====/etc/passwd==
用户组列表文件:/etc/group
查看系统中有哪些用户cut -d : -f 1 /etc/passwd
查看可以登录系统的用户cat /etc/passwd | grep -v /sbin/nologin | cut -d : -f 1
查看用户操作w命令(需要root权限)
查看某一用户w 用户名
查看登录用户who
查看用户登录历史记录last
\> 来自 \<[https://www.cnblogs.com/todarcy/p/11079228.html](https://www.cnblogs.com/todarcy/p/11079228.html)\>
> 来自 <[https://www.cnblogs.com/todarcy/p/11079228.html](https://www.cnblogs.com/todarcy/p/11079228.html)>

View File

@@ -4,67 +4,85 @@
`df -h (centos-home`==和==`centos-root`==每人的名字可能不一样==
```
```
) vgdisplay (
```
```
==查看空闲磁盘大小)==``
4. 备份home分区文件
```
```
tar cvf /tmp/home.tar /home
```
```
6. 卸载/home如果无法卸载先终止使用/home文件系统的进程
`umount /home` ==(卸载)==
```
```
fuser -km /home/
```
```
==(终止)==``
8. 删除/home所在的lv
```
```
lvremove /dev/mapper/centos-home
```
```
10. 扩展/root所在的lv
```
```
lvextend -L +50G /dev/mapper/centos-root
```
```
12. 扩展/root文件系统
```
```
xfs_growfs /dev/mapper/centos-root
```
```
14. 重新创建home lv
```
```
lvcreate -L 50G -n /dev/mapper/centos-home
```
```
16. 创建文件系统
```
```
mkfs.xfs /dev/mapper/centos-home
```
```
18. 挂载home
```
```
mount /dev/mapper/centos-home
```
```
20. home文件恢复
`tar xvf /tmp/home.tar -C /home/`
\> 来自 \<[https://www.jianshu.com/p/27c87f390175](https://www.jianshu.com/p/27c87f390175)\>
\> 来自 \<[https://www.jianshu.com/p/27c87f390175](https://www.jianshu.com/p/27c87f390175)\>
> 来自 <[https://www.jianshu.com/p/27c87f390175](https://www.jianshu.com/p/27c87f390175)>
> 来自 <[https://www.jianshu.com/p/27c87f390175](https://www.jianshu.com/p/27c87f390175)>

View File

@@ -1,12 +1,12 @@
/usr 系统级的目录可以理解为C:/Windows//usr/bin 存放应用程序;/usr/share 存放共享数据,/usr/lib 存放不能直接运行的却是许多程序运行所必需的一些函数库文件可以理解为C:/Windows/System32
/usr 系统级的目录可以理解为C:/Windows//usr/bin 存放应用程序;/usr/share 存放共享数据,/usr/lib 存放不能直接运行的却是许多程序运行所必需的一些函数库文件可以理解为C:/Windows/System32
*比如Java的安装目录我会放在这里。
/usr/local用户级的程序目录可以理解为C:/Progrem Files/。
用户自己编译的软件默认会安装到这个目录下。
/usr/local用户级的程序目录可以理解为C:/Progrem Files/。
用户自己编译的软件默认会安装到这个目录下。
*比如HadoopTomcat的安装目录我一般会放在/usr/目录下
/opt给主机额外安装软件所摆放的目录。用户级的程序目录可以理解为D:/Softwareopt有可选的意思这里可以用于放置第三方大型软件或游戏当你不需要时直接rm -rf掉即可。在硬盘容量不够时也可将/opt单独挂载到其他磁盘上使用。
*比如临时上传到Linux里的软件tar.gz rpm等文件用作软件仓库。
————————————————
版权声明本文为CSDN博主「佛系亚当」的原创文章遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
/opt给主机额外安装软件所摆放的目录。用户级的程序目录可以理解为D:/Softwareopt有可选的意思这里可以用于放置第三方大型软件或游戏当你不需要时直接rm -rf掉即可。在硬盘容量不够时也可将/opt单独挂载到其他磁盘上使用。
*比如临时上传到Linux里的软件tar.gz rpm等文件用作软件仓库。
————————————————
版权声明本文为CSDN博主「佛系亚当」的原创文章遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接https://blog.csdn.net/adamlinsfz/article/details/84307097