天堂亦有星辰 ——致敬斯蒂芬·威廉·霍金

斯蒂芬·威廉·霍金 | 荒原之梦
斯蒂芬·威廉·霍金
Stephen William Hawking
1942年01月08日,天文学家伽利略逝世300周年纪念日。
1942年01月08日,斯蒂芬·威廉·霍金出生。
1879年03月14日,阿尔伯特·爱因斯坦在德国符腾堡王国乌尔姆市出生。
2018年03月14日,斯蒂芬·威廉·霍金辞世。
 
天下所有的平凡都是一样的平凡,但天下所有的伟大却不尽是一样的伟大。对于一个21岁就患上肌肉萎缩性侧索硬化症的人而言,无论此生平凡或是伟大,都注定要走上一条艰苦卓绝的道路。霍金战胜了不可能战胜的命运,同时也取得了伟大的创造,虽不知是否后无来者,但一定是前无古人。
 
我曾在高中时阅读完了霍金写的《时间简史》,书中对宇宙精彩绝伦的描述不止一次的更新了我对于世界的认知。在《时间简史》中我接触到了活生生的,真正美丽的科学,而不是冷冰冰的试卷和刻板僵硬的氛围。正是霍金在书中对时间和空间的描绘不断地激发了我对于科学与技术的热爱——希望能理解宇宙间万事万物本真的冲动影响了我后来绝大多数的决定,正如霍金先生所说:“我的目标很简单,就是把宇宙整个明白——它为何如此,它为何存在。”
 
我从未在心中确立一个不可撼动的偶像,因为我认为真正永恒的是我们可能永远无法触及的,那个身处宇宙深处的神。但是,如果真的要确立一个地球人的话,那这个人一定是霍金。
 
斯人已逝,然思想犹存。霍金是一位永远高耸的巨人,即便他的灵魂被束缚在了轮椅之上,仍然闪烁着深邃的光芒,在黑洞边缘的“霍金辐射”上诠释着宇宙的美妙。
 
致敬,向那宏伟的宇宙致敬!
致敬,向Stephen William Hawking致敬!

CentOS-7修改主机名

方法一(修改静态主机名):

vi /etc/hostname

注:由于静态主机名是系统初始化时从/etc/hostname中读取的,所以修改其中的内容为自己想要的主机名即可实现对静态主机名的修改。

之后reboot以生效。

方法二(修改瞬态主机名):

hostname aaa

注:aaa为新主机名。

查看主机名:

hostname

上述命令查看主机名发现显示的主机名是aaa ,但是命令行提示符前面的主机名并没有改变。此时如果是在纯文本界面,使用Alt+Fn+F3 或Alt+F3 组合键即可以新的主机名(aaa)进行登陆,如果在图形化界面中,直接打开一个新的模拟终端就可以看到新的主机名(aaa)了。

注:reboot后,该方法所做的修改失效。

方法三(使用hostnamectl修改主机名):

hostnamectl是CentOS-7中新增的一个用于修改主机名的指令。在CentOS中有“static静态”、“transient瞬态”和“pretty灵活”三种主机名命名方式(在static和transient形式的主机名中不允许出现特殊字符和空格,而在pretty形式的主机名中则没有这些限制,pretty形式的主机名只是用于展示给终端用户。),使用hostnamectl可以很方便的修改这三种状态的主机名。

同时修改static, transient, pretty三种形式的主机名:

hostnamectl set-hostname aaa

仅修改静态形式主机名:

hostnamectl --static set-hostname aaa

仅修改瞬态形式主机名:

hostnamectl --transient set-hostname aaa

仅修改灵活形式主机名:

hostnamectl --pretty set-hostname aaa

注:使用方法三修改后需reboot以生效。

SSH免密码登录Linux服务器

操作环境

客户机操作系统:Ubuntu Linux
服务器操作系统:CentOS Linux

原理说明

免密登陆其实就是使用密钥文件代替密钥进行身份验证。这里的密钥文件就是公钥和对应的私钥,将公钥部署在远程服务器上,私钥部署在客户机上。在服务器和客户机上配置好密钥文件后,当客户机向服务器发起连接请求的时候,客户机会向服务器表达使用密钥文件进行身份验证的请求并向服务器发送公钥;随后,服务器会在客户机对应用户的主目录下找寻公钥文件并与收到的公钥文件进行对比;如果公钥文件的对比结果一致,服务器会使用公钥加密一个文件发送给客户机;客户机在收到公钥加密的文件后使用自己的私钥进行解密,然后将解密后的内容发送给服务器;如果服务器收到的解密内容与原内容一致则身份验证成功,两台计算机之间成功建立连接。

实现方法

使用ssh-keygen 生成公钥与私钥,将公钥部署在服务器上,私钥部署在客户机上。

具体步骤

1.生成密钥文件
命令:

ssh-keygen -t rsa -P "password"

之后弹出提示:

Generating public/private rsa key pair.
Enter file in which to save the key (/home/yourname/.ssh/id_rsa):

此时如果不希望改变密钥文件的默认保存路径则直接回车即可。

注0:上述命令中的password是用于加密私钥的密码。为了尽可能保证私钥不被非授权使用,我建议在创建密钥文件时务必设置加密私钥的密码,不可省略。

这时,在/home/yourname/.ssh/id_rsa 目录下就可以看到id_rsa 、id_rsa.pub 和known_hosts 这三个文件。
其中,
id_rsa:私钥文件
id_rsa.pub:公钥文件
know_hosts:已知主机的公钥文件

2.复制公钥至服务器
命令:

scp -p ~/.ssh/id_rsa.pub root@<server ip>:/root/.ssh/authorized_keys

之后会要求输入远程服务器的登陆密码,输入密码后回车即可。

当然,也可以登录服务器后用 vim 编辑器打开 .ssh/ 目录下的 authorized_keys 文件,将本地 id_rsa.pub 文件中的内容复制进去,之后保存退出即可。若有多个公钥,则在 authorized_keys 文件中换行后继续输入公钥文件中的内容即可。

3.登录服务器
命令:

ssh root@<server ip>

回车后会要求输入 本地私钥的解密密码(即第一步中设置的“password”),解密私钥后就可以登录服务器了。

注1:上文路径中出现的“yourname”是指你登陆客户机时使用的用户名。

注2:在部署公钥的时候虽然使用了服务器相应登陆账户(如root账户)的密码,但是之前所生成的公钥与私钥和这个密码并没有联系,输入该密码仅仅是为了登陆远程服务器,将公钥文件部署到服务器上。

更新记录

2022 年 10 月 26 日第 02 次更新
2020 年 02 月 26 日第 01 次更新

在基于Windows系统的PHP虚拟主机上实现域名的301永久重定向

作者:荒原之梦

操作背景:

当网站在更换或添加域名、进行网址规范化或删除旧页面时,出于对用户使用体验和搜索引擎优化方面的考虑就需要进行301永久重定向。

操作环境:

PHP环境的Windows系统虚拟主机。

操作原理:

本文所介绍的301永久重定向是通过ISAPI_Rewrite这个用于IIS的URL重写组件实现的,关于ISAPI_Rewrite的更多信息可以参见:
1 ISAPI_REWRITE百度百科:Here
2 ISAPI_Rewrite 3 – Apache .htaccess mod_rewrite compatible module for IIS :Here

具体步骤如下:

1 新建一个文本文档,输入以下内容:
[ISAPI_Rewrite]
# 3600 = 1 hour
CacheClockRate 3600
RepeatLimit 32
# Protect httpd.ini and httpd.parse.errors files
# from accessing through HTTP

#将daohanggou.wang重定向到daohanggou.cn
RewriteCond Host: ^daohanggou\.wang$
RewriteRule (.*) http\://daohanggou\.cn$1 [I,RP]

#将www.daohanggou.wang重定向到daohanggou.cn
RewriteCond Host: www\.daohanggou\.wang$
RewriteRule (.*) http\://daohanggou\.cn$1 [I,RP]

#将www.daohanggou.cn重定向到daohanggou.cn
RewriteCond Host: www\.daohanggou\.cn$
RewriteRule (.*) http\://daohanggou\.cn$1 [I,RP]
2 将该文件上传到虚拟主机的web 目录(有的虚拟主机中相应目录的名称为public_html ),重命名为httpd.ini .
之后可以通过http状态查询工具检测301重定向是否成功。
注:上述方法不需要虚拟主机支持伪静态。

Linux系统下解压后缀名为”.tar.xz”的文件

作者:荒原之梦

1 解压”.xz”

xz -d your_file_name.tar.xz

注:运行上述命令后your_file_name.tar.xz会被删除

2 解包“.tar”

tar -xvf your_file_name.tar

注:运行上述命令后your_file_name.tar会被删除

注:
1.“.xz”是一种压缩文件格式。Linux系统中常使用的压缩文件格式还有“.gz”,”.bz2″等。关于xz的更多内容,可以使用“man xz”查看。
2.“.tar”是一个文件打包格式。tar命令本身只用于打包或解包,tar本身并没有压缩和解压缩的功能。关于tar的更多内容,可以使用“man tar”查看。

Debian Linux虚拟机安装VirtualBox增强功能

作者:荒原之梦

本文中使用的Debian是安装在VirtualBox中的虚拟机,具体参数如下:
Debian版本:Linux debian 4.9.0-4-amd64
VirtualBox版本:VirtualBox 5.2.6

Debian虚拟机安装VirtualBox增强功能的具体步骤如下:

