Write the Code. Change the World.

分类目录
1月 29

先更新yum并安装依赖

尽可能的安装最新版本。如果 yum 安装的不是最新版本,可以先卸载掉,再下载源码编译安装。yum 安装新包之前,可以先查看下该包是否是最新版本。编译安装后,可以 ls -l 建立软链接,下次有新包,可以再覆盖安装。

# 更新 yum 包
yum update

# 查看某个安装,比如 gcc。 它会显示是否存在该安装,该安装的版本,是否已经安装等信息。
yum list gcc

需要安装:

  1. gcc gcc-c++。它可以编译 C,C++,Ada,Object C和Java等语言。
  2. pcre pcre-devel。PCRE(Perl Compatible Regular Expressions) 是一个Perl库,包括 perl 兼容的正则表达式库。nginx 的 http 模块使用 pcre 来解析正则表达式,所以需要在 linux 上安装 pcre 库,pcre-devel 是使用 pcre 开发的一个二次开发库。
  3. nginx 使用 zlib 对 http 包的内容进行 gzip。可是,不是用 Brotli 么。两个都装,装了也没事。gzip 编译安装来个。如果不编译,使用 yum 安装,版本达不到要求。
  4. bbzip2 是一个基于Burrows-Wheeler 变换的无损压缩软件,压缩效果比传统的LZ77/LZ78压缩算法来得好。
yum install gcc gcc-c++

yum install pcre pcre-devel

yum install zlib zlib-devel

yum install bzip2

手动安装 openssl3

https://www.openssl.org/source/

当前最新版本是 openssl-3.0.7.tar

cd /usr/local/src/openssl

wget https://www.openssl.org/source/openssl-3.0.7.tar.gz

tar -xzvf openssl-3.0.7.tar.gz

mkdir /usr/local/openssl

cd openssl-3.0.7

# 指定安装路径为 /usr/local/openssl
./config --prefix=/usr/local/openssl

如果出现如下这样的报错信息,需要安装 perl-CPAN

This is perl 5, version 26, subversion 3 (v5.26.3) built for x86_64-linux-thread-multi
(with 57 registered patches, see perl -V for more detail)

Copyright 1987-2018, Larry Wall

Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl".  If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.

安装 perl-CPAN

# 安装perl-CPAN
 yum install -y perl-CPAN
 # 进入CPAN的shell模式,不懂的,遇到确认就直接回车(3+1次),一切默认
 # 过程可能有点慢,需要下载相关依赖,耐心等待执行结果
 perl -MCPAN -e shell
 # 出现 cpan[1]> 提示,输入下边命令继续,时间会有点久
 install IPC/Cmd.pm
 # 出现 cpan[2]>提示,输入 exit 退出
 exit

再重新执行

./config --prefix=/usr/local/openssl

然后,你会发现出现 OpenSSL has been successfully configured 的提示。如果中间环节有问题,请查找解决。

编译安装(这个环节有点久)

make && make install

# 安装完成后,进入 bin 目录
cd /usr/local/openssl/bin
# 查看版本号(发现会报错)
./openssl version

报错如下:

./openssl: error while loading shared libraries: libssl.so.3: cannot open shared object file: No such file or directory

libssl.so.3文件在/usr/local/openssl/lib64目录下面,需要配置到共享库中:

vim /etc/ld.so.conf
# 换行尾部添加
/usr/local/openssl/lib64

# 保存退出,执行下边命令使生效
ldconfig

建立软链接

ln -s /usr/local/openssl/bin/openssl /usr/bin/openssls

# 查看版本号
openssl3 version 

安装 cmake

https://blog.vini123.com/289

当前最新版本 https://github.com/Kitware/CMake/releases/download/v3.25.2/cmake-3.25.2-linux-x86_64.tar.gz

编译安装 zlib (可以先 yum,如果版本不合适,再回来编译按装)

https://blog.vini123.com/299

编译安装zlib2 (可以先 yum,如果版本不合适,再回来编译按装)

