Linux服务器下以SA2身份获取日志并开放给SA1的实现方案
解决方案:让SA1间接访问SA2专属日志
方案一:通过sudo权限控制(推荐,遵循最小权限原则)
前置配置
- 使用
visudo命令编辑sudoers配置文件(必须用此命令,避免语法错误导致sudo失效),添加以下规则:
这条规则限制SA1仅能无需SA2密码,以SA2身份执行指定的日志复制命令,避免权限过度开放。SA1 ALL=(SA2) NOPASSWD: /bin/cp /path/to/sa2-restricted-logs/* /public-shared/
编写执行脚本
创建脚本get_sa2_logs.sh(SA1需拥有该脚本的读写执行权限):
#!/bin/bash # 根据实际环境修改路径 SA2_LOG_SOURCE="/var/log/sa2-only/" PUBLIC_TARGET="/public-shared/" # 以SA2身份执行日志复制 sudo -u SA2 cp -rf "${SA2_LOG_SOURCE}"* "${PUBLIC_TARGET}" # 输出执行结果 if [ $? -eq 0 ]; then echo "日志复制成功,可前往${PUBLIC_TARGET}查看" else echo "复制失败,请检查路径或sudo配置是否正确" fi
给脚本添加执行权限:
chmod +x get_sa2_logs.sh
使用方式
团队成员用SA1登录服务器后,直接运行脚本即可:
./get_sa2_logs.sh
完成后就能在/public-shared/目录下访问SA2专属日志。
方案二:SA1免密SSH登录本地SA2(适用于需执行复杂命令的场景)
前置配置
- 切换到SA1账号,生成无密码SSH密钥对:
执行过程中一路回车,不要设置密钥密码。ssh-keygen -t rsa - 将SA1的公钥添加到SA2的SSH授权列表:
配置完成后,SA1就能免密通过SSH登录本地的SA2账号。sudo -u SA2 mkdir -p ~SA2/.ssh cat ~SA1/.ssh/id_rsa.pub | sudo -u SA2 tee -a ~SA2/.ssh/authorized_keys sudo -u SA2 chmod 600 ~SA2/.ssh/authorized_keys sudo -u SA2 chmod 700 ~SA2/.ssh
编写执行脚本
创建脚本fetch_sa2_logs_via_ssh.sh:
#!/bin/bash SA2_LOG_SOURCE="/var/log/sa2-restricted/" PUBLIC_TARGET="/public-shared/" # 本地SSH登录SA2并执行日志复制 ssh SA2@localhost "cp -rf ${SA2_LOG_SOURCE}* ${PUBLIC_TARGET}" # 验证执行结果 if [ $? -eq 0 ]; then echo "日志已同步到公共目录" else echo "同步失败,请检查SSH配置或路径" fi
给脚本添加执行权限:
chmod +x fetch_sa2_logs_via_ssh.sh
使用方式
SA1登录服务器后运行脚本即可,无需输入SA2密码。
安全提示
- 优先采用方案一,sudo规则严格限制了SA1的操作范围,避免SA2账号被完全控制
- 确保公共目录
/public-shared/仅用于存放共享日志,避免存入其他敏感文件 - 定期检查sudoers配置或SSH授权密钥,防止权限配置被篡改
内容的提问来源于stack exchange,提问作者Vidhya Dhara
相关产品推荐
相关产品推荐