1 前期准备

打开Debian虚拟机并登陆,依次点击VirtualBox的“设备->安装增强功能”。
这时我们可以在Debian的桌面上看到一个光盘图标,例如我的计算机上图标的名称是:
VBox_GAs_5.2.6

在VBox_GAs_5.2.6图标上右键选择“挂载卷”,之后我们就可以在“/media/cdrom0”路径下看到VBox_GAs_5.2.6中的内容了。

切换到/media/cdrom0路径下:

cd /media/cdrom0

2 安装内核头文件(root用户下执行)

注:如果不执行这一步,直接执行下一步(第3步)可能会出现如下报错:
his system is currently not set up to build kernel modules.
Please install the gcc make perl packages from your distribution.
Please install the Linux kernel “header” files matching the current kernel
for adding new hardware support to the system.
The distribution packages containing the headers are probably:
报错的原因是没有安装内核头文件,因此,我们首先安装内核头文件。

获取系统内核版本信息:

uname -r

例如在我的计算机上上述命令的执行结果是:

4.9.0-4-amd64

下一步命令我们需要使用这个参数。

安装内核头文件,命令:

apt-get install build-essential linux-headers-内核版本号

例如在我的计算机上需要执行的命令就是:

apt-get install build-essential linux-headers-4.9.0-4-amd64

3 安装VBox增强功能(root用户下执行)

进入/media/cdrom0路径:

cd /media/cdrom0

开始安装:

sh ./VBoxLinuxAdditions.run

4 重启

reboot

5

在VirtualBox的“设备”选项下依次将“共享粘贴板”和“拖放”设置成“双向”即可在虚拟机与物理机之间共享粘贴板并实现文件的互相拖放,Debian的显示分辨率也会自动调整。

我以为的远方是一回首就是故乡

作者:荒原之梦

当熟悉的场景出现在异乡陌生的梦里
一只小狗的命运主宰了整个剧情的发展

大地长出的浮雕
成了用于交易的创造
在那个光怪陆离的世界
当一条街道成了一个准则
一碗面条也成了一种象征

梦里的人啊
从未意识到自己就是那个世界的主宰
或许主宰从不属于他所主宰的世界
只有从梦中醒来
才会意识到梦的荒诞

一条路
两个方向
看啊
地球是那样优美的圆
上帝早已原谅了那些走错方向的你我
无论走向哪一个方向
都会回到故乡

000webhost虚拟主机绑定自定义二级域名

作者:荒原之梦

前言:

最近想给导航狗IT信息导航做一个文件服务器专门存放文件,以提供引用或下载。于是,我在000webhost上申请了一台免费虚拟主机,并给这个虚拟主机空间绑定了一个导航狗的二级域名files.daohanggou.wang .
000webhost提供两种绑定域名的方式,分别是”Park domain”和”Point domain”. 根据000webhost官网的介绍,这两种设置自定义域名的方式适用的情景如下:
Park domain – Park domain to 000webhost nameservers. When you want to access your website without www (Recommended)
Point domain – Have a domain name, but do not want to change namservers. When you want to have full control of your DNS zone
经测试,Park domain的方式无法绑定二级域名,下面是使用Point domain的方式绑定自定义二级域名的过程。

前期准备:

1 拥有一个顶级域名

本文中使用的域名是在阿里云(万网)注册的。
阿里云网址:https://www.aliyun.com

2 拥有一台虚拟主机

本文中使用的是在000webhost注册的免费虚拟主机。
000webhost网址:https://www.000webhost.com

具体步骤如下:

1 设置解析

登陆阿里云,依次打开:
“控制台->域名与网站(万网)->域名”
找到我们要设置二级域名的顶级域名,点击“解析->添加解析”。
解析参数如下:
记录类型:CNAME "将域名指向另外一个域名"
主机纪录:files "这里根据你想设置的二级域名的名字填写"
解析路线:默认
记录值: "填写000webhost提供的免费二级域名"
TTL值:10分钟

2 添加域名

登陆000webhost,点击”Set web address”
这时会弹出一个提示你购买域名的窗口,由于我们希望绑定自己已有的二级域名,所以点击”It’s OK, I don’t mind 000webhost branding”
之后,我们会看到”Own domain”和”Buy domain”两个按钮, 点击”Own domain”默认的是进行”Park Domain”操作,但是Park domain并不支持绑定二级域名,而且如果要绑定顶级域名还需要将域名的DNS服务器设置成000webhost提供的DNS服务器。所以,我们向下滚动页面,找到”Add domain”,点击打开,选中”Point domain”, 在”Domain”的输入框里填入第一步设置好解析的二级域名,例如:
files.daohanggou.wang
点击”Save”
至此,自定义的二级域名已经绑定了虚拟主机,可以使用自定义二级域名访问了,例如:
文件服务器-导航狗IT信息导航:http://files.daohanggou.wang/

远程代码仓库URL地址变更后本地仓库的配置方法

作者:荒原之梦
今天修改了一个远程仓库的项目名称,导致Git仓库的地址发生了变化,Push代码时显示”Git仓库找不到“。
下面是远程仓库地址变更后本地仓库的配置方法:
进入本地仓库根目录,右键打开Git Bash,输入:
git remote set-url origin <new url>
至此,本地仓库完成仓库地址配置更新。

Windows上使用Thunderbird与GPG发送和解密公钥加密的电子邮件

作者:荒原之梦

非对称加密的原理:

最先出现的加密方法是对称加密。在对称加密算法中是不区分公钥和私钥的,加密与解密使用的都是同一个密码。但是很显然,如果需要对信息进行加密与解密的不是同一个人,使用对称加密算法就存在密钥泄露的极大可能。因此,一种非对称加密的想法在1974年最先由Ralph C. Merkle提出。目前主要的非对称加密算法有:RSA、EIGamal、ECC、背包算法和D-H公钥加密算法等。

1.公钥加密信息的工作过程:

A使用公钥加密算法创建一个自己的公钥A-1和私钥A-2。私钥A-2由A自己保管,不对外公开。公钥A-1则通过一些可信的渠道公布出去,例如使用了HTTPS的网页(这里之所以强调“HTTPS”是因为HTTPS协议对传输的信息做了加密,如果将公钥放在使用HTTP协议的网页上,由于HTTP是明文传输网页数据的,因此在传输的过程中有可能因为遭遇中间人攻击等而出现公钥被修改的可能。前文提到“可信的渠道”也是出于此原因。)、公钥服务器或者面对面传递公钥。B在拿到A的公钥A-1后,如果B想给A发送加密信息就可以使用公钥A-1进行加密后再发送给AA收到加密信息后使用自己知道的,与公钥A-1对应的私钥A-2解密B发来的加密信息。

上述信息加密过程的一个应用就是本文接下来要介绍的发送使用公钥加密的电子邮件并用对应的私钥解密该邮件。公钥加密算法还有一个应用就是用于身份认证,即数字签名技术。

2.数字签名的工作过程:

传统的签名可以通过签字人笔迹的唯一性确定信息的所有者。在计算机系统中,我们使用公钥加密算法进行数字签名。首先,仍然是生成一对公钥和私钥,公钥公布,私钥私有,但是这一次私钥不是用来解密的,而是用于加密的。由于私钥的与公钥具有数学上的关联性(虽然公钥与私钥具有相关性,但是使用目前主流的非对称加密算法并且在密钥长度足够复杂的情况下还没有找到破解这种关联性的有效的方法。20180210日注),即一个公钥只对应一个私钥,只要一份文件可以通过一个公钥解密,那么在一般情况这份文件就是由这个公钥所对应的私钥的持有者加密的。这样就可以进行身份认证。

总结一下:

信息加密中,公钥加密,私钥解密;

数字签名中,私钥加密,公钥解密;

无论信息加密还是数字签名都是:公钥公开,私钥保密。

前期准备:

  1. 下载和安装Thunderbird。

Thunderbird下载地址:https://www.mozilla.org/en-US/thunderbird/

    1. Thunderbird上登陆一个电子邮件帐号。
  1. 如果想对电子邮件加密技术有一个大致的了解,可以参考我的这篇博文:电子邮件加密技术初探

本文要用到的工具的介绍:

1.Thunderbird

这是一个邮件客户端,有很多插件可以使用,支持WindowsLinuxmacOS.

2.GPG

GPGGnuPG,是由自由软件基金会Free Software Foundation 开发的用于替代商业软件PGP的一款免费软件,可以用来加密数据以及进行数字签名。PGP中使用了具有专利的算法,不能免费使用,而GPG中则没有使用具有专利的算法,可以免费使用。

3.Enigmail
EnigmailThunderbird的一个插件,可以对将要发送的邮件进行GPG公钥加密或对收到的使用GPG加密的邮件进行解密。

发送公钥加密的电子邮件的过程如下:

1.下载安装GPG并创建密钥对
GPG
官网下载地址:https://www.gnupg.org/download/index.html

或者也可以使用Gpg4winGpg4win官网:https://www.gpg4win.org/index.html

本文中使用的是Gpg4win.

Gpg4win安装完成后在默认情况下会打开Kleopatra,点击“创建密钥对”。

输入名字和邮箱,依次点击:下一步>创建

