清阳 发布的文章

Tyepcho开启伪静态并隐藏URL中的index.php

Tyepcho开启伪静态修改

网上有很多Typecho开启伪静态,修改/xxx.xxx.com/index.php/xxx.html 为 /xxx.xxx.com/xxx.html 隐藏php后缀的文章,但是大多都有问题,博主经过多次配置,做了一下总结。确保操作正确,能够生效。希望能帮到大家

操作过程主要分2步

1、修改nginx配置:

    location / {
        index  index.php index.html index.htm;
        #原本配置是这样的,会做重定向到index.php
        #try_files $uri $uri/ /index.php$is_args$args;
        #修改为下面这一行
        try_files $uri $uri/ /$is_args$args;

    }

然后nginx -t && nginx -s reload

2、修改typecho后台开启伪静态功能

如下图:
m11w8vxk.png

相关安全加固

另外教大家如何隐藏nginx,php版本

1、隐藏nginx版本

只需要在nginx主配置文件nginx.conf中,http字段,添加:
server_tokens off;
然后重载nginx。
nginx -t && nginx -s reload

2、隐藏php版本

只需要在php.ini配置文件中,修改 expose_php = Offexpose_php = On
注意由于是在网页浏览中所以要修改fpm路径下的php.ini,而不是cli路径下的php.ini。
然后重启php-fpm

Ubuntu22.04配置vsftp服务

本文记录了Ubnutu配置基于Vsftp的FTP服务

注意本文配置文件和路径仅适用于Ubuntu22.04下的vsftp配置,其他系统请适当变通配置

{alert type="info"}
(主要是 配置pam认证 部分,不同系统的pam.so库路径不一致)
{/alert}

一、环境

系统 软件环境

  • Ubuntu: 22.03
  • Vsftp: 3.0.5
  • ftp 用户这里以用户名: admin, 密码:123456为例
  • ftp上传目录 /data/ftp/admin
  • ftp被动模式,监听55554端口,同时允许公网访问本机 55555-55557端口

二、配置步骤概要

FTP配置过程分为以下几步:

  • 安装软件
  • 创建必须得目录结构和空的配置文件
  • 写入vsftp配置文件
  • 修改vsftp pam认证配置文件
  • 生成用户账号密码数据库
  • 调整ftp目录权限,修正vsftp chroot环境
  • 登录测试

三、安装软件和创建文件结构

apt update
apt install vsftpd db-util -y
vsftpd -v
vsftpd:version 3.0.5
cd /etc/
cp /etc/vsftpd.conf /etc/vsftpd.conf.bak
mkdir vsftpd

cd vsftpd 
touch chroot_list  ftpusers user_list vuser_passwd.txt
mkdir vsftpd_user_conf
touch vsftpd_user_conf/admin #这个是ftp用户配置文件

四、user配置

向配置文件中写入配置

cat > ftpusers <<EOF
#Users that are not allowed to login via ftp
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody
EOF

允许登录的ftp用户,主要是写入admin这个ftp用户

cat > user_list <<EOF
#vsftpd userlist
#If userlist_deny=NO, only allow users in this file
#If userlist_deny=YES (default), never allow users in this file, and
#do not even prompt for a password.
#Note that the default vsftpd pam config also checks /etc/vsftpd/ftpusers
#for users that are denied.
#root
#bin
#daemon
#adm
#lp
#sync
#shutdown
#halt
#mail
#news
#uucp
#operator
#games
#nobody
#gameday-dg
admin
EOF
创建ftp目录
mkdir -p /data/ftp/admin

五、用户认证密码文件

写入初始账号密码,一会根据这个生成数据库初始源文件

cat > vuser_passwd.txt <<EOF
admin
123456
EOF

生成ftp用户认证所需的数据库文件

db_load -T -t hash -f /etc/vsftpd/vuser_passwd.txt /etc/vsftpd/vuser_passwd.db

六、SSL加密配置

生成ssl安全连接证书文件 (如果需要开启SSL安全连接的情况下)

openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/vsftpd/vsftpd.pem -out /etc/vsftpd/vsftpd.pem
在交互式回话框中填入内容如下:
CN
Shanghai
Shanghai
gmork
gmork
Gmork
825943010@qq.com
例如:Country Name (2 letter code)
 [AU]:CNState or Province Name (full name)
 [Some-State]:ShanghaiLocality Name (eg, city
) []:Shanghai
Organization Name (eg, company) [Internet Widgits Pty Ltd]:gmork
Organizational Unit Name (eg, section) []:gmork
Common Name (e.g. server FQDN or YOUR name) []:Gmork      
Email Address []:825943010@qq.com

七、配置vsftpd.conf文件

写入/etc/vsftpd.conf主配置文件

cat > /etc/vsftpd.conf <<EOF
local_enable=YES
write_enable=YES
local_umask=022
user_config_dir=/etc/vsftpd/vsftpd_user_conf
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=NO
idle_session_timeout=300
ftpd_banner=Welcome to blah FTP service.
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
ls_recurse_enable=YES
listen=YES
listen_port=55554
pam_service_name=vsftpd
guest_enable=YES
guest_username=ftpuser
userlist_enable=YES
userlist_deny=NO
tcp_wrappers=YES
use_localtime=YES
allow_writeable_chroot=YES
#ssl_enable=YES
#allow_anon_ssl=NO
#force_local_data_ssl=YES
#force_local_logins_ssl=YES
#ssl_tlsv1=YES
#ssl_sslv2=YES
#ssl_sslv3=YES
#rsa_cert_file=/etc/vsftpd/vsftpd.pem
#ssl_ciphers=HIGH
#require_ssl_reuse=NO

xferlog_enable=YES
secure_chroot_dir=/var/run/vsftpd/empty
#下面这行很重要,用来解决云服务器服务,客户端连接后报
#425 Security:IP connection错误的问题。
pasv_promiscuous=yes
EOF

设置chroot用户内容

cat > /etc/vsftpd.user_list <<EOF
#vsftpd userlist
#If userlist_deny=NO, only allow users in this file
#If userlist_deny=YES (default), never allow users in this file, and
#do not even prompt for a password.
#Note that the default vsftpd pam config also checks
/etc/vsftpd/ftpusers
# for users that are denied.
#root
#bin
#daemon
#adm
#lp
#sync
#shutdown
#halt
#mail
#news
#uucp
#operator
#games
#nobody
#gameday-dg
admin
EOF

八、配置pam认证

这里需要注意,由于 pam_userdb.so 在不同架构的系统下路径名略有差异,
可以根据自己的系统来确认
find / -name "pam_userdb.so"
知道到对应的so连接库文件,根据路径和名字把以下的改一下即可:
当前测试过的系统类型有:
amd64位系统 x86_64架构文件名为:
/usr/lib/x86_64-linux-gnu/security/pam_userdb.so

苹果电脑m1芯片下,linux虚拟机中.so文件路径为:
/usr/lib/aarch64-linux-gnu/security/pam_userdb.so

#先备份ftp认证配置文件
cp /etc/pam.d/vsftpd  /etc/pam.d/vsftpd.bak
## 然后写入配置
cat > /etc/pam.d/vsftpd <<EOF 
auth required /usr/lib/x86_64-linux-gnu/security/pam_userdb.so db=/etc/vsftpd/vuser_passwd 
account required /usr/lib/x86_64-linux-gnu/security/pam_userdb.so db=/etc/vsftpd/vuser_passwd
EOF

九、设置虚拟ftp用户配置

设置虚拟ftp用户名字,权限,ftp工作模式,监听端口,被动模式使用到端口

cat > /etc/vsftpd/vsftpd_user_conf/admin << EOF
local_root=/data/ftp/admin
local_umask=022
pasv_enable=YES
pasv_min_port=55555
pasv_max_port=55557
virtual_use_local_privs=YES
write_enable=YES
EOF

十、修改目录权限

创建ftp虚拟用户所属的实体账户,用户登录和目录读写授权判断
useradd ftpuser -m -s /usr/sbin/nologin

配置ftp上传目录属主

chown -R ftpuser.ftpuser /data/ftp 

十一、测试和debug

测试结果如下图、即配置测试成功

m0nhiwwu.png

十二、报错和解决办法

报错1:

错误: GnuTLS 错误 -15,位于 gnutls_record_recv: An unexpected TLS packet was received. 错误: 无法读取套接字: ECONNABORTED - 连接中止 错误: 无法连接到服务器
解决重新生成证书:

报错2

useradd ftpuser -m -s /usr/sbin/nologin
chown -R ftpuser.ftpuser /data/ftp

响应: 500 OOPS: cannot change directory:/nonexistent

CentOS7官方停止支持,yum源变更

由于 CentOS 7 在 2024 年 6 月 30 日停止支持,生命周期已结束(进入EOL)。因此,官方仓库已移至https://vault.centos.org。不再有更新

现有CentOS 7.x系统在更新执行yum命令的时候会遇到报错,解决办法为修改
/etc/yum.repos.d/CentOS-Base.repo文件,内容如下,记得修改之前做备份

[base]
name=CentOS-$releasever - Base
baseurl=https://vault.centos.org/7.9.2009/os/$basearch
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

#released updates 
[updates]
name=CentOS-$releasever - Updates
baseurl=https://vault.centos.org/7.9.2009/updates/$basearch
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
baseurl=https://vault.centos.org/7.9.2009/extras/$basearch
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus
baseurl=https://vault.centos.org/7.9.2009/centosplus/$basearch
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

然后执行yum makecache 即可。

CentOS7安装多版本php

在服务器运行过程中,经常会遇到需要多版本php的情况,甚至有可能需要多版本php同时运行。
本文记录了CentOS7下安装多版本php的过程,理论上来说Alma Linux,Rocky Linux等类似RedHat系 Linux发行版都适用,区别只是安装的不同remi源而已。

Centos7安装多版本php

添加remi源

wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
wget https://rpms.remirepo.net/enterprise/remi-release-7.rpm
rpm -Uvh remi-release-7.rpm epel-release-latest-7.noarch.rpm

### 安装php5.6和php5.6-fpm以及常用扩展库
yum install php56 php56-fpm -y
yum install php56-php-mbstring.x86_64 php56-php-mysqlnd.x86_64 php56-php-pdo php56-php-xml  ph56-php-opcache.x86_64 php56-php-zip -y
yum install zip unzip php56-php-zip -y
创建php-fpm运行时sock文件目录
mkdir  /var/run/php56-fpm
修改 /etc/opt/remi/php56/php-fpm.d/www.conf
listen = /var/run/php56-fpm/php56.sock
启动php-fpm和设置开机自启动
systemctl start php56-php-fpm.service
systemctl enable php56-php-fpm.service

安装php7.1和php7.1-fpm以及常用扩展库

yum install php71 php71-php-fpm -y
yum install php71-php-mbstring.x86_64 php71-php-mysqlnd.x86_64 php71-php-pdo php71-php-xml  php71-php-opcache.x86_64  php71-php-zip -y
yum install zip unzip php71-php-zip -y
创建php-fpm运行时sock文件目录
mkdir  /var/run/php71-fpm
修改 /etc/opt/remi/php71/php-fpm.d/www.conf
listen = /var/run/php71-fpm/php71.sock
启动php-fpm和设置开机自启动
systemctl start php71-php-fpm.service
systemctl enable php71-php-fpm.service
### 安装php7.4和php7.4-fpm以及常用扩展库
yum install  php74  php74-php-fpm  -y
yum install php74-php-mbstring.x86_64 php74-php-mysqlnd.x86_64 php74-php-pdo php74-php-xml  php74-php-opcache.x86_64  php74-php-zip -y
yum install zip unzip php74-php-zip -y
创建php-fpm运行时sock文件目录
mkdir  /var/run/php74-fpm
修改 /etc/opt/remi/php74/php-fpm.d/www.conf
listen = /var/run/php74-fpm/php74.sock

启动php-fpm和设置开机自启动

systemctl start php74-php-fpm.service
systemctl enable php74-php-fpm.service

苹果电脑命令行常用命令

