You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux受限场景下跨用户直接传输大文件的可行方案探讨

可选解决方案

1. SGID脚本+管道直接传输

利用A可通过SGID脚本切换为B的权限,通过管道传递文件流,全程无中间文件或目录,完全规避安全风险:

  • 编写SGID脚本(组为g2,权限设为-rwxr-xr-x,仅允许A执行),内部验证调用者身份后,切换为B并接收标准输入写入目标路径
  • A在非交互式脚本中读取文件并通过管道传递给该SGID脚本

示例SGID脚本(命名为switch-to-b-write.sh):

#!/bin/bash
# 仅允许用户A执行,避免g2组内其他用户滥用
if [ "$(whoami)" != "userA" ]; then
    exit 1
fi

# 切换为B身份,将标准输入写入目标路径
exec su - userB -c 'cat > /path/to/Bs/target/f1.gz'

设置脚本权限:

chown root:g2 switch-to-b-write.sh
chmod 2755 switch-to-b-write.sh

A的传输命令:

cat /path/to/f1.gz | /path/to/switch-to-b-write.sh

2. dd命令结合SGID脚本优化大文件传输

针对大文件,用dd替代cat调整块大小,提升传输效率,逻辑和管道方案一致:

A的传输命令:

dd if=/path/to/f1.gz bs=4M | /path/to/switch-to-b-write.sh

修改SGID脚本内的写入命令为:

exec su - userB -c 'dd of=/path/to/Bs/target/f1.gz bs=4M'

通过调整bs参数(如4M、8M)匹配系统IO性能,减少磁盘读写次数。

3. NFS挂载+本地rsync(无需密钥)

如果B的目标区域在NFS挂载点上,可利用本地rsync直接传输,无需远程密钥:

  • 确保NFS服务器上B用户对目标目录有写入权限
  • SGID脚本内切换为B后,执行本地rsync操作(NFS挂载为本地路径)

修改SGID脚本:

#!/bin/bash
if [ "$(whoami)" != "userA" ]; then
    exit 1
fi

# 用rsync的--inplace参数优化大文件写入,减少磁盘占用
exec su - userB -c 'rsync --inplace /path/to/f1.gz /path/to/NFS/target/'

这种方式利用现有NFS环境,操作简单,且--inplace参数避免了临时文件的生成。

方案对比

方案核心优势注意事项
管道+SGID脚本无中间文件,安全级别高,适配所有文件场景需严格控制SGID脚本的权限和身份验证逻辑
dd+SGID脚本大文件传输效率更高,IO性能可调需根据系统配置优化块大小参数
NFS+rsync依赖现有环境,操作简便需确保NFS挂载稳定,B对目标目录有写入权限

内容的提问来源于stack exchange,提问作者szofar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 19:05:12