创建的过程中会要求设置一个密码以保护将要生成的私钥,这样可以防止私钥被越权使用。
稍等一会我们就可以看到“密钥对已成功创建”的窗口提示。在该窗口里我们还可以看到密钥指纹(密钥指纹可以用来验证密钥在传输的过程中是否被修改。指纹的另一个重要用途就是,由于公钥服务器并不会对上传的公钥进行身份验证,因此任何人都可以以你的名义上传公钥,为了防止这种情况发生,你可以在你的个人主页上公布自己的密钥指纹,以提供给下载了你的公钥的人用于验证公钥的真伪。)以及“生成您的密钥对副本”、“通过电子邮件发送公钥”和“将公钥上传到目录服务”(如果将公钥上传到了公钥服务器,不同的公钥服务器之间会相互交换公钥,最终你上传到一台公钥服务器上的公钥会遍布全网所有公钥服务器。之后,任何人都可通过该公钥对应的电子邮件地址或者密钥ID查找对应的公钥,从而向我们发送加密信息)这三个选项。

密钥对创建完成后,我们可以在Kleopatra中看到刚才创建的项目,选中该项目可以导出“.asc”格式的公钥,右键可以进行“更改到期日期”等更多操作。

2.在Thunderbird中搜索安装插件Enigmail并配置密钥文件
关于在Thunderbird中安装插件的步骤,可以参考我的这篇文章Windows上设置Mozilla Thunderbird邮件客户端后台运行

打开Thunderbird的设置,依次找到Enigmail->Key Management->File->Import Keys from File 可以导入某个邮箱地址的公钥文件或者在搜索框中通过输入邮箱地址或密钥ID在公钥服务器上搜索对应的公钥。如果已使用GPG创建密钥对的电子邮件地址已经登陆了Thunderbird可以直接在Key Management里看到相关信息,不需要进行密钥文件配置。

安装Enigmail后,如果我们的Thunderbird上的一个邮箱账户没有设置GPG公钥,当我们使用该账户发信时就会弹出如下的警报:

The key ID 'XXX@XXX.XXX' configured for the current identity does not yield a usable OpenPGP key.

Please ensure that you have a valid, not expired OpenPGP key and that your account settings point to that key.

If your key is not expired, then check if you did set Owner trust to full or ultimate

这种情况下,除非对该账号设置GPG公钥或者卸载Enigmail,否则就无法在发送邮件时解除该警报,也无法在Thunderbird上使用该账号发送邮件。

3.发送加密电子邮件
假设我们需要向AAA@AAA.AAA这个电子邮件地址发送GPG加密邮件,首先应该使用第二步介绍的方法导入AAA@AAA.AAA对应的公钥文件(该文件将用于加密邮件),或者通过邮件地址AAA@AAA.AAA或对方的密钥ID在公钥服务器上搜索其公钥,搜索到的公钥需要进行指纹验证以确保该公钥不是伪造的。
当我们第一次使用一个已经设置
GPG公钥的电子邮件地址向另外一个具有GPG公钥的电子邮件地址发送邮件时会弹出确认提示:

You did not yet configure Enigmail security for the selected identity. Do you want to do this now?

点击Configure ,选中Enable OpenPGP support (Enigmail) for this identity ,点击OK . 之后会弹出窗口询问我们是想使用GPG进行加密还是进行身份认证以及使用哪种GPG加密方式:

Enigmail Encryption & Signing Settings

Encrypt Message

Sign Message

Use Inline PGP
Use PGP/MIME

这里我们选择Encrypt Message Use PGP/MIME ,点击OK .

在发送邮件之前,我们可以通过点击工具栏上的小锁在加密与不加密之间切换。

4.解密收到的加密电子邮件

假设我们的一个邮箱地址BBB@BBB.BBB接收到一封GPG加密的电子邮件(该邮件使用的是BBB@BBB.BBB的公钥进行的加密),那么,我们就可以在安装有GPG软件的电脑上(且该电脑上存储有BBB@BBB.BBB的私钥)使用邮件客户端,通过输入BBB@BBB.BBB的私钥加密密码的方式解密该邮件。在网页端登陆邮箱,需要配合插件来解密GPG加密的邮件。

1:前面设置密钥对时设置的密码并不是私钥,而是加密私钥的密码,仅仅使用该密码是不可以解密邮件的,必须配合私钥文件一起才能解密。

2GPG加密的邮件并不会加密邮件地址和标题。

Git Push:error: Couldn’t set refs/remotes/origin/master;error: update_ref failed for ref ‘refs/remotes/origin/master’:

作者:荒原之梦

今天使用Git Push代码时产生错误:

Rename from 'XXXX/.git/refs/remotes/origin/master.lock' to 'XXX/.git/refs/remotes/origin/master' failed. 
Should I try again? (y/n)
输入y 还会重复出现上述提示,输入n 则会出现下面的错误提示:
error: Couldn't set refs/remotes/origin/master error: update_ref failed for ref 'refs/remotes/origin/master':
不过,虽然出现了如上错误提示,但是代码是可以正确Push到远程仓库的。

问题解决过程:

进入.git/refs/remotes/origin 目录:
cd .git/refs/remotes/origin
发现并没有master.lock 这个文件,所以想到是否可以通过创建master.lock 这个文件解决问题,输入:
echo ref: refs/remotes/origin >master.lock
创建master.lock .
经测试,问题解决。

RedHat 7.0及CentOS 7.0禁止Ping的三种方法(附:ICMP数值类型与功能表)

作者:荒原之梦
前言:
“Ping”属于ICMP协议(即“Internet控制报文协议”),而ICMP协议是TCP/IP协议的一个子协议,工作在网际层。ICMP协议主要用于传输网络是否连通、主机是否可达以及路由是否可用等控制信息。Ping可以回显TTL生存时间,网络延迟等信息,而且响应Ping请求也会消耗服务器资源。因此,在服务器上禁用ICMP响应可以尽可能的隐藏服务器在Internet上的踪迹,降低受攻击面。本文介绍三种方法禁用(或启用)ICMP响应,即禁止(或允许)Ping.

操作环境:

RedHat 7.0(CentOS 7.0的操作方法与此一致)

方法一 临时禁用ICMP协议

修改文件/proc/sys/net/ipv4/icmp_echo_ignore_all 的值。
切换到root,输入命令:
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
这样就将/proc/sys/net/ipv4/icmp_echo_ignore_all 文件里面的 0 临时改为了1 ,从而实现禁止ICMP报文的所有请求,达到禁止Ping的效果,网络中的其他主机Ping该主机时会显示“请求超时”,但该服务器此时是可以Ping其他主机的。
如果想启用ICMP响应,则输入:
echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all
注0:由于/proc/sys/net/ipv4/icmp_echo_ignore_all 这个文件是只读的,即使我们使用root用户登陆,vim打开/proc/sys/net/ipv4/icmp_echo_ignore_all ,将里面的 0 该为1 之后使用qw! 强制保存也无法完成修改。因此上面这个方法只是临时的,一旦服务器重启就又会回到默认的 0 状态(假设修改前/proc/sys/net/ipv4/icmp_echo_ignore_all 里面的值就是 0 )。如果想永久修改(当然也可以改回来,只是不再受服务器关机或重启的影响)请使用方法二或方法三。

方法二 永久禁用ICMP协议:

禁用ICMP协议,输入:
vim /etc/sysctl.conf
添加一条信息:
net.ipv4.icmp_echo_ignore_all = 1
保存并退出。
输入:
sysctl -p
使配置生效。
启用ICMP协议,输入:
vim /etc/sysctl.conf
将:
net.ipv4.icmp_echo_ignore_all = 1
修改为:
net.ipv4.icmp_echo_ignore_all = 0
如果没有net.ipv4.icmp_echo_ignore_all = 1 就添加:
net.ipv4.icmp_echo_ignore_all = 0
保存并退出。
输入:
sysctl -p
使配置生效。
注1:如果想启用ICMP响应,不能直接在/etc/sysctl.conf 里删除net.ipv4.icmp_echo_ignore_all = 1 之后sysctl -p . 这样做仍然是禁止Ping的状态,此时使用命令:vim /proc/sys/net/ipv4/icmp_echo_ignore_all 查看发现其值仍然是1 , 即仍处于拒绝ICMP响应的状态。

方法三 配置IPTABLES防火墙

Iptables防火墙是集成于Linux内核的IP信息包过滤系统。方法三不能和上面的方法一和方法二组合使用。即,在使用方法三时不能已经使用方法一或方法二禁止了Ping.
禁止Ping,输入:
iptables -A INPUT -p icmp --icmp-type 8 -s 0/0 -j DROP
停止禁用Ping,输入:
iptables -D INPUT -p icmp --icmp-type 8 -s 0/0 -j DROP

上面两条命令的简要解释:

-A:添加防火墙规则.
INPUT:入站规则.
-p icmp:指定包检查的协议为ICMP协议.
--icmp-type 8:指定ICMP类型为8(关于ICMP类型与数值的对应关系和功能,见注3).
-s:指定IP和掩码,“0/0”表示此规则针对所有IP和掩码.
-j:指定目标规则,即包匹配则应到做什么,"DROP"表示丢弃.
注2:由于方法三是对防火墙进行的设置,所以使用方法三禁止Ping后只会阻止来自外网的Ping请求,内网主机的Ping请求仍然会正常响应。使用方法一和方法二禁止Ping后不仅会阻止外网的Ping请求也会阻止内网的Ping请求。
注3:ICMP数值类型与功能表
Type
Code
Description
Query
Error
0
0
Echo Reply
x
3
0
Network Unreachable
x
3
1
Host Unreachable
x
3
2
Protocol Unreachable
x
3
3
Port Unreachable
x
3
4
Fragmentation needed but no frag. bit set
x
3
5
Source routing failed
x
3
6
Destination network unknown
x
3
7
Destination host unknown
x
3
8
Source host isolated (obsolete)
x
3
9
Destination network administratively prohibited
x
3
10
Destination host administratively prohibited
x
3
11
Network unreachable for TOS
x
3
12
Host unreachable for TOS
x
3
13
Communication administratively prohibited by filtering
x
3
14
Host precedence violation
x
3
15
Precedence cutoff in effect
x
4
0
Source quench
5
0
Redirect for network
5
1
Redirect for host
5
2
Redirect for TOS and network
5
3
Redirect for TOS and host
8
0
Echo request
x
9
0
Router advertisement
10
0
Route solicitation
11
0
TTL equals 0 during transit
x
11
1
TTL equals 0 during reassembly
x
12
0
IP header bad (catchall error)
x
12
1
Required options missing
x
13
0
Timestamp request (obsolete)
x
14
Timestamp reply (obsolete)
x
15
0
Information request (obsolete)
x
16
0
Information reply (obsolete)
x
17
0
Address mask request
x
18
0
Address mask reply

修改WordPress后台默认登陆地址提高网站安全性

作者:荒原之梦
 
安装完WordPress后,默认的登陆地址就是:
http://XXX.XXX/wordpress/wp-admin/
(其中”XXX.XXX”表示你的网站域名)
由于这个时候网站后台登陆地址相当于是公开的,所以就很容易受到攻击,例如暴力破解。
下面我们通过在WordPress的默认登陆地址后面添加一段标记代码的方法防止发生这种情况。
 

具体步骤如下:

 

1 打开当前使用的WordPress主题中的functions.php文件

 
在末尾加上代码:
 
add_action('login_enqueue_scripts','login_protection');  
function login_protection(){  
    if($_GET['master'] != 'hello')header('Location: https://XXX.XXX');  
}

2 保存并退出

 
1 其中master(标记信息) 、hello(标记信息) 和XXX.XXX(网址) 都可以自定义。
2 URL是区分大小写字母的,所以设置标记信息时大小写字母和数字都可以使用(参见:HTML and URLs )。
3 由于URL编码中特殊字符一般都有专用含义,所以如果标记信息中使用了特殊字符需要确认一下是否能正常登陆。
 
这样WordPress后台的登陆地址就变成了:

 

http://www.XXX.XXX/wordpress/wp-login.php?master=hello
 
由于网站安装目录不同,如果上述地址无法登陆,可以尝试使用下面的地址登陆

 

http://www.XXX.XXX/wp-login.php?master=hello
 
这样一来,如果登陆地址错误就会跳转到XXX.XXX .
如果https://XXX.XXX 是你的网站的首页,那么就会跳转到首页。

解决WordPress用户名密码都正确但点击登陆就清空密码的问题

作者:荒原之梦

问题产生的环境与问题描述:

今天我在浏览器的书签里将我保存的用于登陆WordPress的书签名字改了一下,之后再登陆WordPress就出现提示说Cookies被阻止,要启用Cookies,但是启用了Cookies后再输入账号和密码进行登陆却发现一点击“登陆”按钮,密码就会被清空而且无法登陆。

解决办法:

将登陆地址由:
http://zhaokaifeng.com/wordpress/wp-admin/
改为:
http://zhaokaifeng.com/wordpress/wp-admin/index.php
之后换了一个浏览器重新在:
http://zhaokaifeng.com/wordpress/wp-admin/
登陆,发现可以正常登陆。
至此,问题解决,尚未发现异常。

Windows上使用Git托管代码到Coding

作者:荒原之梦

Git简介:

Git是一款分布式版本控制系统,可用于项目的版本管理。Git可以管理本地代码仓库与远程代码仓库间的连接以及进行版本控制,使得我们可以在本地离线进行修改等操作,之后再将代码提交到远程代码仓库,方便团队协作。

Git官网:

https://git-scm.com/

Git百度百科:

https://baike.baidu.com/item/GIT/12647237?fr=aladdin

Git Github主页:

https://github.com/git

在使用Git与远程仓库进行代码交互的时候会遇到一些操作动作,如“克隆”、“推送”和“拉取”等,这些动作的英文名称以及对应的含义如下:

名称
功能
Clone(克隆)将远程仓库里面的代码复制一份到本地
Push(推送)将代码推送到远程仓库中
Fetch(获取)获取远程仓库中发生变化的代码
Merge(合并)将远程仓库中发生变化的代码与本地存储的没有发生变化的代码合并以使本地仓库和远程仓库代码保持一致
Pull(拉取)功能等同于“fetch+merge”
Commit(提交)将修改推送到本地仓库中
Fork将代码从别人的远程仓库复制到自己的远程仓库
Pull request将自己远程仓库中的代码复制一份到别人的远程仓库(该操作将会询问对方是否接受)

如果要将修改Push到别人的远程仓库,必须首先Fork别人的代码到自己的远程仓库,修改完再Push. 而不能直接Clone别人的代码到本地,这样再想Push到别人的远程仓库是不行的。另外,经实践发现,直接Clone自己的远程仓库到本地再Push到自己的远程仓库也是不行的。

具体步骤如下:

1 下载并安装Git

如无自定义需要,使用默认配置安装即可。

2 在Coding上添加一个项目

在荒原之梦网(zhaokaifeng.com)的这篇文章 使用Coding Pages托管网站中有在 Coding 上添加一个项目的介绍,可以参考。

3 配置SSH

生成SSH公钥,输入:

ssh-keygen -t rsa -C XXX@XXX.XXX

XXX@XXX.XXX 为注册Coding时使用的邮箱。

之后会提示输入用于保存公钥的文件:

Enter file in which to save the key (/c/Users/Master/.ssh/id_rsa):

这里直接回车,使用默认的文件id_rsa 保存即可。

接下来会提示:

Enter passphrase (empty for no passphrase):

这里是提示我们是否要为提交代码的操作设置密码。 如果设置密码则在提交项目时就需要使用密码。回车表示密码为空,即不设置密码。

之后提示:

Enter same passphrase again:

再次回车或输入刚才设置的密码。

之后会看到公钥成功创建的提示:

Your public key has been saved in /c/Users/Master/.ssh/id_rsa.pub.

查看公钥,输入:

cat /c/Users/Master/.ssh/id_rsa.pub

将公钥复制下来,登陆Coding,在我的账户->SSH公钥 处粘贴刚才生成的公钥,之后点击添加 。

如果粘贴后公钥末尾有空白行或空格要删掉它们。

4 创建本地代码仓库并Clone远程代码仓库

在本地新建一个文件夹A。

 “A”为远程仓库的仓库名

进入A,右键点击Git Bash Here .

初始化仓库,输入:

git init

之后会在A里面产生一个.git 隐藏文件夹。

Clone远程仓库(远程仓库中没有代码也可以这样执行),在本地仓库中输入:

git clone A https://git.coding.net/XXXXXX.git

“A”为远程仓库的仓库名

其中https://git.coding.net/XXXXXX.git  为远程仓库的HTTPS地址,可以在项目的代码 标签处找到:

Windows上使用Git托管代码到Coding | 荒原之梦
图 1

之后会弹出登录凭证验证窗口:

Windows上使用Git托管代码到Coding | 荒原之梦
图 2

输入Coding的用户名(一般为邮箱)和登陆密码点击确定 即可。

如果远程仓库里面有代码,Clone执行完毕后我们就可以在本地看到远程仓库中的代码了。

5 将本地代码仓库的更改推送到远程代码仓库

现在假设我们在本地代码仓库新建了一个文件1.txt . 下面演示如何将这个更改推送到远程代码仓库:

进入本地代码仓库中,查看代码状态,输入:

git status

这时Git会用红色字体显示1.txt ,说明这个文件是和远程仓库中的内容不一致的。

将所有更改都加入到暂存区域,准备上传:

git add .

也可以使用

git add 文件名

指定加入到暂存区域的文件。

但是当我们输入:

git commit

准备提交代码时,回车却出现了下面的警示信息:

*** Please tell me who you are.

Run

git config --global user.email "you@example.com"

git config --global user.name "Your Name"

to set your account's default identity.

Omit --global to set the identity only in this repository.

根据上述提示,输入:

git config --global user.email "you@example.com"

回车。

输入:

git config --global user.name "Your Name"

回车。

再次执行:

git commit

这次没有出现错误提示,而是打开了一个文本。按下i 开始输入所提交代码的备注,之后保存并退出。

之后输入:

git push origin master

这时我们在浏览器上再刷新Coding账号中的该项目就可以看到刚才推送过来的1.txt 文件了。

输入:

git status

会看到:

nothing to commit, working directory clean

至此,本地更改已经全部推送到远程仓库。


荒原之梦网全部内容均为原创,提供了涵盖考研数学基础知识、考研数学真题、考研数学练习题和计算机科学等方面,大量精心研发的学习资源。

豫 ICP 备 17023611 号-1 | 公网安备 - 荒原之梦 豫公网安备 41142502000132 号 | SiteMap
Copyright © 2017-2024 ZhaoKaifeng.com 版权所有 All Rights Reserved.

Copyright © 2024   zhaokaifeng.com   All Rights Reserved.
豫ICP备17023611号-1
 豫公网安备41142502000132号

荒原之梦 自豪地采用WordPress