苹果的电脑命令行常用命令

本文持续总结一些命令行命令,适用于苹果电脑终端命令行界面

查看日志 log show

  • 查看1天前的日志
    log show --last 1d
  • 查看所有日志
    log show
  • 动态跟踪查看实时日志
    sudo log stream
  • 查看更多关于log show的命令
    log show -h

查看苹果系统版本信息

命令行下查看方式:
sw_vers

命令行操作用户

  • 创建用户
    sudo adduser
  • 设置用户信息
    sudo dseditgroup -o edit -t user -m <new_full_name>
  • 更改用户密码
    sudo passwd
  • 删除用户账户
    sudo dsedituser -u -r

10.15以上设置用户帐户

  • 创建用户
    sudo useradd
  • 设置和修改密码
    sudo passwd
  • 删除账户
    sudo dsedituser -u -r

更高版本苹果系统用户操作命令

  • 创建新用户
    sudo dsadd user
  • 修改用户属性
    sudo dsedituser -u
  • 删除用户
    sudo dsedituser -u -r

苹果笔记本实现用户登录钉钉通知功能

需求描述
公司有台苹果电脑会有多个用户使用。经常出现相互争抢的情况。
所以计划实现以下功能:有用户登陆或者退出的时候发送通知消息到钉钉群。
这样大家需要用电脑的时候先查询一下当前是否有用户在用,避免争抢。

思路:
添加系统的后台开机自启动任务,系统启动的时候,执行一个常驻后台任务,监控系统用户状态。有用户登陆的时候,发送消息到钉钉群。

系统环境:MacOS 13.5
系统账号:wiyigg

创建mac守护进程配置

以root权限在创建并编辑/Library/LaunchDaemons/com.test.loginevent.plist 文件,内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.test.loginevent</string>

    <key>ProgramArguments</key>
    <array>
        <string>/usr/bin/python3</string>
        <string>/usr/local/bin/logout.py</string>
    </array>

    <key>RunAtLoad</key>
    <true/>

    <key>KeepAlive</key>
    <false/>

    <key>StandardOutPath</key>
    <string>/var/log/logout.stdout.log</string>

    <key>StandardErrorPath</key>
    <string>/var/log/logout.stderr.log</string>
</dict>
</plist>

其中一下三行需要注意:

com.test.loginevent //此程序功能注册后的名称,稍后用到
/Users/wiyigg/myvenv/bin/python3.12 //python3程序路径,由于系统版本问题,所以另行安装了python3.12
需要使用更高版本的python3.12虚拟环境,创建路径如上
/usr/local/bin/logout.py //真正后台运行的python程序
sudo mkdir /usr/local/bin

编写后台程序Python脚本

cat /usr/local/bin/logout.py

#coding: utf-8
#代码中的 dingtalk_webhook_url 改成自己的钉钉群机器人webhook
#"senderNick": "Hostname"  Hostname是自己的电脑名字,用来标识的,对应修改
import subprocess
import time
import requests
import json
import socket
from datetime import datetime

# 钉钉Webhook URL 这里配置了运维业务报警群的机器人用于测试,后面根据需求进行修改
dingtalk_webhook_url = 'https//:xxxxxx'

# 获取当前登录的用户列表
def get_logged_in_users():
    try:
        # 使用 'who' 命令获取当前登录的用户
        users_output = subprocess.check_output(['who'], text=True)
        users = set(line.split()[0] for line in users_output.strip().split('\n') if line)
        return users
    except subprocess.CalledProcessError as e:
        print(f"Error retrieving logged in users: {e}")
        return set()

# 发送钉钉消息
def send_dingtalk_message(message):
    headers = {'Content-Type': 'application/json'}
    data = {
        "msgtype": "text",
        "text": {
            "content": message
        },
        "senderNick": "Hostname" #这里是固定值,需要修改与当前主机一致
    }
    try:
        response = requests.post(dingtalk_webhook_url, headers=headers, data=json.dumps(data))
    except:
        return 0
    #if response.status_code == 200:
    #    print("Message sent to DingTalk successfully.")
    #else:
    #    print(f"Failed to send message to DingTalk: {response.text}")

