2024年9月16日星期一

如何在各服务器之间建立同步

 1、需要在本地服务器远程服务器均安装rsync

sudo apt update

sudo apt install rsync


2\创建一个同步的脚本,如 tongbu.sh, 内容如下。如果发现有文件更新,则同步后重启远端服务器。

#!/bin/sh

#下面的domains的服务器名称对应/root/.ssh/config中的名称

domains="abc dfg ddd"

LOCAL_DIR="/你要同步的本地目录/"

REMOTE_DIR="/远程目录/"


for domain in $domains

do

RSYNC_CMD="rsync -avzL --delete ${LOCAL_DIR} $domain:${REMOTE_DIR}"

SSH_CMD="ssh $domain"

OUTPUT=$(eval ${RSYNC_CMD})

if echo "${OUTPUT}" | grep -q "同步的文件名称"; then

echo "$domain: Files have been updated. Rebooting remote server..."

${SSH_CMD} 'sudo reboot'

else

  echo "$domain: No files were updated. No reboot required."

fi

done

Ubuntu如何通过密钥登录其他服务器

 1、使用命令:

ssh-keygen -t ed25519

生成两个密钥文件:id_ed25519.pub 和 id_ed25519

2、创建文件:/root/.ssh/config,内容如下:

Host server1

    HostName 96.9.2.123

    User root

    IdentityFile ~/.ssh/id_ed25519


Host server2

    HostName 96.9.2.12

    User root

Port 2322

    IdentityFile ~/.ssh/id_ed25519

3、将id_ed25519.pub的内容拷贝至你的远程服务的/root/.ssh/authorized_keys 文件中。

4、重启ssh

如果是Ubuntu24 命令是:systemctl restart ssh

如果是其他的则是:systemctl restart sshd

测试 ssh 96.9.2.123 则不需要密码就可以登陆。

2024年9月15日星期日

如何设定ubuntu的journalctl的日志保存时间

 因为防止日志太多导致硬盘爆满,设置journalctl的日志保留时间,

在/etc/systemd/journald.conf文件下增加这么一行,2d表示保留2tian的

MaxRetentionSec=2d

然后重启服务 systemctl restart systemd-journald.service


删除日志目录/var/log 10天前的文件(日志),创建一个脚本文件 如 del_log.sh, 内容如下:

#!/bin/bash

find /var/log/ -type f -mtime +10 -exec rm -f {} \;


设置+x,并在任务计划中每天执行。

这条命令用于删除 /var/log/ 目录下所有修改时间超过 10 天的文件。具体解释如下:

  • find /var/log/: 在 /var/log/ 目录及其子目录下查找文件。
  • -type f: 查找文件(排除目录、符号链接等)。
  • -mtime +10: 选择最后修改时间超过 10 天的文件。+10 表示超过 10 天,-10 表示少于 10 天。
  • -exec rm -f {} \;: 对每一个找到的文件执行 rm -f 命令来强制删除。{} 是一个占位符,代表当前找到的文件名,\; 表示命令的结束。

总结来说,这条命令会删除 /var/log/ 目录及其子目录下所有最后修改时间在 10 天之前的文件。

2024年9月13日星期五

postfix + dovecot创建邮箱服务器的要点

1、在/etc/postfix/main.cf中:
mydestination表示的是postfix需要处理的域名(发件人的域名)

virtual_mailbox_domains是dovecot处理的发件人域名。

mydestination和virtual_mailbox_domains的域名不能重复,就是不能让postfix处理,又让dovecot处理。

2、myorigin是本地发送邮件的时候添加的域名。如果你的本机hostname是abcd,myorigin=efd.com那么mail发送邮件,发件人将是abcd@efd.com

3、relay_domains = 为空。如果你仅有一台邮件服务器。这个是设置一些域名为relay_domains定义的邮件,将通过relay_hostname指定的机器来发送。

4、下面这两行,是一个坑。网上教程多是下面这样的,5000是自己创建的vmail用户的uid和gid:

virtual_uid_maps = static:5000

virtual_gid_maps = static:5000

不可以使用root用户以及root组的用户来执行(dovecot限制了)

实际需要改为:

virtual_uid_maps = hash:/etc/postfix/virtual_uids

