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

FreeRadius计费阶段执行脚本遇权限拒绝问题求助

FreeRadius计费阶段执行脚本权限拒绝问题

问题背景与现象

尝试在FreeRadius计费阶段配置执行脚本,配置片段如下:

accounting {
    update control { 
        ...omitted...
        update request {
        Tmp-String-5 := `/path/to/script/script.sh "%{Acct-Session-Id}"`
        }

触发脚本时出现权限拒绝错误:

(13)       update request {
(13)         Executing: `/path/to/script/script.sh "%{Acct-Session-Id}":
(13)         EXPAND %{Acct-Session-Id}
(13)            --> xxxxxxxxxxxxxxxxxxxx
(13)         ERROR: Program returned code (2) and output 'Failed to execute "/path/to/script/script.sh": Permission denied'

脚本功能为通过SSH连接其他服务器并传入参数,已为freerad用户配置SSH公钥,但直接执行SSH命令仍报错:

ERROR: Program returned code (2) and output 'Failed to execute "ssh": Permission denied'

尝试用su切换用户执行脚本也报相同错误:

update request {
        Tmp-String-5 := `su otheruser /path/to/script/script.sh "%{Acct-Session-Id}"`
        }
(12)         ERROR: Program returned code (2) and output 'Failed to execute "su": Permission denied'

权限错误含义

这个权限拒绝并非普通文件权限问题,而是**freerad用户被系统安全机制(SELinux/AppArmor)、用户shell限制,或系统命令执行规则阻止运行外部程序**。FreeRadius默认以受限系统用户运行,多数发行版会通过安全模块限制这类进程执行外部命令。

解决方法

1. 检查并调整SELinux/AppArmor限制

  • SELinux检查:
    执行getenforce查看状态,若显示Enforcing,临时关闭测试:setenforce 0。如果问题解决,需为FreeRadius添加SELinux允许规则:
    # 捕获审计日志生成规则
    audit2allow -a -M freerad-exec
    # 加载规则
    semodule -i freerad-exec.pp
    
  • AppArmor检查:
    执行aa-status查看FreeRadius的profile状态,若存在限制,临时禁用测试:aa-complain /etc/apparmor.d/usr.sbin.radiusd,后续修改profile添加允许执行脚本和ssh的规则。

2. 确保文件与命令的执行权限

  • 脚本文件及路径权限:
    # 给脚本添加执行权限
    chmod +x /path/to/script/script.sh
    # 确保路径层级都有执行权限
    chmod 755 /path/to/script
    chmod 755 /path/to
    
  • SSH命令权限:
    检查/usr/bin/ssh的权限,确保其他用户有执行权限:
    ls -l /usr/bin/ssh
    # 正常权限应为 -rwxr-xr-x
    

3. 调整用户shell与su/sudo规则

  • 检查freerad用户的shell:
    grep freerad /etc/passwd
    
    如果是/sbin/nologin或/usr/sbin/nologin,会限制执行命令,可临时改为/bin/bash(注意安全风险):
    usermod -s /bin/bash freerad
    
  • 用sudo替代su(更安全):
    编辑sudoers文件(执行visudo),添加规则允许freerad免密以otheruser身份执行脚本:
    freerad ALL=(otheruser) NOPASSWD: /path/to/script/script.sh
    
    然后修改FreeRadius配置:
    Tmp-String-5 := `sudo -u otheruser /path/to/script/script.sh "%{Acct-Session-Id}"`
    

4. 验证SSH公钥权限

确保freerad的SSH目录和密钥权限符合要求:

chown -R freerad:freerad /etc/freerad/.ssh
chmod 700 /etc/freerad/.ssh
chmod 600 /etc/freerad/.ssh/id_rsa

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 03:45:24