| 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/ | ||||