https://blog.vini123.com/300

编译安装 libzip (可以先 yum,如果版本不合适,再回来编译按装)

这里还是编译安装吧。php8 对 libzip 要求有点特殊。

https://blog.vini123.com/290

安装 ngx_brotli

https://blog.vini123.com/302

cd /tmp
git clone https://github.com/google/ngx_brotli.git
cd /tmp/ngx_brotli/deps
rm -rf brotli
git clone https://github.com/google/brotli.git
cd /tmp/ngx_brotli
git submodule update --init

方法一: 重新编译
通过nginx -V查看原有的编译参数,在编译的时候通过--add-module=把模块编译进去。
比如:

./configure [nginx -V 原有的configure arguments] --add-module=/tmp/ngx_brotli
make && make install

方法二:动态编译

./configure --with-compat --add-dynamic-module=/tmp/ngx_brotli
make modules

https://blog.csdn.net/zyy247796143/article/details/125539223
https://juejin.cn/post/7060352308718075935

安装 nginx more_clear_headers 模块

https://github.com/openresty/headers-more-nginx-module/tags

https://github.com/openresty/headers-more-nginx-module

https://blog.vini123.com/385

安装 nginx

最终的配置,上边做的那么多就是为了这个。

./configure --user=nginx --group=nginx --prefix=/alidata/service/nginx --pid-path=/alidata/service/nginx/run/nginx.pid --with-http_stub_status_module --with-threads --with-file-aio --with-pcre-jit --with-http_ssl_module --with-http_v2_module --with-http_gzip_static_module --with-http_sub_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_realip_module --with-http_addition_module --with-stream --with-stream_ssl_module --with-stream_ssl_preread_module --with-stream_realip_module --with-http_slice_module --with-pcre --with-openssl=/usr/local/src/default/openssl-3.0.8 --with-openssl-opt=enable-tls1_3 --add-module=/usr/local/src/nginx/ngx_brotli --add-module=/usr/local/src/nginx/headers-more-nginx-module-0.34

https://blog.vini123.com/298

1月 29

设置主机名一是为了好看,二是方便多台服务器之间好区分。禁用 ssh 使用 root 用户登录,而是使用秘钥登录是增加安全性。

设置主机名

禁用root用户登录,使用公钥和密码一起登录

ssh 连接长时间不操作自动断开的处理

服务端处理

vim /etc/ssh/sshd_config

# 添加 (意思是向客户端每60秒发一次保持连接的信号)
ClientAliveInterval  60

# 添加 (意思是如果客户端60次未响应就断开连接,依据你期望的时间来设定)
ClientAliveCountMax  60

# 重启
systemctl restart sshd

注意

每一个步骤最好去验证一下。验证通过后,对一些阶段性的设置安装进行镜像备份。走一点备份一点。也记得删除之前的镜像。

1月 29

想做一个完整的项目。服务器是不可缺少的一部分。服务器选什么环境呢,用的比较多的是 centos 和 ubuntu。阿里云基于龙蜥操作系统(Anolis OS)打造的阿里云第三代发行版操作系统 Alibaba Cloud Linux 3(以下简称 Alinux 3) 的 CIS 安全基线(Alinux 3 CIS benchmark v1.0.0 版本)正式完成了 CIS 认证。 Alinux 3 全面兼容 RHEL / CentOS 8 生态。随着 CentOS 8 的停服,使用 Alibaba Cloud Linux 3 来替代 CentOS 也成为部分企业的选择。这里就用 Alibaba Cloud Linux 3 吧。

选配购买好服务器后。在阿里云控制台设置好密码和常用安全组,就可以通过 ssh 进入操作系统了。

常规操作

https://help.aliyun.com/document_detail/416274.html

# 安全更新提醒
dnf upgrade-minimal --security

# 查看服务器环境
lsb_release -a

# 结果如下
LSB Version:    :core-4.1-amd64:core-4.1-noarch
Distributor ID: AlibabaCloud
Description:    Alibaba Cloud Linux release 3 (Soaring Falcon)
Release:    3
Codename:   SoaringFalcon

# 更新 yum 源
yum update

Alibaba Cloud Linux release 3 中 yum 指向了 dnf-3

dnf 和 yun 的区别

相关文章

https://zhuanlan.zhihu.com/p/438572784

https://baijiahao.baidu.com/s?id=1725178032789531647&wfr=spider&for=pc

11月 06

不想用 sftp,就自己装个 ftp。

阿里云这片文章就够了

vsftpd(very secure FTP daemon)是Linux下的一款小巧轻快、安全易用的FTP服务器软件。本教程介绍如何在Linux实例上安装并配置vsftpd。

https://help.aliyun.com/document_detail/182263.html

背景信息

FTP(File Transfer Protocol)是一种文件传输协议,基于客户端/服务器架构,支持以下两种工作模式:

  • 主动模式:客户端向FTP服务器发送端口信息,由服务器主动连接该端口。
  • 被动模式:FTP服务器开启并发送端口信息给客户端,由客户端连接该端口,服务器被动接受连接。

FTP支持以下三种认证模式:

  • 匿名用户模式:任何人无需密码验证就可以直接登录到FTP服务器。这种模式最不安全,一般只用来保存不重要的公开文件,不推荐在生产环境中使用。
  • 本地用户模式:通过Linux系统本地账号进行验证的模式,相较于匿名用户模式更安全。
  • 虚拟用户模式:FTP服务器的专有用户。虚拟用户只能访问Linux系统为其提供的FTP服务,而不能访问Linux系统的其它资源,进一步增强了FTP服务器的安全性。

    这里主要介绍被动模式下,使用本地用户访问FTP服务器的配置方法。

操作一波

1.1 安装

yum install  vsftpd

2.1 开启服务

systemctl start vsftpd

3.1 设置开机启动

  1. 先查看是否开机启动:
systemctl list-unit-files | grep vsftpd
  1. 我的系统显示这样:
systemctl list-unit-files | grep vsftpd
vsftpd.service                              disabled
vsftpd@.service                            indirect
vsftpd.target                               disabled

这里是未开通。

  1. 开启自启。
chkconfig vsftpd on
  1. 查看 ftp 服务监听的端口
netstat -antup | grep ftp

4.1 配置 vsftpd

为保证数据安全,本文主要介绍被动模式下,使用本地用户访问FTP服务器的配置方法。

# 创建用户 ftplin
adduser ftplin

# 给 ftplin 设置密码
passwd ftplin

# 创建一个供 ftp 使用的目录
mkdir /var/ftp/lin

# 创建一个测试文件
vim /var/ftp/lin/test.txt
# 填入 hello 保存退出

# 给 /var/ftp/lin 设置所有者
chown -R ftplin:ftplin /var/ftp/lin

再去修改 vsftpd.conf 配置文件:

vim /etc/vsftpd/vsftpd.conf

4.1 修改配置文件

vim /etc/vsftpd/vsftpd.conf

按照以下要求修改

注意 修改和添加配置文件内的信息时,请注意格式问题。例如,添加多余的空格会造成无法重启服务的结果。

#除下面提及的参数,其他参数保持默认值即可。

#修改下列参数的值:
#禁止匿名登录FTP服务器。
anonymous_enable=NO
#允许本地用户登录FTP服务器。
local_enable=YES
#监听IPv4 sockets。
listen=YES

#在行首添加#注释掉以下参数:
#关闭监听IPv6 sockets。
#listen_ipv6=YES

#在配置文件的末尾添加下列参数:
#设置本地用户登录后所在目录。
local_root=/var/ftp/test
#全部用户被限制在主目录。
chroot_local_user=YES
#启用例外用户名单。
chroot_list_enable=YES
#指定例外用户列表文件,列表中用户不被锁定在主目录。
chroot_list_file=/etc/vsftpd/chroot_list
#开启被动模式。
pasv_enable=YES
allow_writeable_chroot=YES
#本教程中为Linux实例的公网IP。
pasv_address=FTP服务器公网IP地址
#设置被动模式下,建立数据传输可使用的端口范围的最小值。
#建议您把端口范围设置在一段比较高的范围内,例如50000~50010,有助于提高访问FTP服务器的安全性。
pasv_min_port=port number
#设置被动模式下,建立数据传输可使用的端口范围的最大值。
pasv_max_port=port number

创建chroot_list文件,并在文件中写入例外用户名单。

# 输入例外用户名单。此名单中的用户不会被锁定在主目录,可以访问其他目录。及时没有例外用户,该文件也必须创建,内容为空。
# 个人建议该文件为空最好,不必去访问其他目录,世界一片安静多好呀。
vim /etc/vsftpd/chroot_list

重启服务

systemctl restart vsftpd.service

到此为止, ftp 的配置已经完了。但阿里云还得配置安全组。21 端口入方向必须打开以及上边配置的访问的最小到最大端口也要配置。

设置安全组

规则方向 授权策略 协议类型 端口范围 授权对象
入方向 允许 TCP 21/21 所有要访问FTP服务器的客户端公网IP地址,多个地址之间用逗号隔开。允许所有客户端访问时,授权对象为0.0.0.0/0。
入方向 允许 TCP pasv_min_port/pasv_max_port。例如:50000/50010 所有要访问FTP服务器的客户端公网IP地址,多个地址之间用逗号隔开。允许所有客户端访问时,授权对象为0.0.0.0/0。

可以测试了

使用 ftp 工具。比如 win 的 ftpx, mac 的 forklift 。输入公网 ip 地址,选择 ftp 连接方式(端口号不用管),填入用户名和密码。点击连接。是不是马上就好了,并进入到指定的目录了哈。

5月 15

强迫症。不喜欢开机自启动向日葵。那么就关掉向日葵自启动吧。这里是 mac

操作

打开终端,编辑下边这些文件,将 Disabled 的值改为 即可。

cd /Library/LaunchAgents/
sudo vim com.oray.sunlogin.agent.plist
sudo vim com.oray.sunlogin.startup.plist

cd /Library/LaunchDaemons
sudo vim com.oray.sunlogin.helper.plist
sudo vim com.oray.sunlogin.plist
8月 13

直接开始

在这里找到最新的版本 https://www.python.org/ftp/python/,当前 3.9.6 版本。

cd /usr/local/src

wget https://www.python.org/ftp/python/3.9.6/Python-3.9.6.tgz

tar -xzvf Python-3.9.6.tgz

cd Python-3.9.6

mkdir /usr/local/python39

./configure --enable-optimizations --prefix=/usr/local/python39

make && make install

建立软链

ln -s /usr/local/python39/bin/python3.9 /usr/bin/python

ln -s /usr/local/python39/bin/pip3.9 /usr/bin/pip

参考

https://www.cnblogs.com/yangjisen/p/13171063.html

10月 16

服务器时间久了,有可能忘记曾经编译安装的 nginx 和 php 的配置。但是想知道,怎么办呢。

操作一波

nginx

nginx -V

# 输出
nginx version: nginx/1.16.1
built by gcc 8.3.1 20190507 (Red Hat 8.3.1-4) (GCC)
built with OpenSSL 1.1.1f  31 Mar 2020
TLS SNI support enabled
configure arguments: --user=nginx --group=nginx --prefix=/alidata/service/nginx --pid-path=/alidata/service/nginx/run/nginx.pid --with-http_stub_status_module --with-threads --with-file-aio --with-pcre-jit --with-http_ssl_module --with-http_v2_module --with-http_gzip_static_module --with-http_sub_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_realip_module --with-http_addition_module --with-stream --with-stream_ssl_module --with-stream_ssl_preread_module --with-stream_realip_module --with-http_slice_module --with-pcre --with-openssl=/usr/local/src/base/1-openssl/openssl-1.1.1f --with-openssl-opt=enable-tls1_3 --add-module=/opt/ngx_brotli/ --add-module=/usr/local/src/nginx/headers-more-nginx-module-0.33

继续阅读

9月 08

因为有阿里云,ssl 证书,都是通过 阿里云盾证书服务 来申请的。免费,方便。但也有缺点。这个证书只能使用一年,且不支持泛域名,一个服务器最多支持 20 个证书。这样,如果域名多,也烦。 后来发现了 Let's Encrypt, 发现了 acme.sh 。想来试试这个。

了解了解

Let’s Encrypt 作为一个公共且免费 SSL 的项目逐渐被广大用户传播和使用,是由 Mozilla、Cisco、Akamai、IdenTrust、EFF 等组织人员发起,主要的目的也是为了推进网站从 HTTP 向 HTTPS 过度的进程,目前已经有越来越多的商家加入和赞助支持。
Let’s Encrypt 免费 SSL 证书的出现,也会对传统提供付费 SSL 证书服务的商家有不小的打击。到目前为止,Let’s Encrypt 获得 IdenTrust 交叉签名,这就是说可以应用且支持包括 FireFox、Chrome 在内的主流浏览器的兼容和支持,虽然目前是公测阶段,但是也有不少的用户在自有网站项目中正式使用起来。
Let’s Encrypt 的最大贡献是它的 ACME 协议,第一份全自动服务器身份验证协议,以及配套的基础设施和客户端。这是为了解决一直以来 HTTPS TLS X.509 PKI 信任模型,即证书权威(Certificate Authority, CA)模型缺陷的一个起步。
在客户端-服务器数据传输中,公私钥加密使得公钥可以明文传输而依然保密数据,但公钥本身是否属于服务器,或公钥与服务器是否同属一个身份,是无法简单验证的。证书权威模型通过引入事先信任的第三方,由第三方去验证这一点,并通过在服务器公钥上签名的方式来认证服务器。第三方的公钥则在事先就约定并离线准备好,以备访问时验证签名之用。这个第三方就称为证书权威,简称 CA。相应的,CA 验证过的公钥被称为证书。
问题是,如果服务器私钥泄露,CA 无法离线使对应的证书无效化,只能另外发布无效记录供客户端查询。也就是说,在私钥泄露到 CA 发布无效记录的窗口内,中间人可以肆意监控服-客之间的传输。如果中间人设法屏蔽了客户端对无效记录的访问,那么直到证书过期,中间人都可以进行监控。而由于当前 CA 验证和签发证书大多手动,证书有效期往往在一年到三年。
Let’s Encrypt 签发的证书有效期只有90天,甚至希望缩短到60天。有效期越短,泄密后可供监控的窗口就越短。为了支撑这么短的有效期,就必须自动化验证和签发。因为自动化了,长远而言,维护反而比手动申请再安装要简单。
证书的有效期,我坚持认为这是合理的。Let’s Encrypt 的证书是自动签发的,对 Let’s Encrypt 的目标用户(个人网站、小网站)来说,90天已经是一个很长的时间了。特别是个人网站,域名所有权的变动是非常快的。可能前几天域名还属于张三,后几天就属于李四了。因此自动签发一个长有效期的证书是很容易产生问题的。如果证书的有效期是两年,那么经常交易域名的人就可以长时间持有已经不属于他们的域名的证书。并且这种持有不受证书吊销列表的控制,因为签发的时候,所有权是没有问题的,即使后来所有权变更了,Let’s Encrypt 也不会知道。所以设的有效期短一点,可以减少这个问题的影响。然后是易用性,现在已经有不少的 Let’s Encrypt 自动续期脚本了,配好后就不用管了,非常方便。
总之,强烈推荐站长和服务器平台用 Let’s Encrypt 向访客提供加密连接。这是域名认证未来的发展方向。

参考,了解更多

https://www.bluesdream.com/blog/tag/acme-sh

https://www.zhoutao.org/blog/2018/05/773.html

https://www.cnblogs.com/clsn/p/10040334.html