Freeradius

FreeRADIUS / Active Directory / 電腦身份驗證

  • September 1, 2022

我正在尋找一種簡單的轉彎方式:

User-Name = "host/DESKTOP-F6E023D.msad.domain.net" 

到以下:

Stripped-User-Name := DESKTOP-F6E023D$
realm := msad.domain.net

在我的虛擬伺服器配置中,我使用 unlang 完成了以下操作:

if ( User-Name =~ /^host\/(.*)\.msad\.domain\.net$/i ) {
    update request {
         Stripped-User-Name := "%{1}$"
         realm := "msad.domain.net"        
    }
}

我希望使我的虛擬伺服器配置更通用,並處理多個域並將該功能移動到模組/策略中。我試圖創建一個策略,但正在努力使用正則表達式來拆分該字元串,以便我可以分配 Stripped-User-Name 和領域值。任何幫助將不勝感激。

./policy.d/filter

filter_computer_auth {
       if (&User-Name =~ /^host\/(.+)[\.](.*)$/) {
               update request {
                       &Stripped-User-Name := "%{1}$"
                       &realm := "%{2}"
               }
       }
}

產量:

Stripped-User-Name := DESKTOP-F6E023D.msad.cnylab$
realm := net

正則表達式可能需要根據您的需要進行調整,但您可以創建一個包含如下內容的策略文件

my_host_username_regexp = '^host\/([-[:alnum:]]+)(\.([-[:alnum:].]*))*$'

my_split_host_username {
   if (&User-Name && (&User-Name =~ /${policy.my_host_username_regexp}/)) {
       update request {
           &Stripped-User-Name := "%{1}"
       }
       if ("%{3}" != '') {
           update request {
               #&Stripped-User-Domain = "%{3}"
               &realm := "%{3}"
           }
       }
       updated
   }
   else {
       noop
   }
}

我試圖複製freeradius 提供split_username_nai的策略以保持一致性。

您可以通過在https://regex101.com/上對其進行測試來了解有關正則表達式的更多資訊

引用自:https://serverfault.com/questions/1109580