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身份执行脚本:
然后修改FreeRadius配置:freerad ALL=(otheruser) NOPASSWD: /path/to/script/script.shTmp-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
相关产品推荐
相关产品推荐

