AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 681838
Accepted
Recct
Recct
Asked: 2015-04-11 06:19:55 +0800 CST2015-04-11 06:19:55 +0800 CST 2015-04-11 06:19:55 +0800 CST

FreeRADIUS 策略限制某些用户尝试登录特定设备

  • 772

我所拥有的:debian 上的 freeradius 2.1.10,配置为使用数据库。

现在的工作原理:网络上有很多设备和用户,用户登录设备进行配置等等。用户可以登录任何东西。例如,某些设备 (ciscos),radius 上的用户帐户带有cisco-avpair限制个人在 cisco 设备上可以做什么和不能做什么的权限(属性)。

对于特定的特殊情况,我还希望 freeradius 做什么:有一个特殊的设备,只有选择的用户才能进行身份验证。其他所有人都应该被拒绝访问。(因此,比上面的 cisco 示例更严格)。

我认为我应该做的是首先定义我自己的属性,例如company-special-privilege,这样我就可以为数据库中的某些用户设置它的值为0or 1。然后在policy.conf.

我要问的是:从来没有做过策略,我不明白它们在 freeradius 配置的其余部分中的应用位置(我应该把我的special_access策略放在哪里)。也不确定如何制定它,但以下伪代码应该代表我想要的:

special_access {
    if (request to log in $special_device_ip) {
        if ($username company-special-privilege) {
            reject #
        }
    }
}

从上面我不知道如何获取设备 IP 或用户设置的属性。我不会在第二个条件下对属性执行 == 1 以防用户没有该属性,因为我不知道这意味着什么,但任何没有 1 的用户都必须被拒绝。

freeradius
  • 2 2 个回答
  • 10802 Views

2 个回答

  • Voted
  1. Best Answer
    Arran Cudbard-Bell
    2015-04-11T08:13:19+08:002015-04-11T08:13:19+08:00

    你应该把它放在节raddb/policy.conf里面policy {}。然后他们可以像普通模块一样被引用(通过他们的名字),在授权、认证、后认证等......

    FreeRADIUS 中的策略本质上是宏,它们不是函数,它们不接受参数。

    定义一个特殊的属性来控制政策决策很好,raddb/dictionary除非你有一个 IANA 号码并且想要旋转你自己的自定义字典,否则就这样做。一种更简单的方法可能是直接查询 SQL。

    我不确定您要具体做什么,但这里有一个示例可能会有所帮助...根据需要进行修改

    special_access {
        if ("%{Called-Station-ID}" == 'special device') {
            if ("%{sql:SELECT special_priv FROM table WHERE username = '%{User-Name}'}" != '1') {
                reject
            }
        }
    }
    
    • 4
  2. Peter Tavenier
    2015-05-12T09:22:21+08:002015-05-12T09:22:21+08:00

    感谢我在http://linotp.org/doc/2.6/part-installation/integration/index.html上找到的一些信息,如果您使用 MySQL 数据库中的 nas 表,您可以使用以下配置。在nas表中,您有每个设备组的 IP 范围,因此如果您的设备在特定 IP 范围内,则将使用该策略:

    mysql> SELECT * FROM nas WHERE is = '1'; 
    +----+------------------+-------------+-------+------------+----------------------------------+
    | id | nasip            | shortname   | type  | secret     | description                      |
    +----+------------------+-------------+-------+------------+----------------------------------+
    |  1 | 192.168.1.0/24   | restricted  | other | *********  | only some users have access      |
    +----+------------------+-------------+-------+------------+----------------------------------+
    

    在文件sites-enabled/default中,您参考了该政策;

    authorize {
     ...
     update request {
         FreeRADIUS-Client-Shortname = "%{Client-Shortname}"
     }
     my_policy
     ...
    }
    

    并在policy.conf你写你的政策。此策略首先检查nas表中的受限前缀,然后检查用户是否具有足够的权限

    ...
      my_policy {
        if (FreeRadius-Client-Shortname =~ /^restricted/) {
          if ("%{sql:SELECT moreaccess FROM radusergroup WHERE username = '%{User-Name}'}" != '1') {
            update reply {
              Cisco-AVPair := "shell:priv-lvl=1"
            }
          }
        }
      }
    ...
    

    当然,在您radusergroup在 SQL 查询中引用的表中,您添加了一个额外的列,您可以在其中允许特定用户具有额外的权限。

    mysql> SELECT * FROM radusergroup WHERE username like 'peter%';
    +------------------+--------------+----------+------------+
    | username         | groupname    | priority | moreaccess |
    +------------------+--------------+----------+------------+
    | peter            | super-rights |        1 |       NULL |
    | peter1           | super-rights |        1 |          1 |
    | peter2           | super-rights |        1 |          0 |
    +------------------+--------------+----------+------------+
    

    在这种情况下,我写了这样的政策;

    • 通常已经获得了高权限:Cisco-AVPair := "shell:priv-lvl=15"
    • 因此,如果用户在这种情况下拥有“1”,peter1则只是获得正常权限。
    • 如果用户没有 '1' ( != '1'),它将获得策略中提到的权利。
      • 而不是使用update reply您可以使用reject来完全阻止此(peter和peter2)用户的访问。

    它可能会变得很复杂,但这对我有用。

    • 3

相关问题

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve