标签: Linux

  • 使用SSH转发服务器端口到本地

    使用SSH转发服务器端口到本地

    注意远程地址、远程端口号、本地地址、本地端口号需要按照实际情况修改。

    function forwardPort() {
        PROC_NAME="ssh -fR $1"
        ProcNumber=`ps -ef |grep -w "$PROC_NAME"|grep -v grep|wc -l`
        if [ $ProcNumber -le 0 ];then
            echo "$1 is not forward.."
            ssh -fCNR $1:localhost:$1 root@0.0.0.0 -p 1234 -o ServerAliveInterval=30
        else
            echo "$1 has forwarded.."
        fi
    }
    for port in 1234 4567
    do
        forwardPort $port
    done
    

    注意,如果需要外网访问转发的端口,需要在远程服务器的配置文件(/etc/ssh/sshd_config)中添加:

    AllowTcpForwarding yes
    
  • Linux有线未托管问题

    Linux有线未托管问题

    今天发现在用的一个Linux开发机一直不能自动连接有线网络,显示“有线未托管”,查找测试了很多文章的解决方案都无法使用,可能更新后有了一些变化或者各自情况不同,这里记录一下个人生效的处理方式。

    sudo vim /etc/netplan/00-installer-config.yaml
    
    #文件中添加
    renderer: NetworkManager
    
    sudo netplan generate
    sudo netplan apply
    sudo reboot
    
  • Linux服务器Swap配置

    Linux服务器Swap配置

    简单记录文件形式的Swap使用与配置方式。

    1. 交换文件大小配置原则

    1. 内存<2G,配置实际内存的两倍
    2. 内存>2G,配置为4G即可
    3. 内存>4G,追求极致性能,不需要配置交换

    2. 创建交换文件

    # 创建一个名称为swap的文件,大小为1GB
    # if 输入文件名称,此处使用/dev/zero即可
    # of 输出文件名称,使用期望的文件名即可
    # bs 同时设置读入/输出的块大小为多少个字节
    # count 拷贝多少个块,块大小等于bs指定的字节数
    dd if=/dev/zero of=/swap bs=1M count=1024
    
    # 配置交换文件权限
    chmod 0600 /swap
    
    # 将文件设置为交换文件
    mkswap /swap
    
    # 启用指定交换文件
    swapon /swap
    
    # 查看交换文件状态
    swapon -s
    
    # 添加交换文件自动挂载
    echo "/swap swap swap defaults 0 0" >> /etc/fstab
    

    3. 删除交换文件

    # 关闭指定交换文件
    swapoff /swap
    
    # 删除文件
    rm /swap
    
    # 删除自动挂载配置
    vi /etc/fstab
    
  • PHP内置服务器与Serverless

    PHP内置服务器与Serverless

    PHP从5.4版本开始就提供了一个内置的WEB服务器,可以通过一个简单的命令php -S启动一个WEB服务器,极大简化了开发环境的搭建。

    到目前为止,官网文档对于内置服务器的使用依然建议用于开发环境,不建议用于生产环境,原因倒是很容易理解,主要有两个方面:

    1. 支持的MIME类型很少,5.4版本放出时只支持.htm和.svg(从5.5版本完善了大部分常见的MIME类型支持)

    2. 仅实现了基本功能,基本没有任何优化,是一个单线程进程(不过从7.4版本开始,内置服务器支持多进程的运行方式)

    从传统开发角度看,这样性能和功能的服务器确实很难应用于生产环境,但是伴随着Serverless的发展,感觉内置服务器的限制突然不是那么重要了。

    使用Serverless服务,不管是AWS Lambda,Google Function,还是国内阿里云的函数计算、腾讯云的云函数,我们关注的点不再聚焦于单机性能释放,而是变成了以下四个方面,我们要做的本质上变成了降低单请求的资源占用和执行时间

    1. 调用次数

    2. CPU时间

    3. 内存占用

    4. 执行时间

    5. 带宽

    我们可以逐个对比以下,

    1. 调用次数显然很难因为WEB服务器的变化有什么变化

    2. CPU时间上,内置服务器作为一个单进程应用,同样的逻辑在函数计算这样的环境下,较少了Nginx与FPM交互的网络开销、Nginx的运行开销,理论上内置服务器应该表现更好

    3. 内存占用方面,内置服务器不再需要运行Nginx,同样逻辑,应该也比传统部署方式占用更少一些

    4. 执行时间,Nginx+FPM需要启动两个进程,需要两个进程间的通信,很难与直接启动PHP进程更快

    5. 带宽基本不用对比,应该不会有什么变化,gzip完全可以在CDN层来实现

    从Serverless的角度看,内置服务器并不算是一个很差的选择,对比传统的运行方式可能更加合适一些,就是不太清楚不建议生产环境使用是否有除性能外的其他原因,回头去翻一翻PHP的issue。

    参考文章

    1. PHP-Built-in web server(https://www.php.net/manual/en/features.commandline.webserver.php

  • Debian配置自动清理Journal日志

    Debian配置自动清理Journal日志

    Debian系统上(红帽系Linux发行版应该也是一样的),systemd-journald 服务负责管理 journal 日志。这些日志可以占用大量的磁盘空间,特别是当系统持续运行并且产生大量日志条目时。可以配置 systemd-journald 的日志保留策略来自动清理这些日志。

    1. 编辑 systemd-journald 的配置文件

    systemd-journald 的主要配置文件是 /etc/systemd/journald.conf

    sudo vim /etc/systemd/journald.conf
    

    2. 配置日志保留策略

    在配置文件中,你可以设置以下选项来控制日志的保留:

    • SystemMaxUse=: 设置系统日志可使用的最大磁盘空间。例如,SystemMaxUse=50M 会限制系统日志使用最多50MB的磁盘空间。
    • SystemKeepFree=: 设置保留的空闲磁盘空间。例如,SystemKeepFree=1G 会确保至少有1GB的空闲磁盘空间不会被日志使用。
    • MaxRetentionSec=: 设置日志条目的最大保留时间。例如,MaxRetentionSec=1month 会自动删除超过一个月的日志条目。

    3. 重新加载配置并重启服务

    在修改配置文件后,你需要重新加载 systemd 的配置并重启 systemd-journald 服务。

    sudo systemctl daemon-reload
    
    sudo systemctl restart systemd-journald
    

    4. 检查配置是否生效

    使用 journalctl 命令来检查 journal 的当前状态和配置。

    journalctl --disk-usage # 查看当前占用空间
    
    journalctl --vacuum-size=50M  # 可以用这个命令手动清理日志到指定大小,但通常不需要这样做,因为自动清理应该已经配置好了。
    

    5. 监控磁盘使用情况

    为了确保你的日志清理策略按预期工作,建议定期监控服务器的磁盘使用情况。你可以使用 df 命令来检查磁盘空间的使用情况。

    6. 注意事项

    • 在修改任何系统配置文件之前,最好先备份原始文件。
    • systemd-journald 的日志清理策略是基于磁盘空间使用量或日志条目的保留时间来工作的,所以确保你设置的策略符合你的实际需求。
    • 如果你的系统上有大量的日志生成,并且磁盘空间有限,你可能还需要考虑其他日志管理策略,如将日志发送到远程日志服务器或定期归档旧日志。
  • Linux服务器的安全相关配置

    Linux服务器的安全相关配置

    记录一下Linux服务器一般常用的安全相关配置,避免被简单的黑掉,更复杂的配置暂不考虑深入研究了。

    1. 添加用户、用户组

    # 添加用户组
    groupadd users
    # 添加用户
    useradd test
    # 将用户test添加到users组中
    usermod -g users test
    

    2. 启用密钥登陆

    # 1. 开启密钥登陆配置
    vim /etc/ssh/sshd_config
    
    # 将一下两个配置项打开
    RSAAuthentication yes
    PubkeyAuthentication yes
    
    # 2. 配置密钥
    # 生成密钥
    ssh-keygen
    # 复制公钥,放进服务器/home/xxx/.ssh/authorized_keys文件中
    vim /home/xxx/.ssh/authorized_keys
    
    # 3. 使用公钥测试连接
    ssh test@1.1.1.1
    
    # 4. 关闭密码登陆功能
    vim /etc/ssh/sshd_config
    
    # 禁止使用密码登陆
    PasswordAuthentication no
    # 禁止root账号登陆
    PermitRootLogin no
    # 指定SSH协议版本
    Protocol 2
    # 最大尝试次数
    MaxAuthTries 3
    
    # 重启ssh服务
    systemctl restart sshd
    
    # 5. 配置仅允许指定组使用su
    vi /etc/pam.d/su
    
    # 添加行
    auth required pam_wheel.so group=xxx
    
    # 6. 启用防火墙
    # Debian防火墙默认允许所有INPUT和OUTPUT,
    # 建议直接关闭所有流入,然后根据需要配置开放的端口,比如80,443,22等
    # 除了80与443,建议其他程序都更换默认端口,每增加一个策略就会增加部分安全性
    # !!!!禁止所有流量流入,注意放开SSH,否则就进不去了!!!!
    systemctl start nftables
    systemctl enable nftables