virtual_gid_maps = hash:/etc/postfix/virtual_gids

原因是,这条命令的意思,需要postfix在将邮件存储到虚拟邮箱的时候,使用的用户是哪个。如果是用 static:5000,那么就是指定使用vmail用户。这样当你用邮箱客户端登陆的获取邮件的时候,就会权限出错。因为通过IMAP登录获取邮件的用户是登录用户。登录用户和存储用户vmail不一致,当然就读取不了。所以需要根据邮箱的用户来存储收到的邮件。这坑居然花了我一个天。

virtual_uids和virtual_gids的文件格式是:用户 ID 如下面:

abcd@efd.com 5001

1234@efd.com 5002

5、virtual_mailbox_maps = hash:/etc/postfix/vmailbox

这个是用户和指定邮箱文件路径的匹配。其他地方也指定了。不知是什么原因需要多个地方指定,格式如下,用户 用户邮箱路径

root@efd.com    efd.com/root/

然后需要命令postmap /etc/postfix/vmailbox 生成校验的文件

6、下面这个设置:

smtpd_sender_restrictions = reject_sender_login_mismatch,

check_sender_access hash:/etc/postfix/sender_access,

                            permit_mynetworks,

                            reject_unauth_pipelining,

                            reject_non_fqdn_sender,

                            reject_unknown_sender_domain,

                            permit_sasl_authenticated,

                            reject

文件/etc/postfix/sender_access可以用于定义需要除了设定域名以外的发件人域名,允许接入。比如发件人是abcd@tdfsda.com,正常上面的接入是不可以的。但是你在sender_access文件中加上 tdfsda.com  ok, 那么就可以postfix或dovecot就可以允许接入和处理。

7、sender_canonical_maps = hash:/etc/postfix/sender_canonical 这个是mail发邮件的时候将发件人root@abcd的格式 转换成对应的格式。

8、在/etc/dovecot/dovecot.conf的配置中,需要指定邮箱的根目录:

mail_location = maildir:/var/mail/vhosts/%d/%n/Maildir
(你看这里再次指定,不知道为何。%d 表示收件人@后面的域名,%n是@前面的用户名)

9、smtpd_sender_login_maps = hash:/etc/postfix/sender_login_maps

是smtp接入时,提供的登录用户名的转换。格式是:接入的用户名  需要转换的用户名

abcd@efd.com abcd@efd.com

也需要postmap /etc/postfix/sender_login_maps 进行校验转换

10、在/etc/dovecot/conf.d/10-auth.conf文件是整个登录的鉴权设置,包括postfix创建的SMTPD服务器的接入鉴权。和postfix需要smtp去连其他服务输入用户名密码的设置不是一样的。(之前这个差点被整蒙了,看清楚SMTPD和SMTP,一个是本机的SMTP的后台服务设置,一个是postfix连其他服务器的SMTP的连接设置)

passdb {

  driver = passwd-file

  args = /etc/dovecot/users

}

userdb {

  driver = passwd-file

  args = /etc/dovecot/users

  default_fields = uid=vmail gid=vmail home=/var/mail/vhosts/%d/%n

}
再一次定义邮件路径,为何我也不知道。uid=vmail gid=vmail 表示使用vmail去读写这些邮件目录

这里有个坑,就是文件/etc/dovecot/users的用户,必须是服务器的用户。否则passdb可以通过,userdb通过不了,日志会显示找不到用户。

创建用户需要用命令:

useradd abcd@efd.com

并且需要将用户加入到vmail的组中,否则/var/mail/vhosts/%d/%n的邮箱地址显示该用户没有权限,拒绝接入。

加入组的命令:sudo usermod -aG vmail abcd@efd.com

/etc/dovecot/users文件内容的格式是:用户:{PLAIN}password

abcd@efd.com:{PLAIN}nidemima

11、/etc/dovecot/conf.d/10-mail.conf中这两行一定要有,而且格式不能变。

mail_home = /var/mail/vhosts/%d/%n

mail_location = maildir:~/Maildir

(为啥再一次指定邮箱路径?晕倒)否则不会为邮箱创建目录,找不到目前就不给接入。

12、证书指定:

ssl = yes

ssl_cert = </etc/letsencrypt/live/efd.com/fullchain.pem

ssl_key = </etc/letsencrypt/live/efd.com/privkey.pem

建议指定一下ca文件,否则可能有证书验证错误的问题:

ssl_ca = </etc/letsencrypt/live/efd.com/chain.pem

12、/etc/dovecot/conf.d/10-master.conf中对运行imap的用户指定:

service imap {

  user = vmail

}

13、#下面这条命令是确保25端口使用tls,否则对方如gmail会提醒是非加密邮件

smtp_tls_security_level = dane

14、虚拟邮箱路径,后面不要有/,否则多一个斜杠,就会出现/home//user,这种情况,就会说创建不了文件的错误。

virtual_mailbox_base = /home

15、如你的服务器是局域网内的一台机器。不要用iptables来转发流量,因为SNAT的方式,会导致丢失流量的源IP地址。就是邮件服务器只是看到你的网关的ip。这样postfix就认为是回环了。出现 mail loops back to myself 的错误。当你将局域网ip段加入到mynetworks的时候。

这些坑,对于初学者的我,花了好几天的时间才琢磨出来。一个地方错误,都得研究半天。供大家参考。

如果需要增加邮箱的别名

比如* abc@abc.com 的地址等于abc@abc.com

那么需要增加一个文件:/etc/postfix/virtual_maps,里面增加一行:

/^.*abc@abc\.com$/ abc@abc.com

然后在/etc/postfix/main.cf中,增加一行:

virtual_alias_maps = regexp:/etc/postfix/virtual_maps



2024年9月12日星期四

postfix创建虚拟邮箱

 如果不想为每个邮箱用户创建系统用户,可以使用虚拟用户(Virtual Users)的方式。通过 Postfix 配置虚拟用户,邮件将被存储在指定的目录中,不依赖系统用户。

步骤:

  1. 安装 Dovecot(或其他 IMAP/POP3 服务器): 如果使用虚拟用户,通常还会搭配 Dovecot 来处理用户的认证和邮件存储。

    安装 Dovecot:

    bash
    sudo apt install dovecot-core dovecot-imapd dovecot-pop3d
  2. 配置 Postfix 支持虚拟邮箱: 编辑 Postfix 配置文件 /etc/postfix/main.cf,添加或修改以下参数:

    bash
    virtual_mailbox_domains = abcd.xyz virtual_mailbox_base = /var/mail/vhosts virtual_mailbox_maps = hash:/etc/postfix/vmailbox virtual_minimum_uid = 100 virtual_uid_maps = static:5000 virtual_gid_maps = static:5000
  3. 设置虚拟用户和邮箱目录: 在 /etc/postfix/vmailbox 文件中指定邮箱用户及其对应的邮件路径。例如:

    bash
    abcd@abcd.xyz abcd.xyz/abcd/
  4. 更新 Postfix 虚拟邮箱数据库: 创建和更新虚拟邮箱数据库:

    bash
    sudo postmap /etc/postfix/vmailbox
  5. 设置目录权限: 为虚拟用户创建邮箱目录并设置权限:

    bash
    sudo mkdir -p /var/mail/vhosts/abcd.xyz/abcd sudo chown -R vmail:vmail /var/mail/vhosts/abcd.xyz
  6. 配置 Dovecot 进行用户认证: 编辑 Dovecot 配置 /etc/dovecot/conf.d/10-mail.conf,确保以下内容:

    bash
    mail_location = maildir:/var/mail/vhosts/%d/%n

    然后配置虚拟用户的认证,编辑 /etc/dovecot/conf.d/10-auth.conf,启用 auth-passwdfile

    bash
    passdb { driver = passwd-file args = /etc/dovecot/users }
  7. 创建虚拟用户的密码文件: 在 /etc/dovecot/users 文件中添加邮箱用户和密码:

    scss
    abcd@080401.xyz:{PLAIN}password123
  8. 重启 Postfix 和 Dovecot

    bash
    sudo systemctl restart postfix sudo systemctl restart dovecot

安装 PaddleOCR的方法

  安装飞桨版本:https://www.paddlepaddle.org.cn/install/quick?docurl=/documentation/docs/zh/develop/install/pip/windows-pip.html 命令:  python -m pip...