# 存储上次登录的用户列表
last_logged_in_users = get_logged_in_users()

# 主循环
while True:
    # 获取当前登录的用户列表
    current_logged_in_users = get_logged_in_users()

    # 查找注销的账号
    logged_out_users = last_logged_in_users - current_logged_in_users
    # 查找新登录的账号
    logged_in_users = current_logged_in_users - last_logged_in_users

    # 获取主机名
    hostname = socket.gethostname()
    
    # 获取当前时间
    now = datetime.now()
    formatted_now = now.strftime("%Y-%m-%d %H:%M:%S")
    
    # 如果有账号注销,则发送钉钉消息
    if logged_out_users:
        message = f" 登出{', '.join(logged_out_users)}"
        send_dingtalk_message(message)

    # 如果有新用户登录,则发送钉钉消息
    if logged_in_users:
        message = f" 登入{', '.join(logged_in_users)}"
        send_dingtalk_message(message)

    # 更新上次登录的用户列表
    last_logged_in_users = current_logged_in_users

    # 每隔3秒执行一次,可以根据需求调整
    time.sleep(3)

配置python虚拟环境

使用系统的brew安装 python3.12
如果系统没有brew命令先安装brew软件,然后安装python3.12

#安装brew
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

安装python3.12

brew install python@3.12
设置python3.12虚拟环境
/usr/local/bin/python3.12 -m venv myvenv
会创建 /Users/wiyigg/myvenv目录
激活虚拟环境
source /Users/wiyigg/myvenv/bin/activate
然后在虚拟环境中安装pip3模块
本次依赖外部模块有 requests
pip3 install requests
这里解释下为什么要用python虚拟环境,因为macOS 13.5当前自带最新版本python3.9.5(时间2024.07.29) 执行 /usr/local/bin/logout.py 会出现警告,虽然脚本能够执行成功,但是在后台跑的时候这个警告会导致后台任务执行失败。我当时排查了好久才定位到是这个警告导致的程序不运行。汗~~~!!!
切换到虚拟环境后,不报警告,并且能成功执行

然后就是
添加系统后台任务,并且启动服务测试了。

# 加载守护进程配置
#加载的时候要使用绝对路径,反复加载会报错,只有第一次加载能成功
sudo launchctl load /Library/LaunchDaemons/com.test.loginevent.plist
# 启动守护进程
sudo launchctl start com.test.loginevent.plist
# 查看进程是否启动
ps ax | grep logout

代码中的 dingtalk_webhook_url 改成自己的钉钉群机器人webhook,即可
然后就可以登录和等出测试啦.

台式电脑DIY的一些建议-202407

对于电脑DIY玩家,这里汇总了一下建议。建议的来源很多,但是都是经过本人精心甄别,认为确实有用的,希望能帮到大家

CPU

CPU:推荐性价比较高的型号有:12400F、7500F、13600KF、7800X3D

内存

内存其实推荐京东购买,主打一个方便退换
买内存就是买颗粒,什么牌子都无所谓,只要颗粒保真,马甲不保温,是正经牌子,都可以买

主板

显卡

原则上不推荐A卡,省心。

电源

正经牌子不虚标4070ti以下650W足够,4080撑死850W,4090顶天1000W,7900XTX保险起见1000W。
500W的玄武850mk、九州风神pl800d、先马XP,先马黑钻,威刚魔核II(不要se),振华leadex都成,1000W同上,另外如果是7900XTX 先马黑钻V1 1000W是最有性价比的。这些东西10年包的建议京东买。

固态硬盘

预算紧张:sd10。预算充足:海力士p41(不是solidigm p41plus)/solidigm p44pro、致钛ti plus 7100四选一

机箱

平民的话,先马机箱即可。

风扇

有个够用就行,如果可以,打开机箱侧面版,效果最好

超频

超频的尽头是auto,开个XMP玩就是了,电脑主要还是稳定的好,为了那一点点速度,大大提高不稳定的风险,不值得。

在京东买东西,一定要注意是京东发货并售后的真·自营
现在真·自营越来越少