rfc9105.original | rfc9105.txt | |||
---|---|---|---|---|
Opsawg B. Wu, Ed. | Internet Engineering Task Force (IETF) B. Wu, Ed. | |||
Internet-Draft G. Zheng | Request for Comments: 9105 G. Zheng | |||
Intended status: Standards Track M. Wang, Ed. | Category: Standards Track M. Wang, Ed. | |||
Expires: November 14, 2021 Huawei | ISSN: 2070-1721 Huawei | |||
May 13, 2021 | August 2021 | |||
A YANG Module for TACACS+ | A YANG Data Model for Terminal Access Controller Access-Control System | |||
draft-ietf-opsawg-tacacs-yang-12 | Plus (TACACS+) | |||
Abstract | Abstract | |||
This document defines a Terminal Access Controller Access-Control | This document defines a Terminal Access Controller Access-Control | |||
System Plus (TACACS+) client YANG module, that augments the System | System Plus (TACACS+) client YANG module that augments the System | |||
Management data model, defined in RFC 7317, to allow devices to make | Management data model, defined in RFC 7317, to allow devices to make | |||
use of TACACS+ servers for centralized Authentication, Authorization | use of TACACS+ servers for centralized Authentication, Authorization, | |||
and Accounting (AAA). Though being a standard module, this module | and Accounting (AAA). Though being a standard module, this module | |||
does not endorse the security mechanisms of the TACACS+ protocol (RFC | does not endorse the security mechanisms of the TACACS+ protocol (RFC | |||
8907) and TACACS+ MUST be used within a secure deployment. | 8907), and TACACS+ MUST be used within a secure deployment. | |||
The YANG module in this document conforms to the Network Management | The YANG module in this document conforms to the Network Management | |||
Datastore Architecture (NMDA) defined in RFC 8342. | Datastore Architecture (NMDA) defined in RFC 8342. | |||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This is an Internet Standards Track document. | |||
provisions of BCP 78 and BCP 79. | ||||
Internet-Drafts are working documents of the Internet Engineering | ||||
Task Force (IETF). Note that other groups may also distribute | ||||
working documents as Internet-Drafts. The list of current Internet- | ||||
Drafts is at https://datatracker.ietf.org/drafts/current/. | ||||
Internet-Drafts are draft documents valid for a maximum of six months | This document is a product of the Internet Engineering Task Force | |||
and may be updated, replaced, or obsoleted by other documents at any | (IETF). It represents the consensus of the IETF community. It has | |||
time. It is inappropriate to use Internet-Drafts as reference | received public review and has been approved for publication by the | |||
material or to cite them other than as "work in progress." | Internet Engineering Steering Group (IESG). Further information on | |||
Internet Standards is available in Section 2 of RFC 7841. | ||||
This Internet-Draft will expire on November 14, 2021. | Information about the current status of this document, any errata, | |||
and how to provide feedback on it may be obtained at | ||||
https://www.rfc-editor.org/info/rfc9105. | ||||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2021 IETF Trust and the persons identified as the | Copyright (c) 2021 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
(https://trustee.ietf.org/license-info) in effect on the date of | (https://trustee.ietf.org/license-info) in effect on the date of | |||
publication of this document. Please review these documents | publication of this document. Please review these documents | |||
carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
described in the Simplified BSD License. | described in the Simplified BSD License. | |||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1. Introduction | |||
2. Conventions used in this document . . . . . . . . . . . . . . 3 | 2. Conventions Used in This Document | |||
2.1. Tree Diagrams . . . . . . . . . . . . . . . . . . . . . . 3 | 2.1. Tree Diagrams | |||
3. Design of the TACACS+ Data Model . . . . . . . . . . . . . . 3 | 3. Design of the TACACS+ Data Model | |||
4. TACACS+ Client Module . . . . . . . . . . . . . . . . . . . . 5 | 4. TACACS+ Client Module | |||
5. Security Considerations . . . . . . . . . . . . . . . . . . . 12 | 5. Security Considerations | |||
6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 13 | 6. IANA Considerations | |||
7. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 13 | 7. References | |||
8. References . . . . . . . . . . . . . . . . . . . . . . . . . 13 | 7.1. Normative References | |||
8.1. Normative References . . . . . . . . . . . . . . . . . . 13 | 7.2. Informative References | |||
8.2. Informative References . . . . . . . . . . . . . . . . . 15 | Appendix A. Example TACACS+ Authentication Configuration | |||
Appendix A. Example TACACS+ Authentication Configuration . . . . 15 | Acknowledgments | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 16 | Authors' Addresses | |||
1. Introduction | 1. Introduction | |||
This document defines a YANG module that augments the System | This document defines a YANG module that augments the System | |||
Management data model defined in the [RFC7317] to support the | Management data model defined in [RFC7317] to support the | |||
configuration and management of TACACS+ clients. | configuration and management of TACACS+ clients. | |||
TACACS+ [RFC8907] provides device administration for routers, network | TACACS+ [RFC8907] provides device administration for routers, network | |||
access servers and other networked devices via one or more | access servers, and other networked devices via one or more | |||
centralized servers. | centralized servers. | |||
The System Management Model [RFC7317] defines separate functionality | The System Management data model [RFC7317] defines separate | |||
to support local and RADIUS authentication: | functionality to support local and RADIUS authentication: | |||
o User Authentication Model: Defines a list of usernames with | User Authentication Model: Defines a list of usernames with | |||
associated passwords and a configuration leaf to decide the order | associated passwords and a configuration leaf to decide the order | |||
in which local or RADIUS authentication is used. | in which local or RADIUS authentication is used. | |||
o RADIUS Client Model: Defines a list of RADIUS servers used by a | RADIUS Client Model: Defines a list of RADIUS servers used by a | |||
device for centralized user authentication. | device for centralized user authentication. | |||
The System Management Model is augmented with the TACACS+ YANG module | The System Management data model is augmented with the TACACS+ YANG | |||
defined in this document to allow the use of TACACS+ servers as an | module defined in this document to allow the use of TACACS+ servers | |||
alternative to RADIUS servers. | as an alternative to RADIUS servers. | |||
The YANG module can be used with network management protocols such as | The YANG module can be used with network management protocols such as | |||
NETCONF[RFC6241]. | the Network Configuration Protocol (NETCONF) [RFC6241]. | |||
The YANG module in this document conforms to the Network Management | The YANG module in this document conforms to the Network Management | |||
Datastore Architecture (NMDA) defined in [RFC8342]. | Datastore Architecture (NMDA) defined in [RFC8342]. | |||
2. Conventions used in this document | 2. Conventions Used in This Document | |||
The keywords "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
"OPTIONAL" in this document are to be interpreted as described in | "OPTIONAL" in this document are to be interpreted as described in | |||
BCP14, [RFC2119], [RFC8174] when, and only when, they appear in all | BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
capitals, as shown here. | capitals, as shown here. | |||
The following terms are defined in [RFC6241] and are used in this | The following terms are defined in [RFC6241] and are used in this | |||
specification: | specification: | |||
o configuration data | * configuration data | |||
o state data | * state data | |||
The following terms are defined in [RFC7950] and are used in this | The following terms are defined in [RFC7950] and are used in this | |||
specification: | specification: | |||
o augment | * augment | |||
o data model | * data model | |||
o data node | * data node | |||
The terminology for describing YANG data models is found in | The terminology for describing YANG data models is found in | |||
[RFC7950]. | [RFC7950]. | |||
2.1. Tree Diagrams | 2.1. Tree Diagrams | |||
The tree diagram used in this document follows the notation defined | The tree diagram used in this document follows the notation defined | |||
in [RFC8340]. | in [RFC8340]. | |||
3. Design of the TACACS+ Data Model | 3. Design of the TACACS+ Data Model | |||
skipping to change at page 4, line 8 ¶ | skipping to change at line 144 ¶ | |||
support deployment scenarios with centralized authentication, | support deployment scenarios with centralized authentication, | |||
authorization, and accounting servers. Authentication is used to | authorization, and accounting servers. Authentication is used to | |||
validate a user's username and password, authorization allows the | validate a user's username and password, authorization allows the | |||
user to access and execute commands at various privilege levels | user to access and execute commands at various privilege levels | |||
assigned to the user, and accounting keeps track of the activity of a | assigned to the user, and accounting keeps track of the activity of a | |||
user who has accessed the device. | user who has accessed the device. | |||
The ietf-system-tacacs-plus module augments the "/sys:system" path | The ietf-system-tacacs-plus module augments the "/sys:system" path | |||
defined in the ietf-system module with the contents of the "tacacs- | defined in the ietf-system module with the contents of the "tacacs- | |||
plus" grouping. Therefore, a device can use local, RADIUS, or | plus" grouping. Therefore, a device can use local, RADIUS, or | |||
TACACS+ to validate users who attempt to access the router by several | TACACS+ authentication to validate users who attempt to access the | |||
mechanisms, e.g., a command line interface or a web-based user | router by several mechanisms, e.g., a command line interface or a | |||
interface. | web-based user interface. | |||
The "server" list is directly under the "tacacs-plus" container, | The "server" list, which is directly under the "tacacs-plus" | |||
which holds a list of TACACS+ servers and uses server-type to | container, holds a list of TACACS+ servers and uses server-type to | |||
distinguish between Authentication, Authorization and Accounting | distinguish between Authentication, Authorization, and Accounting | |||
(AAA). The list of servers is for redundancy. | (AAA) services. The list of servers is for redundancy. | |||
Most of the parameters in the "server" list are taken directly from | Most of the parameters in the "server" list are taken directly from | |||
the TACACS+ protocol [RFC8907], and some are derived from the various | the TACACS+ protocol [RFC8907], and some are derived from the various | |||
implementations by network equipment manufacturers. For example, | implementations by network equipment manufacturers. For example, | |||
when there are multiple interfaces connected to the TACACS+ client or | when there are multiple interfaces connected to the TACACS+ client or | |||
server, the source address of outgoing TACACS+ packets could be | server, the source address of outgoing TACACS+ packets could be | |||
specified, or the source address could be specified through the | specified, or the source address could be specified through the | |||
interface IP address setting, or derived from the outbound interface | interface IP address setting or derived from the outbound interface | |||
from the local Forwarding Information Base (FIB). For the TACACS+ | from the local Forwarding Information Base (FIB). For the TACACS+ | |||
server located in a Virtual Private Network (VPN), a VPN Routing and | server located in a Virtual Private Network (VPN), a VPN Routing and | |||
Forwarding (VRF) instance needs to be specified. | Forwarding (VRF) instance needs to be specified. | |||
The "statistics" container under the "server list" is a collection of | The "statistics" container under the "server list" is a collection of | |||
read-only counters for sent and received messages from a configured | read-only counters for sent and received messages from a configured | |||
server. | server. | |||
The YANG module for TACACS+ client has the following structure: | The YANG module for TACACS+ client has the following structure: | |||
skipping to change at page 5, line 43 ¶ | skipping to change at line 208 ¶ | |||
+--ro errors-received? yang:counter64 | +--ro errors-received? yang:counter64 | |||
+--ro sessions? yang:counter64 | +--ro sessions? yang:counter64 | |||
4. TACACS+ Client Module | 4. TACACS+ Client Module | |||
This YANG module imports typedefs from [RFC6991]. This module also | This YANG module imports typedefs from [RFC6991]. This module also | |||
uses the interface typedef from [RFC8343], the leafref to VRF | uses the interface typedef from [RFC8343], the leafref to VRF | |||
instance from [RFC8529], and the "default-deny-all" extension | instance from [RFC8529], and the "default-deny-all" extension | |||
statement from [RFC8341]. | statement from [RFC8341]. | |||
<CODE BEGINS> file "ietf-system-tacacs-plus@2021-05-13.yang" | <CODE BEGINS> file "ietf-system-tacacs-plus@2021-07-26.yang" | |||
module ietf-system-tacacs-plus { | ||||
module ietf-system-tacacs-plus { | yang-version 1.1; | |||
yang-version 1.1; | namespace "urn:ietf:params:xml:ns:yang:ietf-system-tacacs-plus"; | |||
namespace "urn:ietf:params:xml:ns:yang:ietf-system-tacacs-plus"; | prefix sys-tcs-plus; | |||
prefix sys-tcs-plus; | ||||
import ietf-inet-types { | ||||
prefix inet; | ||||
reference | ||||
"RFC 6991: Common YANG Data Types"; | ||||
} | ||||
import ietf-yang-types { | ||||
prefix yang; | ||||
reference | ||||
"RFC 6991: Common YANG Data Types"; | ||||
} | ||||
import ietf-network-instance { | ||||
prefix ni; | ||||
reference | ||||
"RFC 8529: YANG Data Model for Network Instances"; | ||||
} | ||||
import ietf-interfaces { | ||||
prefix if; | ||||
reference | ||||
"RFC 8343: A YANG Data Model for Interface Management"; | ||||
} | ||||
import ietf-system { | ||||
prefix sys; | ||||
reference | ||||
"RFC 7317: A YANG Data Model for System Management"; | ||||
} | ||||
import ietf-netconf-acm { | ||||
prefix nacm; | ||||
reference | ||||
"RFC 8341: Network Configuration Access Control Model"; | ||||
} | ||||
organization | ||||
"IETF Opsawg (Operations and Management Area Working Group)"; | ||||
contact | ||||
"WG Web: <http://tools.ietf.org/wg/opsawg/> | ||||
WG List: <mailto:opsawg@ietf.org> | ||||
Editor: Bo Wu <lana.wubo@huawei.com> | ||||
Editor: Guangying Zheng <zhengguangying@huawei.com>"; | ||||
description | ||||
"This module provides configuration of TACACS+ client. | ||||
Copyright (c) 2021 IETF Trust and the persons identified as | import ietf-inet-types { | |||
authors of the code. All rights reserved. | prefix inet; | |||
reference | ||||
"RFC 6991: Common YANG Data Types"; | ||||
} | ||||
import ietf-yang-types { | ||||
prefix yang; | ||||
reference | ||||
"RFC 6991: Common YANG Data Types"; | ||||
} | ||||
import ietf-network-instance { | ||||
prefix ni; | ||||
reference | ||||
"RFC 8529: YANG Data Model for Network Instances"; | ||||
} | ||||
import ietf-interfaces { | ||||
prefix if; | ||||
reference | ||||
"RFC 8343: A YANG Data Model for Interface Management"; | ||||
} | ||||
import ietf-system { | ||||
prefix sys; | ||||
reference | ||||
"RFC 7317: A YANG Data Model for System Management"; | ||||
} | ||||
import ietf-netconf-acm { | ||||
prefix nacm; | ||||
reference | ||||
"RFC 8341: Network Configuration Access Control Model"; | ||||
} | ||||
Redistribution and use in source and binary forms, with or | organization | |||
without modification, is permitted pursuant to, and subject | "IETF OPSAWG (Operations and Management Area Working Group)"; | |||
to the license terms contained in, the Simplified BSD License | contact | |||
set forth in Section 4.c of the IETF Trust's Legal Provisions | "WG Web: <http://datatracker.ietf.org/wg/opsawg/> | |||
Relating to IETF Documents | WG List: <mailto:opsawg@ietf.org> | |||
(http://trustee.ietf.org/license-info). | ||||
This version of this YANG module is part of RFC XXXX; see the | Editor: Bo Wu <lana.wubo@huawei.com> | |||
RFC itself for full legal notices. | Editor: Guangying Zheng <zhengguangying@huawei.com>"; | |||
description | ||||
"This module provides configuration of TACACS+ client. | ||||
The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL | The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL | |||
NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED', | NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED', | |||
'MAY', and 'OPTIONAL' in this document are to be interpreted as | 'MAY', and 'OPTIONAL' in this document are to be interpreted as | |||
described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, | described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, | |||
they appear in all capitals, as shown here."; | they appear in all capitals, as shown here. | |||
// RFC Ed.: update the date below with the date of RFC | Copyright (c) 2021 IETF Trust and the persons identified as | |||
// publication and remove this note. | authors of the code. All rights reserved. | |||
// RFC Ed.: replace XXXX with actual RFC number and remove | ||||
// this note. | ||||
revision 2021-05-13 { | Redistribution and use in source and binary forms, with or | |||
description | without modification, is permitted pursuant to, and subject | |||
"Initial revision."; | to the license terms contained in, the Simplified BSD License | |||
reference | set forth in Section 4.c of the IETF Trust's Legal Provisions | |||
"RFC XXXX: A YANG Module for TACACS+"; | Relating to IETF Documents | |||
} | (https://trustee.ietf.org/license-info). | |||
typedef tacacs-plus-server-type { | This version of this YANG module is part of RFC 9105; see the | |||
type bits { | RFC itself for full legal notices."; | |||
bit authentication { | ||||
description | ||||
"Indicates that the TACACS+ server is providing authentication | ||||
services."; | ||||
} | ||||
bit authorization { | ||||
description | ||||
"Indicates that the TACACS+ server is providing authorization | ||||
services."; | ||||
} | ||||
bit accounting { | ||||
description | ||||
"Indicates that the TACACS+ server is providing accounting | ||||
services."; | ||||
} | ||||
} | ||||
description | ||||
"tacacs-plus-server-type can be set to | ||||
authentication/authorization/accounting | ||||
or any combination of the three types."; | ||||
} | ||||
identity tacacs-plus { | revision 2021-07-26 { | |||
base sys:authentication-method; | description | |||
description | "Initial revision."; | |||
"Indicates AAA operation using TACACS+."; | reference | |||
reference | "RFC 9105: A YANG Data Model for Terminal Access Controller | |||
"RFC 8907: The TACACS+ Protocol"; | Access-Control System Plus (TACACS+)"; | |||
} | } | |||
grouping statistics { | typedef tacacs-plus-server-type { | |||
description | type bits { | |||
"Grouping for TACACS+ statistics attributes"; | bit authentication { | |||
container statistics { | description | |||
config false; | "Indicates that the TACACS+ server is providing | |||
description | authentication services."; | |||
"A collection of server-related statistics objects"; | } | |||
leaf connection-opens { | bit authorization { | |||
type yang:counter64; | description | |||
description | "Indicates that the TACACS+ server is providing | |||
"Number of new connection requests sent to the server, e.g., | authorization services."; | |||
socket open"; | } | |||
} | bit accounting { | |||
leaf connection-closes { | description | |||
type yang:counter64; | "Indicates that the TACACS+ server is providing accounting | |||
description | services."; | |||
"Number of connection close requests sent to the server, e.g., | } | |||
socket close"; | } | |||
} | description | |||
leaf connection-aborts { | "tacacs-plus-server-type can be set to | |||
type yang:counter64; | authentication/authorization/accounting | |||
description | or any combination of the three types."; | |||
"Number of aborted connections to the server. These do | } | |||
not include connections that are closed gracefully."; | ||||
} | ||||
leaf connection-failures { | ||||
type yang:counter64; | ||||
description | ||||
"Number of connection failures to the server"; | ||||
} | ||||
leaf connection-timeouts { | ||||
type yang:counter64; | ||||
description | ||||
"Number of connection timeouts to the server"; | ||||
} | ||||
leaf messages-sent { | ||||
type yang:counter64; | ||||
description | ||||
"Number of messages sent to the server"; | ||||
} | ||||
leaf messages-received { | ||||
type yang:counter64; | ||||
description | ||||
"Number of messages received from the server"; | ||||
} | ||||
leaf errors-received { | ||||
type yang:counter64; | ||||
description | ||||
"Number of error messages received from the server"; | ||||
} | ||||
leaf sessions { | ||||
type yang:counter64; | ||||
description | ||||
"Number of TACACS+ sessions completed with the server. | ||||
If the Single Connection Mode was NOT enabled, the number of | ||||
sessions is the same as the number of 'connection-closes'. | ||||
If the Mode was enabled, a single TCP connection may contain | ||||
multiple TACACS+ sessions."; | ||||
} | ||||
} | ||||
} | ||||
grouping tacacs-plus { | identity tacacs-plus { | |||
description | base sys:authentication-method; | |||
"Grouping for TACACS+ attributes"; | description | |||
container tacacs-plus { | "Indicates AAA operation using TACACS+."; | |||
must "not(derived-from-or-self(../sys:authentication" | reference | |||
+ "/sys:user-authentication-order, 'tacacs-plus'))" | "RFC 8907: The TACACS+ Protocol"; | |||
+ " or bit-is-set(server/server-type,'authentication')" { | } | |||
error-message "When 'tacacs-plus' is used as a system" | ||||
+ " authentication method, a TACACS+ authentication" | ||||
+ " server must be configured."; | ||||
description | ||||
"When 'tacacs-plus' is used as an authentication method, | ||||
a TACACS+ server must be configured."; | ||||
} | ||||
description | ||||
"Container for TACACS+ configurations and operations."; | ||||
list server { | ||||
key "name"; | ||||
ordered-by user; | ||||
description | ||||
"List of TACACS+ servers used by the device."; | ||||
leaf name { | ||||
type string; | ||||
description | ||||
"An arbitrary name for the TACACS+ server."; | ||||
} | ||||
leaf server-type { | ||||
type tacacs-plus-server-type; | ||||
mandatory true; | ||||
description | ||||
"Server type: authentication/authorization/accounting and | ||||
various combinations."; | ||||
} | ||||
leaf address { | ||||
type inet:host; | ||||
mandatory true; | ||||
description | ||||
"The address of the TACACS+ server."; | ||||
} | ||||
leaf port { | ||||
type inet:port-number; | ||||
default "49"; | ||||
description | ||||
"The port number of TACACS+ Server port."; | ||||
} | ||||
choice security { | ||||
mandatory true; | ||||
description | ||||
"Security mechanism between TACACS+ client and server. | ||||
This is modelled as a YANG 'choice' so that it can be | ||||
augmented by a YANG module in a backwards compatible | ||||
manner."; | ||||
case obfuscation { | ||||
leaf shared-secret { | ||||
type string { | ||||
length "1..max"; | ||||
} | ||||
nacm:default-deny-all; | ||||
description | ||||
"The shared secret, which is known to both the | ||||
TACACS+ client and server. TACACS+ server | ||||
administrators SHOULD configure a shared secret of | ||||
minimum 16 characters length. | ||||
It is highly recommended that this shared secret is | ||||
at least 32 characters long and sufficiently complex | ||||
with a mix of different character types | ||||
i.e. upper case, lower case, numeric, punctuation. | ||||
Note that this security mechanism is best described as | ||||
'obfuscation' and not 'encryption' as it does not | ||||
provide any meaningful integrity, privacy, or replay | ||||
protection."; | ||||
reference | ||||
"RFC 8907: The TACACS+ Protocol"; | ||||
} | ||||
} | ||||
} | grouping statistics { | |||
choice source-type { | description | |||
description | "Grouping for TACACS+ statistics attributes."; | |||
"The source address type for outbound TACACS+ packets."; | container statistics { | |||
case source-ip { | config false; | |||
leaf source-ip { | description | |||
type inet:ip-address; | "A collection of server-related statistics objects."; | |||
description | leaf connection-opens { | |||
"Specifies source IP address for TACACS+ outbound | type yang:counter64; | |||
packets."; | description | |||
} | "Number of new connection requests sent to the server, | |||
} | e.g., socket open."; | |||
case source-interface { | } | |||
leaf source-interface { | leaf connection-closes { | |||
type if:interface-ref; | type yang:counter64; | |||
description | description | |||
"Specifies the interface from which the IP address is | "Number of connection close requests sent to the server, | |||
derived for use as the source for the outbound TACACS+ | e.g., socket close."; | |||
packet"; | } | |||
} | leaf connection-aborts { | |||
} | type yang:counter64; | |||
} | description | |||
leaf vrf-instance { | "Number of aborted connections to the server. These do | |||
type leafref { | not include connections that are closed gracefully."; | |||
path "/ni:network-instances/ni:network-instance/ni:name"; | } | |||
} | leaf connection-failures { | |||
description | type yang:counter64; | |||
"Specifies the VPN Routing and Forwarding (VRF) instance to | description | |||
use to communicate with the TACACS+ server."; | "Number of connection failures to the server."; | |||
reference | } | |||
"RFC 8529: YANG Data Model for Network Instances"; | leaf connection-timeouts { | |||
} | type yang:counter64; | |||
leaf single-connection { | description | |||
type boolean; | "Number of connection timeouts to the server."; | |||
default "false"; | } | |||
description | leaf messages-sent { | |||
"Whether the single connection mode is enabled for the | type yang:counter64; | |||
server. By default, the single connection mode is | description | |||
disabled."; | "Number of messages sent to the server."; | |||
} | } | |||
leaf timeout { | leaf messages-received { | |||
type uint16 { | type yang:counter64; | |||
range "1..max"; | description | |||
} | "Number of messages received from the server."; | |||
units "seconds"; | } | |||
default "5"; | leaf errors-received { | |||
description | type yang:counter64; | |||
"The number of seconds the device will wait for a | description | |||
response from each TACACS+ server before trying with a | "Number of error messages received from the server."; | |||
different server."; | } | |||
} | leaf sessions { | |||
uses statistics; | type yang:counter64; | |||
} | description | |||
} | "Number of TACACS+ sessions completed with the server. | |||
} | If the Single Connection Mode was NOT enabled, the number | |||
of sessions is the same as the number of | ||||
'connection-closes'. If the Mode was enabled, a single | ||||
TCP connection may contain multiple TACACS+ sessions."; | ||||
} | ||||
} | ||||
} | ||||
augment "/sys:system" { | grouping tacacs-plus { | |||
description | description | |||
"Augment the system model with the tacacs-plus model"; | "Grouping for TACACS+ attributes."; | |||
uses tacacs-plus; | container tacacs-plus { | |||
} | must "not(derived-from-or-self(../sys:authentication" | |||
} | + "/sys:user-authentication-order, 'tacacs-plus'))" | |||
+ " or bit-is-set(server/server-type,'authentication')" { | ||||
error-message "When 'tacacs-plus' is used as a system" | ||||
+ " authentication method, a TACACS+" | ||||
+ " authentication server must be configured."; | ||||
description | ||||
"When 'tacacs-plus' is used as an authentication method, | ||||
a TACACS+ server must be configured."; | ||||
} | ||||
description | ||||
"Container for TACACS+ configurations and operations."; | ||||
list server { | ||||
key "name"; | ||||
ordered-by user; | ||||
description | ||||
"List of TACACS+ servers used by the device."; | ||||
leaf name { | ||||
type string; | ||||
description | ||||
"An arbitrary name for the TACACS+ server."; | ||||
} | ||||
leaf server-type { | ||||
type tacacs-plus-server-type; | ||||
mandatory true; | ||||
description | ||||
"Server type: authentication/authorization/accounting and | ||||
various combinations."; | ||||
} | ||||
leaf address { | ||||
type inet:host; | ||||
mandatory true; | ||||
description | ||||
"The address of the TACACS+ server."; | ||||
} | ||||
leaf port { | ||||
type inet:port-number; | ||||
default "49"; | ||||
description | ||||
"The port number of TACACS+ Server port."; | ||||
} | ||||
choice security { | ||||
mandatory true; | ||||
description | ||||
"Security mechanism between TACACS+ client and server. | ||||
This is modeled as a YANG 'choice' so that it can be | ||||
augmented by a YANG module in a backwards-compatible | ||||
manner."; | ||||
case obfuscation { | ||||
leaf shared-secret { | ||||
type string { | ||||
length "1..max"; | ||||
} | ||||
nacm:default-deny-all; | ||||
description | ||||
"The shared secret, which is known to both the | ||||
TACACS+ client and server. TACACS+ server | ||||
administrators SHOULD configure a shared secret with | ||||
a minimum length of 16 characters. | ||||
It is highly recommended that this shared secret is | ||||
at least 32 characters long and sufficiently complex | ||||
with a mix of different character types, | ||||
i.e., upper case, lower case, numeric, and | ||||
punctuation. Note that this security mechanism is | ||||
best described as 'obfuscation' and not 'encryption' | ||||
as it does not provide any meaningful integrity, | ||||
privacy, or replay protection."; | ||||
reference | ||||
"RFC 8907: The TACACS+ Protocol"; | ||||
} | ||||
} | ||||
} | ||||
choice source-type { | ||||
description | ||||
"The source address type for outbound TACACS+ packets."; | ||||
case source-ip { | ||||
leaf source-ip { | ||||
type inet:ip-address; | ||||
description | ||||
"Specifies source IP address for TACACS+ outbound | ||||
packets."; | ||||
} | ||||
} | ||||
case source-interface { | ||||
leaf source-interface { | ||||
type if:interface-ref; | ||||
description | ||||
"Specifies the interface from which the IP address | ||||
is derived for use as the source for the outbound | ||||
TACACS+ packet."; | ||||
} | ||||
} | ||||
} | ||||
leaf vrf-instance { | ||||
type leafref { | ||||
path "/ni:network-instances/ni:network-instance/ni:name"; | ||||
} | ||||
description | ||||
"Specifies the VPN Routing and Forwarding (VRF) instance | ||||
to use to communicate with the TACACS+ server."; | ||||
reference | ||||
"RFC 8529: YANG Data Model for Network Instances"; | ||||
} | ||||
leaf single-connection { | ||||
type boolean; | ||||
default "false"; | ||||
description | ||||
"Indicates whether the Single Connection Mode is enabled | ||||
for the server. By default, the Single Connection Mode | ||||
is disabled."; | ||||
} | ||||
leaf timeout { | ||||
type uint16 { | ||||
range "1..max"; | ||||
} | ||||
units "seconds"; | ||||
default "5"; | ||||
description | ||||
"The number of seconds the device will wait for a | ||||
response from each TACACS+ server before trying with a | ||||
different server."; | ||||
} | ||||
uses statistics; | ||||
} | ||||
} | ||||
} | ||||
augment "/sys:system" { | ||||
description | ||||
"Augments the system model with the tacacs-plus model."; | ||||
uses tacacs-plus; | ||||
} | ||||
} | ||||
<CODE ENDS> | <CODE ENDS> | |||
5. Security Considerations | 5. Security Considerations | |||
The YANG module defined in this document is designed to be accessed | The YANG module specified in this document defines a schema for data | |||
via network management protocols such as NETCONF [RFC6241] or | that is designed to be accessed via network management protocols such | |||
RESTCONF [RFC8040]. The lowest NETCONF layer is the secure transport | as NETCONF [RFC6241] or RESTCONF [RFC8040]. The lowest NETCONF layer | |||
layer, and the mandatory-to-implement secure transport is Secure | is the secure transport layer, and the mandatory-to-implement secure | |||
Shell (SSH) [RFC6242]. The lowest RESTCONF layer is HTTPS, and the | transport is Secure Shell (SSH) [RFC6242]. The lowest RESTCONF layer | |||
mandatory-to-implement secure transport is TLS [RFC8446]. | is HTTPS, and the mandatory-to-implement secure transport is TLS | |||
[RFC8446]. | ||||
The NETCONF access control model [RFC8341] provides the means to | The Network Configuration Access Control Model (NACM) [RFC8341] | |||
restrict access for particular NETCONF or RESTCONF users to a | provides the means to restrict access for particular NETCONF or | |||
preconfigured subset of all available NETCONF or RESTCONF protocol | RESTCONF users to a preconfigured subset of all available NETCONF or | |||
operations and content. | RESTCONF protocol operations and content. | |||
There are a number of data nodes defined in this YANG module that are | There are a number of data nodes defined in this YANG module that are | |||
writable/creatable/deletable (i.e., config true, which is the | writable/creatable/deletable (i.e., config true, which is the | |||
default). These data nodes may be considered sensitive or vulnerable | default). These data nodes may be considered sensitive or vulnerable | |||
in some network environments. Write operations (e.g., edit-config) | in some network environments. Write operations (e.g., edit-config) | |||
to these data nodes without proper protection can have a negative | to these data nodes without proper protection can have a negative | |||
effect on network operations. These are the subtrees and data nodes | effect on network operations. These are the subtrees and data nodes | |||
and their sensitivity/vulnerability: | and their sensitivity/vulnerability: | |||
/system/tacacsplus/server: This list contains the data nodes used to | /system/tacacs-plus/server: This list contains the data nodes used | |||
control the TACACS+ servers used by the device. Unauthorized | to control the TACACS+ servers used by the device. Unauthorized | |||
access to this list could enable an attacker to assume complete | access to this list could enable an attacker to assume complete | |||
control over the device by pointing to a compromised TACACS+ | control over the device by pointing to a compromised TACACS+ | |||
server ,or to modify the counters to hide attacks against the | server, or to modify the counters to hide attacks against the | |||
device. | device. | |||
/system/tacacsplus/server/shared-secret: This leaf controls the key | /system/tacacs-plus/server/shared-secret: This leaf controls the key | |||
known to both the TACACS+ client and server. Unauthorized access | known to both the TACACS+ client and server. Unauthorized access | |||
to this leaf could make the device vulnerable to attacks, | to this leaf could make the device vulnerable to attacks; | |||
therefore it has been restricted using the "default-deny-all" | therefore, it has been restricted using the "default-deny-all" | |||
access control defined in [RFC8341]. When setting, it is highly | access control defined in [RFC8341]. When setting, it is highly | |||
recommended that the leaf is at least 32 characters long and | recommended that the leaf is at least 32 characters long and | |||
sufficiently complex with a mix of different character types i.e. | sufficiently complex with a mix of different character types, | |||
upper case, lower case, numeric, punctuation. | i.e., upper case, lower case, numeric, and punctuation. | |||
This document describes the use of TACACS+ for purposes of | This document describes the use of TACACS+ for purposes of | |||
authentication, authorization and accounting, it is vulnerable to all | authentication, authorization, and accounting; it is vulnerable to | |||
of the threats that are present in TACACS+ applications. For a | all of the threats that are present in TACACS+ applications. For a | |||
discussion of such threats, see Section 10 of the TACACS+ Protocol | discussion of such threats, see Section 10 of the TACACS+ protocol | |||
[RFC8907]. | [RFC8907]. | |||
6. IANA Considerations | 6. IANA Considerations | |||
This document registers a URI in the IETF XML registry [RFC3688]. | IANA has registered the following URI in the "ns" subregistry within | |||
Following the format in [RFC3688], the following registration is | the "IETF XML Registry" [RFC3688]: | |||
requested to be made: | ||||
URI: urn:ietf:params:xml:ns:yang:ietf-system-tacacs-plus | ||||
Registrant Contact: The IESG. | ||||
XML: N/A, the requested URI is an XML namespace. | ||||
This document registers a YANG module in the YANG Module Names | ||||
registry [RFC7950]. | ||||
Name: ietf-system-tacacs-plus | URI: urn:ietf:params:xml:ns:yang:ietf-system-tacacs-plus | |||
Namespace: urn:ietf:params:xml:ns:yang:ietf-system-tacacs-plus | Registrant Contact: The IESG. | |||
Prefix: sys-tcs-plus | XML: N/A, the requested URI is an XML namespace. | |||
Reference: RFC XXXX (RFC Ed.: replace XXXX with actual | ||||
RFC number and remove this note.) | ||||
7. Acknowledgments | IANA has registered the following YANG module in the "YANG Module | |||
Names" registry [RFC7950]: | ||||
The authors wish to thank Alex Campbell, John Heasley, Ebben Aries, | Name: ietf-system-tacacs-plus | |||
Alan DeKok, Joe Clarke, Joe Clarke, Tom Petch, Robert Wilton, and | Maintained by IANA: N | |||
many others for their helpful comments and suggestions. | Namespace: urn:ietf:params:xml:ns:yang:ietf-system-tacacs-plus | |||
Prefix: sys-tcs-plus | ||||
Reference: RFC 9105 | ||||
8. References | 7. References | |||
8.1. Normative References | 7.1. Normative References | |||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
<https://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
[RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., | [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., | |||
and A. Bierman, Ed., "Network Configuration Protocol | and A. Bierman, Ed., "Network Configuration Protocol | |||
(NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, | (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, | |||
<https://www.rfc-editor.org/info/rfc6241>. | <https://www.rfc-editor.org/info/rfc6241>. | |||
skipping to change at page 15, line 14 ¶ | skipping to change at line 644 ¶ | |||
[RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol | [RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol | |||
Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, | Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, | |||
<https://www.rfc-editor.org/info/rfc8446>. | <https://www.rfc-editor.org/info/rfc8446>. | |||
[RFC8529] Berger, L., Hopps, C., Lindem, A., Bogdanovic, D., and X. | [RFC8529] Berger, L., Hopps, C., Lindem, A., Bogdanovic, D., and X. | |||
Liu, "YANG Data Model for Network Instances", RFC 8529, | Liu, "YANG Data Model for Network Instances", RFC 8529, | |||
DOI 10.17487/RFC8529, March 2019, | DOI 10.17487/RFC8529, March 2019, | |||
<https://www.rfc-editor.org/info/rfc8529>. | <https://www.rfc-editor.org/info/rfc8529>. | |||
[RFC8907] Dahm, T., Ota, A., Medway Gash, D., Carrel, D., and L. | [RFC8907] Dahm, T., Ota, A., Medway Gash, D.C., Carrel, D., and L. | |||
Grant, "The Terminal Access Controller Access-Control | Grant, "The Terminal Access Controller Access-Control | |||
System Plus (TACACS+) Protocol", RFC 8907, | System Plus (TACACS+) Protocol", RFC 8907, | |||
DOI 10.17487/RFC8907, September 2020, | DOI 10.17487/RFC8907, September 2020, | |||
<https://www.rfc-editor.org/info/rfc8907>. | <https://www.rfc-editor.org/info/rfc8907>. | |||
8.2. Informative References | 7.2. Informative References | |||
[RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, | [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, | |||
DOI 10.17487/RFC3688, January 2004, | DOI 10.17487/RFC3688, January 2004, | |||
<https://www.rfc-editor.org/info/rfc3688>. | <https://www.rfc-editor.org/info/rfc3688>. | |||
Appendix A. Example TACACS+ Authentication Configuration | Appendix A. Example TACACS+ Authentication Configuration | |||
The following shows an example where a TACACS+ authentication server | The following shows an example where a TACACS+ authentication server | |||
instance is configured. | instance is configured. | |||
skipping to change at page 16, line 5 ¶ | skipping to change at line 681 ¶ | |||
"address": "192.0.2.2", | "address": "192.0.2.2", | |||
"shared-secret": "QaEfThUkO198010075460923+h3TbE8n", | "shared-secret": "QaEfThUkO198010075460923+h3TbE8n", | |||
"source-ip": "192.0.2.12", | "source-ip": "192.0.2.12", | |||
"timeout": "10" | "timeout": "10" | |||
} | } | |||
] | ] | |||
} | } | |||
} | } | |||
} | } | |||
Acknowledgments | ||||
The authors wish to thank Alex Campbell, John Heasley, Ebben Aries, | ||||
Alan DeKok, Joe Clarke, Tom Petch, Robert Wilton, and many others for | ||||
their helpful comments and suggestions. | ||||
Authors' Addresses | Authors' Addresses | |||
Bo Wu (editor) | Bo Wu (editor) | |||
Huawei Technologies, Co., | Huawei Technologies, Co., Ltd | |||
Ltd | Yuhua District | |||
101 Software Avenue, Yuhua District | 101 Software Avenue | |||
Nanjing, Jiangsu 210012 | Nanjing | |||
Jiangsu, 210012 | ||||
China | China | |||
Email: lana.wubo@huawei.com | Email: lana.wubo@huawei.com | |||
Guangying Zheng | Guangying Zheng | |||
Huawei Technologies, Co., | Huawei Technologies, Co., Ltd | |||
Ltd | Yuhua District | |||
101 Software Avenue, Yuhua District | 101 Software Avenue | |||
Nanjing, Jiangsu 210012 | Nanjing | |||
Jiangsu, 210012 | ||||
China | China | |||
Email: zhengguangying@huawei.com | Email: zhengguangying@huawei.com | |||
Michael Wang (editor) | Michael Wang (editor) | |||
Huawei Technologies, Co., | Huawei Technologies, Co., Ltd | |||
Ltd | Yuhua District | |||
101 Software Avenue, Yuhua District | 101 Software Avenue | |||
Nanjing 210012 | Nanjing | |||
210012 | ||||
China | China | |||
Email: wangzitao@huawei.com | Email: wangzitao@huawei.com | |||
End of changes. 61 change blocks. | ||||
417 lines changed or deleted | 410 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |