linux系统系通过服务启动脚本失败以及下载整个FTP目录到本地

有时候我们在linux系统下,我这里的系统是fedora ,通过服务的方法启动脚本会失败,就算放开了脚本的所有权限,我这里的权限是777,但是通过设置setenforce 0,又可以执行。那我不想setenforce 0,怎么办呢?方法如下,只对此脚本放宽权限。 

在 Fedora 系统上,为脚本 /home/ccc/download-ftp/ftp_download.sh ‌快速配置 SELinux 权限‌(无需完全关闭 SELinux),可直接执行以下简化步骤:

1. 修改脚本的 SELinux 上下文类型

运行以下命令,将脚本的上下文设置为 bin_t(允许执行):

sudo chcon -t bin_t /home/ccc/download-ftp/ftp_download.sh
 

作用‌:直接赋予脚本类似系统二进制文件的执行权限,绕开默认限制。


2. 永久生效配置(避免重启失效)

sudo semanage fcontext -a -t bin_t "/home/ccc/download-ftp/ftp_download.sh"  # 添加永久规则
sudo restorecon -v /home/ccc/download-ftp/ftp_download.sh  # 立即应用新规则
3. 如果仍失败,生成白名单策略(自动处理)

# 步骤1: 尝试启动服务触发 SELinux 拦截
sudo systemctl start ftp-download.service

# 步骤2: 自动生成并安装放行策略
sudo ausearch -m avc -ts recent | audit2allow -M my_ftp_policy  # 生成策略文件
sudo semodule -i my_ftp_policy.pp  # 加载策略
4. 重启服务验证

sudo systemctl restart ftp-download.service

关键命令说明

命令作用是否需重复执行
chcon临时修改文件上下文重启后失效
semanage fcontext + restorecon永久修改文件上下文仅需一次
audit2allow自动生成放行规则仅需一次

附:若未安装工具

先安装 SELinux 管理工具:

sudo dnf install policycoreutils-python-utils setools-console -y
 

ftp-download.service中的内容

路径:/etc/systemd/system/ftp-download.service

[Unit]
Description=Auto Download FTP Files

[Service]
ExecStart=/home/ccc/download-ftp/ftp_download.sh
#User=root
#Group=root

[Install]
WantedBy=multi-user.target

ftp-download.timer中的内容

路径:/etc/systemd/system/ftp-download.timer

[Unit]
Description=Run FTP Download Daily at 3 AM

[Timer]
OnCalendar=*-*-* 03:00:00

[Install]
WantedBy=timers.target

然后在命令行中执行

systemctl daemon-reload

实现的功能为每天早上3点定时执行脚本ftp_download.sh

脚本ftp_download.sh内容为

#!/bin/bash
# 记录下载开始时间戳(秒级)
START_TIME=$(date +%s)
CURRENT_USER=$(id -un)
CURRENT_GROUP=$(id -gn)

echo "user:${CURRENT_USER} group:${CURRENT_GROUP} [$(date '+%Y-%m-%d %H:%M:%S')] 开始下载" >> /ccc/ftp_download.log
DOWNLOAD_DIR="/ccc/server-ftp-files/"
FTP_URLS_FILE="home/ccc/download-ftp/ftp-urls-all.txt"
mkdir -p "$DOWNLOAD_DIR"

wget -c -r -N  -np -nH -l 5 -P "$DOWNLOAD_DIR" --ftp-user="user" --ftp-password="cpas123" -i "${FTP_URLS_FILE}"

# 记录下载结束时间戳(秒级)
END_TIME=$(date +%s)
TOTAL_TIME=$((END_TIME - START_TIME))

# 输出总耗时到日志(精确到秒)
echo "user:${CURRENT_USER} group:${CURRENT_GROUP} [$(date '+%Y-%m-%d %H:%M:%S')] 下载完成,总耗时:${TOTAL_TIME}秒" >> /ccc/ftp_download.log

确保脚本chmod 755 /home/ccc /home/ccc/download-ftp有可执行权限

chmod 755 /home/ccc /home/ccc/download-ftp

ftp-urls-all.txt文件中的内容为:

ftp://192.168.1.229:6121/质量保证部
ftp://192.168.1.229:6121/仓管部

这样配置好了以后就可以每天早上3点定时下载远端ftp上的文件夹整个目录到本机上实现备份

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值