draft-ietf-netconf-access-control-02.txt | draft-ietf-netconf-access-control-03.txt | |||
---|---|---|---|---|
Internet Engineering Task Force A. Bierman | Internet Engineering Task Force A. Bierman | |||
Internet-Draft Brocade | Internet-Draft Brocade | |||
Intended status: Standards Track M. Bjorklund | Intended status: Standards Track M. Bjorklund | |||
Expires: August 7, 2011 Tail-f Systems | Expires: September 12, 2011 Tail-f Systems | |||
February 3, 2011 | March 11, 2011 | |||
Network Configuration Protocol Access Control Model | Network Configuration Protocol Access Control Model | |||
draft-ietf-netconf-access-control-02 | draft-ietf-netconf-access-control-03 | |||
Abstract | Abstract | |||
The standardization of network configuration interfaces for use with | The standardization of network configuration interfaces for use with | |||
the NETCONF protocol requires a structured and secure operating | the NETCONF protocol requires a structured and secure operating | |||
environment, which promotes human usability and multi-vendor | environment, which promotes human usability and multi-vendor | |||
interoperability. There is a need for standard mechanisms to | interoperability. There is a need for standard mechanisms to | |||
restrict NETCONF protocol access for particular users to a pre- | restrict NETCONF protocol access for particular users to a pre- | |||
configured subset of all available NETCONF operations and content. | configured subset of all available NETCONF operations and content. | |||
This document discusses requirements for a suitable access control | This document discusses requirements for a suitable access control | |||
skipping to change at page 1, line 38 | skipping to change at page 1, line 38 | |||
Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
Drafts is at http://datatracker.ietf.org/drafts/current/. | Drafts is at http://datatracker.ietf.org/drafts/current/. | |||
Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
This Internet-Draft will expire on August 7, 2011. | This Internet-Draft will expire on September 12, 2011. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2011 IETF Trust and the persons identified as the | Copyright (c) 2011 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 | |||
(http://trustee.ietf.org/license-info) in effect on the date of | (http://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 | |||
skipping to change at page 3, line 21 | skipping to change at page 3, line 21 | |||
4. References . . . . . . . . . . . . . . . . . . . . . . . . . . 44 | 4. References . . . . . . . . . . . . . . . . . . . . . . . . . . 44 | |||
4.1. Normative References . . . . . . . . . . . . . . . . . . . 44 | 4.1. Normative References . . . . . . . . . . . . . . . . . . . 44 | |||
4.2. Informative References . . . . . . . . . . . . . . . . . . 44 | 4.2. Informative References . . . . . . . . . . . . . . . . . . 44 | |||
Appendix A. Usage Examples . . . . . . . . . . . . . . . . . . . 45 | Appendix A. Usage Examples . . . . . . . . . . . . . . . . . . . 45 | |||
A.1. <groups> Example . . . . . . . . . . . . . . . . . . . . . 45 | A.1. <groups> Example . . . . . . . . . . . . . . . . . . . . . 45 | |||
A.2. <module-rule> Example . . . . . . . . . . . . . . . . . . 46 | A.2. <module-rule> Example . . . . . . . . . . . . . . . . . . 46 | |||
A.3. <rpc-rule> Example . . . . . . . . . . . . . . . . . . . . 47 | A.3. <rpc-rule> Example . . . . . . . . . . . . . . . . . . . . 47 | |||
A.4. <data-rule> Example . . . . . . . . . . . . . . . . . . . 49 | A.4. <data-rule> Example . . . . . . . . . . . . . . . . . . . 49 | |||
A.5. <notification-rule> Example . . . . . . . . . . . . . . . 51 | A.5. <notification-rule> Example . . . . . . . . . . . . . . . 51 | |||
Appendix B. Change Log . . . . . . . . . . . . . . . . . . . . . 52 | Appendix B. Change Log . . . . . . . . . . . . . . . . . . . . . 52 | |||
B.1. 01-02 . . . . . . . . . . . . . . . . . . . . . . . . . . 52 | B.1. 02-03 . . . . . . . . . . . . . . . . . . . . . . . . . . 52 | |||
B.2. 00-01 . . . . . . . . . . . . . . . . . . . . . . . . . . 52 | B.2. 01-02 . . . . . . . . . . . . . . . . . . . . . . . . . . 52 | |||
B.3. 00 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 | B.3. 00-01 . . . . . . . . . . . . . . . . . . . . . . . . . . 52 | |||
B.4. 00 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 | ||||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 53 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 53 | |||
1. Introduction | 1. Introduction | |||
The NETCONF protocol does not provide any standard mechanisms to | The NETCONF protocol does not provide any standard mechanisms to | |||
restrict the operations and content that each user is authorized to | restrict the operations and content that each user is authorized to | |||
use. | use. | |||
There is a need for inter-operable management of the controlled | There is a need for inter-operable management of the controlled | |||
access to operator selected portions of the available NETCONF content | access to operator selected portions of the available NETCONF content | |||
skipping to change at page 5, line 25 | skipping to change at page 5, line 25 | |||
access control: A security feature provided by the NETCONF server, | access control: A security feature provided by the NETCONF server, | |||
which allows an operator to restrict access to a subset of all | which allows an operator to restrict access to a subset of all | |||
NETCONF protocol operations and data, based on various criteria. | NETCONF protocol operations and data, based on various criteria. | |||
access control model (ACM): A conceptual model used to configure and | access control model (ACM): A conceptual model used to configure and | |||
monitor the access control procedures desired by the operator to | monitor the access control procedures desired by the operator to | |||
enforce a particular access control policy. | enforce a particular access control policy. | |||
access control rule: The conceptual criteria used to determine if a | access control rule: The conceptual criteria used to determine if a | |||
particular NETCONF protocol operation should be permitted or | particular NETCONF protocol operation will be permitted or denied. | |||
denied. | ||||
authentication: The process of verifying a user's identity. | authentication: The process of verifying a user's identity. | |||
superuser: The special administrative user account which is given | superuser: The special administrative user account which is given | |||
unlimited NETCONF access, and is exempt from all access control | unlimited NETCONF access, and is exempt from all access control | |||
enforcement. | enforcement. | |||
2. Access Control Requirements | 2. Access Control Requirements | |||
2.1. Protocol Control Points | 2.1. Protocol Control Points | |||
The NETCONF protocol allows new operations to be added at any time, | The NETCONF protocol allows new operations to be added at any time, | |||
and the YANG data modeling language supports this feature. It is not | and the YANG data modeling language supports this feature. It is not | |||
possible to design an ACM for NETCONF which only focuses on a static | possible to design an ACM for NETCONF which only focuses on a static | |||
set of operations, like some other protocols. Since few assumptions | set of operations, like some other protocols. Since few assumptions | |||
can be made about an arbitrary protocol operation, the NETCONF | can be made about an arbitrary protocol operation, the NETCONF | |||
architectural server components must be protected at several | architectural server components need to be protected at several | |||
conceptual control points. | conceptual control points. | |||
+-------------+ +-------------+ | +-------------+ +-------------+ | |||
client | protocol | | prune | client | client | protocol | | prune | client | |||
request --> | operation | | restricted | ---> reply | request --> | operation | | restricted | ---> reply | |||
| allowed? | | <rpc-reply> | | | allowed? | | <rpc-reply> | | |||
+-------------+ | nodes? | | +-------------+ | nodes? | | |||
| +-------------+ | | +-------------+ | |||
| if any datastore or | | if any datastore or | |||
| state data is accessed | | state data is accessed | |||
skipping to change at page 7, line 13 | skipping to change at page 7, line 13 | |||
dropping the reply or sending an 'access-denied' error. | dropping the reply or sending an 'access-denied' error. | |||
Notification Content: Configurable permission to receive specific | Notification Content: Configurable permission to receive specific | |||
notification event types is required. | notification event types is required. | |||
2.2. Simplicity | 2.2. Simplicity | |||
Experience has shown that a complicated ACM will not be widely | Experience has shown that a complicated ACM will not be widely | |||
deployed, because it is too hard to use. The key factor that is | deployed, because it is too hard to use. The key factor that is | |||
ignored in such solutions is the concept of 'localized cost'. It | ignored in such solutions is the concept of 'localized cost'. It | |||
should be easy to do simple things, and hard to do complex things, | needs to be easy to do simple things, and hard to do complex things, | |||
instead of hard to do everything. | instead of hard to do everything. | |||
Configuration of the access control system must be simple to use. | Configuration of the access control system needs to be simple to use. | |||
Simple and common tasks should be easy to configure, and require | Simple and common tasks need to be easy to configure, and require | |||
little expertise or domain-specific knowledge. Complex tasks should | little expertise or domain-specific knowledge. Complex tasks are | |||
be possible using additional mechanisms which may require additional | possible using additional mechanisms, which may require additional | |||
expertise. | expertise. | |||
A single set of access control rules should be able to control all | A single set of access control rules SHOULD be able to control all | |||
types of NETCONF protocol operation invocation, all conceptual | types of NETCONF protocol operation invocation, all conceptual | |||
datastore access, and all NETCONF session output. | datastore access, and all NETCONF session output. | |||
Default access control policy needs to be as secure as possible. | Default access control policy needs to be as secure as possible. | |||
Protocol access should be defined with a small and familiar set of | Protocol access SHOULD be defined with a small and familiar set of | |||
permissions, while still allowing full control of NETCONF datastore | permissions, while still allowing full control of NETCONF datastore | |||
access. | access. | |||
Access control does not need to be applied to NETCONF <hello> | Access control does not need to be applied to NETCONF <hello> | |||
messages. | messages. | |||
2.3. Procedural Interface | 2.3. Procedural Interface | |||
The NETCONF protocol uses a procedural interface model, and an | The NETCONF protocol uses a procedural interface model, and an | |||
extensible set of protocol operations. Access control for any | extensible set of protocol operations. Access control for any | |||
possible protocol operation is required. | possible protocol operation is required. | |||
It must be possible to configure the ACM to permit or deny access to | It MUST be possible to configure the ACM to permit or deny access to | |||
specific NETCONF operations. | specific NETCONF operations. | |||
YANG modules should be designed so that different access levels for | YANG modules SHOULD be designed so that different access levels for | |||
input parameters to protocol operations is not required. | input parameters to protocol operations is not required. | |||
2.4. Datastore Access | 2.4. Datastore Access | |||
It must be possible to control access to specific nodes and sub-trees | It MUST be possible to control access to specific nodes and sub-trees | |||
within the conceptual NETCONF datastore. | within the conceptual NETCONF datastore. | |||
In order for a user to obtain access to a particular datastore node, | In order for a user to obtain access to a particular datastore node, | |||
the user must be authorized to have the same requested access to the | the user MUST be authorized to have the same requested access to the | |||
specified node, and all of its ancestors. | specified node, and all of its ancestors. | |||
The same access control rules apply to all conceptual datastores. | The same access control rules apply to all conceptual datastores. | |||
For example, the candidate configuration or the running | For example, the candidate configuration or the running | |||
configuration. | configuration. | |||
Only the standard NETCONF datastores (candidate, running, and | Only the standard NETCONF datastores (candidate, running, and | |||
startup) are controlled by the ACM. Local or remote files or | startup) are controlled by the ACM. Local or remote files or | |||
datastores accessed via the <url> parameter are optional to support. | datastores accessed via the <url> parameter are optional to support. | |||
skipping to change at page 9, line 39 | skipping to change at page 9, line 39 | |||
the corresponding datastore node. These unaltered data nodes within | the corresponding datastore node. These unaltered data nodes within | |||
the scope of a 'merge' operation are ignored by the server, and do | the scope of a 'merge' operation are ignored by the server, and do | |||
not require any access rights by the client. | not require any access rights by the client. | |||
A 'merge' operation may include data nodes, but not include | A 'merge' operation may include data nodes, but not include | |||
particular child data nodes that are present in the datastore. These | particular child data nodes that are present in the datastore. These | |||
missing data nodes within the scope of a 'merge' operation are | missing data nodes within the scope of a 'merge' operation are | |||
ignored by the server, and do not require any access rights by the | ignored by the server, and do not require any access rights by the | |||
client. | client. | |||
The contents of specific restricted datastore nodes must not be | The contents of specific restricted datastore nodes MUST NOT be | |||
exposed in any <rpc-error> elements within the reply. | exposed in any <rpc-error> elements within the reply. | |||
2.4.4. <copy-config> Operation | 2.4.4. <copy-config> Operation | |||
Access control for the <copy-config> operation requires special | Access control for the <copy-config> operation requires special | |||
consideration because the operator is replacing the entire target | consideration because the operator is replacing the entire target | |||
datastore. Read access to the entire source datastore, and write | datastore. Read access to the entire source datastore, and write | |||
access to the entire target datastore is needed for this operation to | access to the entire target datastore is needed for this operation to | |||
succeed. | succeed. | |||
A client must have access to every datastore node, even ones that are | A client MUST have access to every datastore node, even ones that are | |||
not present in the source configuration data. | not present in the source configuration data. | |||
For example, consider a common use-case such as a simple backup and | For example, consider a common use-case such as a simple backup and | |||
restore procedure. The operator must have full read access to the | restore procedure. The operator (client) MUST have full read access | |||
datastore in order to receive a complete copy of its contents. If | to the datastore in order to receive a complete copy of its contents. | |||
not, the server will simply omit these sub-trees from the reply. If | If not, the server will simply omit these sub-trees from the reply. | |||
that copy is later used to restore the server datastore, the server | If that copy is later used to restore the server datastore, the | |||
will interpret the missing nodes as a request to delete those nodes, | server will interpret the missing nodes as a request to delete those | |||
and return an error. | nodes, and return an error. | |||
2.5. Users and Groups | 2.5. Users and Groups | |||
The server must obtain a user name from the underlying NETCONF | The server MUST obtain a user name from the underlying NETCONF | |||
transport, such as an SSH user name. | transport, such as an SSH user name. | |||
It must be possible to specify access control rules for a single user | It MUST be possible to specify access control rules for a single user | |||
or a configurable group of users. | or a configurable group of users. | |||
A configurable superuser account is needed which bypasses all access | A configurable superuser account may be needed which bypasses all | |||
control rules. This is needed in case the access control rules are | access control rules. This could be needed in case the access | |||
mis-configured, and all access is denied. | control rules are mis-configured, and all access is denied by | |||
mistake. | ||||
The ACM must support the concept of administrative groups, to support | The ACM MUST support the concept of administrative groups, to support | |||
the well-established distinction between a root account and other | the well-established distinction between a root account and other | |||
types of less-privileged conceptual user accounts. These groups must | types of less-privileged conceptual user accounts. These groups MUST | |||
be configurable by the operator. | be configurable by the operator. | |||
It must be possible to delegate the user-to-group mapping to a | It MUST be possible to delegate the user-to-group mapping to a | |||
central server, such as RADIUS [RFC2865] [RFC5607]. Since | central server, such as RADIUS [RFC2865] [RFC5607]. Since | |||
authentication is performed by the NETCONF transport layer, and | authentication is performed by the NETCONF transport layer, and | |||
RADIUS performs authentication and service authorization at the same | RADIUS performs authentication and service authorization at the same | |||
time, it must be possible for the underlying NETCONF transport to | time, it MUST be possible for the underlying NETCONF transport to | |||
report a set of group names associated with the user to the server. | report a set of group names associated with the user to the server. | |||
2.6. Maintenance | 2.6. Maintenance | |||
It should be possible to disable part or all of the access control | It SHOULD be possible to disable part or all of the access control | |||
model without deleting any configuration. By default, only the | model without deleting any configuration. By default, only the | |||
'superuser' should be able to perform this task. | 'superuser' SHOULD be able to perform this task. | |||
It should be possible to configure a 'superuser' account so that all | It SHOULD be possible to configure a 'superuser' account so that all | |||
access control is disabled for just this user. This allows the | access control is disabled for just this user. This allows the | |||
access control rules to always be modified without completely | access control rules to always be modified without completely | |||
disabling access control for all users. | disabling access control for all users. | |||
2.7. Configuration Capabilities | 2.7. Configuration Capabilities | |||
Suitable control and monitoring mechanisms are needed to allow an | Suitable control and monitoring mechanisms are needed to allow an | |||
operator to easily manage all aspects of the ACM behavior. A | operator to easily manage all aspects of the ACM behavior. A | |||
standard data model, suitable for use with the <edit-config> | standard data model, suitable for use with the <edit-config> | |||
operation must be available for this purpose. | operation MUST be available for this purpose. | |||
Access control rules to restrict operations on specific sub-trees | Access control rules to restrict operations on specific sub-trees | |||
within the configuration datastore must be supported. Existing | within the configuration datastore MUST be supported. Existing | |||
mechanisms should be used to identify the sub-tree(s) for this | mechanisms can be used to identify the sub-tree(s) for this purpose. | |||
purpose. | ||||
2.8. Identifying Security Holes | 2.8. Identifying Security Holes | |||
One of the most important aspects of the data model documentation, | One of the most important aspects of the data model documentation, | |||
and biggest concerns during deployment, is the identification of | and biggest concerns during deployment, is the identification of | |||
security-sensitive content. This applies to operations in NETCONF, | security-sensitive content. This applies to operations in NETCONF, | |||
not just data and notifications. | not just data and notifications. | |||
It is mandatory for security-sensitive objects to be documented in | It is mandatory for security-sensitive objects to be documented in | |||
the Security Considerations section of an RFC. This is nice, but it | the Security Considerations section of an RFC. This is nice, but it | |||
is not good enough, for the following reasons: | is not good enough, for the following reasons: | |||
o This documentation-only approach forces operators to study the RFC | o This documentation-only approach forces operators to study the RFC | |||
and determine if there are any potential security holes introduced | and determine if there are any potential security holes introduced | |||
by a new YANG module. | by a new YANG module. | |||
o If any security holes are identified, then the operator must study | o If any security holes are identified, then the operator can study | |||
some more RFC text, and determine how to close the security | some more RFC text, and determine how to close the security | |||
hole(s). | hole(s). | |||
o The ACM on each server must be configured to close the security | o The ACM on each server can be configured to close the security | |||
holes, e.g., require privileged access to read or write the | holes, e.g., require privileged access to read or write the | |||
specific data identified in the Security Considerations section. | specific data identified in the Security Considerations section. | |||
o If the ACM is not pre-configured, then there will be a time window | o If the ACM is not pre-configured, then there will be a time window | |||
of vulnerability, after the new module is loaded, and before the | of vulnerability, after the new module is loaded, and before the | |||
new access control rules for that module are configured, enabled, | new access control rules for that module are configured, enabled, | |||
and debugged. | and debugged. | |||
Often, the operator just wants to disable default access to the | Often, the operator just wants to disable default access to the | |||
secure content, so no inadvertent or malicious changes can be made to | secure content, so no inadvertent or malicious changes can be made to | |||
the server. This allows the default rules to be more lenient, | the server. This allows the default rules to be more lenient, | |||
without significantly increasing the security risk. | without significantly increasing the security risk. | |||
A data model designer should be able to use machine-readable | A data model designer needs to be able to use machine-readable | |||
statements to identify NETCONF content which should be protected by | statements to identify NETCONF content which needs to be protected by | |||
default. This will allow client and server tools to automatically | default. This will allow client and server tools to automatically | |||
close data-model specific security holes, by denying access to | close data-model specific security holes, by denying access to | |||
sensitive data unless the user is explicitly authorized to perform | sensitive data unless the user is explicitly authorized to perform | |||
the requested operation. | the requested operation. | |||
2.9. Data Shadowing | 2.9. Data Shadowing | |||
One of the more complicated security administration problems is | One of the more complicated security administration problems is | |||
identifying data nodes which shadow or mirror the content of another | identifying data nodes which shadow or mirror the content of another | |||
data node. An access control rule to prevent read operations for a | data node. An access control rule to prevent read operations for a | |||
skipping to change at page 12, line 25 | skipping to change at page 12, line 25 | |||
If the description statement, other documentation, or no | If the description statement, other documentation, or no | |||
documentation exists to identify a data shadow problem, then it may | documentation exists to identify a data shadow problem, then it may | |||
not be detected. | not be detected. | |||
Since NETCONF allows any vendor operation to be added to the | Since NETCONF allows any vendor operation to be added to the | |||
protocol, there is no way to reliably identify all of the operations | protocol, there is no way to reliably identify all of the operations | |||
that may expose copies of sensitive data nodes in <rpc-reply> | that may expose copies of sensitive data nodes in <rpc-reply> | |||
messages. | messages. | |||
A NETCONF server must ensure that unauthorized access to its | A NETCONF server MUST ensure that unauthorized access to its | |||
conceptual datastores and non-configuration data nodes is prevented. | conceptual datastores and non-configuration data nodes is prevented. | |||
It is beyond the scope of this document to define access control | It is beyond the scope of this document to define access control | |||
enforcement procedures for underlying device instrumentation that may | enforcement procedures for underlying device instrumentation that may | |||
exist to support the NETCONF server operation. An operator must | exist to support the NETCONF server operation. An operator can | |||
identify each operation that the server provides, and decide if it | identify each operation that the server provides, and decide if it | |||
needs any access control applied to it. | needs any access control applied to it. | |||
Proprietary protocol operations should be properly documented by the | Proprietary protocol operations SHOULD be properly documented by the | |||
vendor, so it is clear to operators what data nodes (if any) are | vendor, so it is clear to operators what data nodes (if any) are | |||
affected by the operation, and what information (if any) is returned | affected by the operation, and what information (if any) is returned | |||
in the <rpc-reply> message. | in the <rpc-reply> message. | |||
2.10. NETCONF Specific Requirements | 2.10. NETCONF Specific Requirements | |||
The server MUST be able to identify the specific protocol access | The server MUST be able to identify the specific protocol access | |||
request at the 4 access control points defined above. | request at the 4 access control points defined above. | |||
The server MUST be able to identify any datastore access request, | The server MUST be able to identify any datastore access request, | |||
skipping to change at page 14, line 25 | skipping to change at page 14, line 25 | |||
The NACM data model provides the following features: | The NACM data model provides the following features: | |||
o Independent control of RPC, data, and notification access. | o Independent control of RPC, data, and notification access. | |||
o Very simple access control rules configuration data model which is | o Very simple access control rules configuration data model which is | |||
easy to use. | easy to use. | |||
o The concept of a 'superuser' type of account is supported, but | o The concept of a 'superuser' type of account is supported, but | |||
configuration such an account is beyond the scope of this | configuration such an account is beyond the scope of this | |||
document. The server must be able to determine if a superuser | document. If the server supports a 'superuser' account, then it | |||
account is available, and if so, the actual user name for this | MUST be able to determine the actual user name for this account. | |||
account. A session associated with the superuser account will | A session associated with the superuser account will bypass all | |||
bypass all access control enforcement. | access control enforcement. | |||
o A simple and familiar set of datastore permissions is used. | o A simple and familiar set of datastore permissions is used. | |||
o Support for YANG security tagging (e.g., nacm:secure extension) | o Support for YANG security tagging (e.g., nacm:secure extension) | |||
allows default security modes to automatically exclude sensitive | allows default security modes to automatically exclude sensitive | |||
data. | data. | |||
o Separate default access modes for read, write, and execute | o Separate default access modes for read, write, and execute | |||
permissions. | permissions. | |||
skipping to change at page 17, line 10 | skipping to change at page 17, line 10 | |||
o Access control is applied to all <rpc> messages (except <close- | o Access control is applied to all <rpc> messages (except <close- | |||
session>) received by the server, individually, for each active | session>) received by the server, individually, for each active | |||
session, unless the session is associated with the 'superuser' | session, unless the session is associated with the 'superuser' | |||
account. | account. | |||
o If the session is authorized to execute the specified RPC | o If the session is authorized to execute the specified RPC | |||
operation, then processing continues, otherwise the request is | operation, then processing continues, otherwise the request is | |||
rejected with an 'access-denied' error. | rejected with an 'access-denied' error. | |||
o If the configuration datastore or conceptual state data is | o If the configuration datastore or conceptual state data is | |||
accessed by the protocol operation, then the data node access must | accessed by the protocol operation, then the data node access MUST | |||
be authorized. If the session is authorized to perform the | be authorized. If the session is authorized to perform the | |||
requested operation on the requested data, then processing | requested operation on the requested data, then processing | |||
continues. | continues. | |||
The following sequence of conceptual processing steps is executed for | The following sequence of conceptual processing steps is executed for | |||
each generated notification event, if access control enforcement is | each generated notification event, if access control enforcement is | |||
enabled: | enabled: | |||
o Server instrumentation generates a conceptual notification, for a | o Server instrumentation generates a conceptual notification, for a | |||
particular subscription. | particular subscription. | |||
skipping to change at page 17, line 35 | skipping to change at page 17, line 35 | |||
3.2. Model Components | 3.2. Model Components | |||
This section defines the conceptual components related to access | This section defines the conceptual components related to access | |||
control model. | control model. | |||
3.2.1. Users | 3.2.1. Users | |||
A 'user' is the conceptual entity, which is associated with the | A 'user' is the conceptual entity, which is associated with the | |||
access permissions granted to a particular session. A user is | access permissions granted to a particular session. A user is | |||
identified by a string which must be unique within the server. | identified by a string which MUST be unique within the server. | |||
As described in [I-D.ietf-netconf-4741bis], the user name string is | As described in [I-D.ietf-netconf-4741bis], the user name string is | |||
derived from the transport layer during session establishment. If | derived from the transport layer during session establishment. If | |||
the transport layer cannot authenticate the user, the session is | the transport layer cannot authenticate the user, the session is | |||
terminated. | terminated. | |||
The server MAY support a 'superuser' administrative user account, | The server MAY support a 'superuser' administrative user account, | |||
which will bypass all access control enforcement. This is useful for | which will bypass all access control enforcement. This is useful for | |||
restricting initial access and repairing a broken access control | restricting initial access and repairing a broken access control | |||
configuration. This account may be configurable to use a specific | configuration. This account may be configurable to use a specific | |||
user, or disabled completely. Some systems have factory-selected | user, or disabled completely. Some systems have factory-selected | |||
superuser account names. There is no need to standardize the exact | superuser account names. There is no need to standardize the exact | |||
user name for the superuser account. If no such account exists, then | user name for the superuser account. If no such account exists, then | |||
all NETCONF access will be controlled by NACM. | all NETCONF access will be controlled by NACM. | |||
3.2.2. Groups | 3.2.2. Groups | |||
Access to a specific NETCONF operation is granted to a session, | Access to a specific NETCONF operation is granted to a session, | |||
associated with a group, not a user. | associated with a group, not a user. | |||
A group is identified by its name. All group names must be unique | A group is identified by its name. All group names MUST be unique | |||
within the server. | within the server. | |||
A group member is identified by a user name string. | A group member is identified by a user name string. | |||
The same user may be configured in multiple groups. | The same user may be configured in multiple groups. | |||
3.2.3. Sessions | 3.2.3. Sessions | |||
A session is simply a NETCONF session, which is the entity which is | A session is simply a NETCONF session, which is the entity which is | |||
granted access to specific NETCONF operations. | granted access to specific NETCONF operations. | |||
skipping to change at page 19, line 38 | skipping to change at page 19, line 38 | |||
data node rule: Controls access for a specific data node, identified | data node rule: Controls access for a specific data node, identified | |||
by its path location within the conceptual XML document for the | by its path location within the conceptual XML document for the | |||
data node. | data node. | |||
notification rule: Controls access for a specific notification event | notification rule: Controls access for a specific notification event | |||
type, identified by its module and name. | type, identified by its module and name. | |||
3.3. Access Control Enforcement Procedures | 3.3. Access Control Enforcement Procedures | |||
There are seven separate phases that must be addressed, four of which | There are seven separate phases that need to be addressed, four of | |||
are related to the NETCONF message processing model. In addition, | which are related to the NETCONF message processing model. In | |||
the initial start-up mode for a NETCONF server, session | addition, the initial start-up mode for a NETCONF server, session | |||
establishment, and 'access-denied' error handling procedures must | establishment, and 'access-denied' error handling procedures also | |||
also be considered. | need to be considered. | |||
3.3.1. Initial Operation | 3.3.1. Initial Operation | |||
Upon the very first start-up of the NETCONF server, the access | Upon the very first start-up of the NETCONF server, the access | |||
control configuration will probably not be present. If not, a server | control configuration will probably not be present. If not, a server | |||
MUST NOT allow any write access to any session role except | MUST NOT allow any write access to any session role except | |||
'superuser' type of account in this state. | 'superuser' type of account in this state. | |||
There is no requirement to enforce access control rules before or | There is no requirement to enforce access control rules before or | |||
while the non-volatile configuration data is processed and loaded | while the non-volatile configuration data is processed and loaded | |||
into the running configuration. | into the running configuration. | |||
3.3.2. Session Establishment | 3.3.2. Session Establishment | |||
The access control model applies specifically to the well-formed XML | The access control model applies specifically to the well-formed XML | |||
content transferred between a client and a server, after session | content transferred between a client and a server, after session | |||
establishment has been completed, and after the <hello> exchange has | establishment has been completed, and after the <hello> exchange has | |||
been successfully completed. | been successfully completed. | |||
A server should not include any sensitive information in any | A server SHOULD NOT include any sensitive information in any | |||
<capability> elements within the <hello> exchange. | <capability> elements within the <hello> exchange. | |||
Once session establishment is completed, and a user identity has been | Once session establishment is completed, and a user identity has been | |||
authenticated, the NETCONF transport layer reports the username and a | authenticated, the NETCONF transport layer reports the username and a | |||
possibly empty set of group names associated with the user to the | possibly empty set of group names associated with the user to the | |||
NETCONF server. The NETCONF server will enforce the access control | NETCONF server. The NETCONF server will enforce the access control | |||
rules, based on the supplied user identity, group names, and the | rules, based on the supplied user identity, group names, and the | |||
configuration data stored on the server. | configuration data stored on the server. | |||
3.3.3. 'access-denied' Error Handling | 3.3.3. 'access-denied' Error Handling | |||
The 'access-denied' error-tag is generated when the access control | The 'access-denied' error-tag is generated when the access control | |||
system denies access to either a request to invoke a protocol | system denies access to either a request to invoke a protocol | |||
operation or a request to perform a particular operation on the | operation or a request to perform a particular operation on the | |||
configuration datastore. | configuration datastore. | |||
A server must not include any sensitive information in any <error- | A server MUST NOT include any sensitive information in any <error- | |||
info> elements within the <rpc-error> response. | info> elements within the <rpc-error> response. | |||
3.3.4. Incoming RPC Message Validation | 3.3.4. Incoming RPC Message Validation | |||
The diagram below shows the basic conceptual structure of the access | The diagram below shows the basic conceptual structure of the access | |||
control processing model for incoming NETCONF <rpc> messages, within | control processing model for incoming NETCONF <rpc> messages, within | |||
a server. | a server. | |||
NETCONF server | NETCONF server | |||
+------------+ | +------------+ | |||
skipping to change at page 21, line 38 | skipping to change at page 21, line 38 | |||
V V | V V | |||
+----------------------+ | +----------------------+ | |||
| | | | | | |||
| configuration | | | configuration | | |||
| datastore | | | datastore | | |||
+----------------------+ | +----------------------+ | |||
Figure 3 | Figure 3 | |||
Access control begins with the message dispatcher. Only well-formed | Access control begins with the message dispatcher. Only well-formed | |||
XML messages should be processed by the server. | XML messages will be processed by the server. | |||
After the server validates the <rpc> element, and determines the | After the server validates the <rpc> element, and determines the | |||
namespace URI and the element name of the protocol operation being | namespace URI and the element name of the protocol operation being | |||
requested, the RPC access control enforcer verifies that the session | requested, the RPC access control enforcer verifies that the session | |||
is authorized to invoke the protocol operation. | is authorized to invoke the protocol operation. | |||
The protocol operation is authorized by following these steps: | The protocol operation is authorized by following these steps: | |||
1. If the <enable-nacm> parameter is set to 'false', then the | 1. If the <enable-nacm> parameter is set to 'false', then the | |||
protocol operation is permitted. | protocol operation is permitted. | |||
skipping to change at page 26, line 7 | skipping to change at page 26, line 7 | |||
13. For a read request, if the <read-default> parameter is set to | 13. For a read request, if the <read-default> parameter is set to | |||
'permit', then include the requested data in the reply, | 'permit', then include the requested data in the reply, | |||
otherwise do not include the requested data in the reply. | otherwise do not include the requested data in the reply. | |||
14. For a write request, if the <write-default> parameter is set to | 14. For a write request, if the <write-default> parameter is set to | |||
'permit', then permit the data node access request, otherwise | 'permit', then permit the data node access request, otherwise | |||
deny the request. | deny the request. | |||
3.3.6. Outgoing <rpc-reply> Authorization | 3.3.6. Outgoing <rpc-reply> Authorization | |||
The <rpc-reply> message should be checked by the server to make sure | The <rpc-reply> message MUST be checked by the server to make sure no | |||
no unauthorized data is contained within it. If so, the restricted | unauthorized data is contained within it. If so, the restricted data | |||
data must be removed from the message before it is sent to the | MUST be removed from the message before it is sent to the client. | |||
client. | ||||
For protocol operations which do not access any data nodes, then any | For protocol operations which do not access any data nodes, then any | |||
client authorized to invoke the protocol operation is also authorized | client authorized to invoke the protocol operation is also authorized | |||
to receive the <rpc-reply> for that protocol operation. | to receive the <rpc-reply> for that protocol operation. | |||
3.3.7. Outgoing <notification> Authorization | 3.3.7. Outgoing <notification> Authorization | |||
The <notification> message should be checked by the server to make | The <notification> message MUST be checked by the server to make sure | |||
sure no unauthorized data is contained within it. If so, the | no unauthorized data is contained within it. If so, the restricted | |||
restricted data must be removed from the message before it is sent to | data MUST be removed from the message before it is sent to the | |||
the client. | client. | |||
Configuration of access control rules specifically for descendent | Configuration of access control rules specifically for descendent | |||
nodes of the notification event type element are outside the scope of | nodes of the notification event type element are outside the scope of | |||
this document. If the session is authorized to receive the | this document. If the session is authorized to receive the | |||
notification event type, then it is also authorized to receive any | notification event type, then it is also authorized to receive any | |||
data it contains. | data it contains. | |||
The following figure shows the conceptual message processing model | The following figure shows the conceptual message processing model | |||
for outgoing <notification> messages. | for outgoing <notification> messages. | |||
skipping to change at page 30, line 33 | skipping to change at page 30, line 33 | |||
list <data-rule>: Configures the access control rules for | list <data-rule>: Configures the access control rules for | |||
configuration datastore access. | configuration datastore access. | |||
list <notification-rule>: Configures the access control rules for | list <notification-rule>: Configures the access control rules for | |||
controlling delivery of <notification> events. | controlling delivery of <notification> events. | |||
3.4.3. YANG Module | 3.4.3. YANG Module | |||
The following YANG module is provided to specify the normative | The following YANG module is provided to specify the normative | |||
NETCONF content that must by supported by the server. | NETCONF content that MUST by supported by the server. | |||
The ietf-netconf-acm YANG module imports typedefs from [RFC6021]. | The ietf-netconf-acm YANG module imports typedefs from [RFC6021]. | |||
// RFC Ed.: please update the date to the date of publication | // RFC Ed.: please update the date to the date of publication | |||
<CODE BEGINS> file="ietf-netconf-acm@2011-02-03.yang" | <CODE BEGINS> file="ietf-netconf-acm@2011-03-11.yang" | |||
module ietf-netconf-acm { | module ietf-netconf-acm { | |||
namespace "urn:ietf:params:xml:ns:yang:ietf-netconf-acm"; | namespace "urn:ietf:params:xml:ns:yang:ietf-netconf-acm"; | |||
prefix "nacm"; | prefix "nacm"; | |||
import ietf-yang-types { | import ietf-yang-types { | |||
prefix yang; | prefix yang; | |||
} | } | |||
organization | organization | |||
"IETF NETCONF (Network Configuration) Working Group"; | "IETF NETCONF (Network Configuration) Working Group"; | |||
contact | contact | |||
"WG Web: <http://tools.ietf.org/wg/netconf/> | "WG Web: <http://tools.ietf.org/wg/netconf/> | |||
WG List: <mailto:netconf@ietf.org> | WG List: <mailto:netconf@ietf.org> | |||
WG Chair: Mehmet Ersue | WG Chair: Mehmet Ersue | |||
<mailto:mehmet.ersue@nsn.com> | <mailto:mehmet.ersue@nsn.com> | |||
WG Chair: Bert Wijnen | WG Chair: Bert Wijnen | |||
<mailto:bertietf@bwijnen.net> | <mailto:bertietf@bwijnen.net> | |||
Editor: Andy Bierman | Editor: Andy Bierman | |||
<mailto:andy.bierman@brocade.com> | <mailto:andy.bierman@brocade.com> | |||
Editor: Martin Bjorklund | Editor: Martin Bjorklund | |||
<mailto:mbj@tail-f.com>"; | <mailto:mbj@tail-f.com>"; | |||
description | description | |||
"NETCONF Server Access Control Model. | "NETCONF Server Access Control Model. | |||
Copyright (c) 2011 IETF Trust and the persons identified as | Copyright (c) 2011 IETF Trust and the persons identified as | |||
authors of the code. All rights reserved. | authors of the code. All rights reserved. | |||
Redistribution and use in source and binary forms, with or | Redistribution and use in source and binary forms, with or | |||
without modification, is permitted pursuant to, and subject | without modification, is permitted pursuant to, and subject | |||
to the license terms contained in, the Simplified BSD | to the license terms contained in, the Simplified BSD | |||
License set forth in Section 4.c of the IETF Trust's | License set forth in Section 4.c of the IETF Trust's | |||
Legal Provisions Relating to IETF Documents | Legal Provisions Relating to IETF Documents | |||
(http://trustee.ietf.org/license-info). | (http://trustee.ietf.org/license-info). | |||
This version of this YANG module is part of RFC XXXX; see | This version of this YANG module is part of RFC XXXX; see | |||
the RFC itself for full legal notices."; | the RFC itself for full legal notices."; | |||
// RFC Ed.: replace XXXX with actual RFC number and | // RFC Ed.: replace XXXX with actual RFC number and | |||
// remove this note | // remove this note | |||
// RFC Ed.: remove this note | // RFC Ed.: remove this note | |||
// Note: extracted from draft-ietf-netconf-access-control-02.txt | // Note: extracted from draft-ietf-netconf-access-control-03.txt | |||
// RFC Ed.: please update the date to the date of publication | // RFC Ed.: please update the date to the date of publication | |||
revision "2011-02-03" { | revision "2011-03-11" { | |||
description | description | |||
"Initial version"; | "Initial version"; | |||
reference | reference | |||
"RFC XXXX: Network Configuration Protocol | "RFC XXXX: Network Configuration Protocol | |||
Access Control Model"; | Access Control Model"; | |||
} | } | |||
/* | /* | |||
* Extension statements | * Extension statements | |||
*/ | */ | |||
extension secure { | extension secure { | |||
description | description | |||
"Used to indicate that the data model node | "Used to indicate that the data model node | |||
represents a sensitive security system parameter. | represents a sensitive security system parameter. | |||
If present, the NETCONF server will only allow | If present, and the NACM module is enabled | |||
the designated 'superuser' to have write or execute | (i.e., /nacm/enable-nacm object equals 'true'), | |||
default nacm-rights-type for the node. An explicit access | the NETCONF server will only allow | |||
control rule is required for all other users. | the designated 'superuser' to have write or execute | |||
default nacm-rights-type for the node. An explicit access | ||||
control rule is required for all other users. | ||||
The 'secure' extension may appear within a data, rpc, | The 'secure' extension MAY appear within a data, rpc, | |||
or notification node definition. It is ignored | or notification node definition. It is ignored | |||
otherwise."; | otherwise."; | |||
} | } | |||
extension very-secure { | extension very-secure { | |||
description | description | |||
"Used to indicate that the data model node | "Used to indicate that the data model node | |||
controls a very sensitive security system parameter. | controls a very sensitive security system parameter. | |||
If present, the NETCONF server will only allow | If present, and the NACM module is enabled | |||
the designated 'superuser' to have read, write, or execute | (i.e., /nacm/enable-nacm object equals 'true'), | |||
default nacm-rights-type for the node. An explicit access | the NETCONF server will only allow | |||
control rule is required for all other users. | the designated 'superuser' to have read, write, or execute | |||
default nacm-rights-type for the node. An explicit access | ||||
control rule is required for all other users. | ||||
The 'very-secure' extension may appear within a data, rpc, | The 'very-secure' extension MAY appear within a data, rpc, | |||
or notification node definition. It is ignored | or notification node definition. It is ignored | |||
otherwise."; | otherwise."; | |||
} | } | |||
/* | /* | |||
* Derived types | * Derived types | |||
*/ | */ | |||
typedef nacm-user-name-type { | typedef nacm-user-name-type { | |||
type string { | type string { | |||
length "1..max"; | length "1..max"; | |||
} | } | |||
description | description | |||
"General Purpose User Name string."; | "General Purpose User Name string."; | |||
} | } | |||
typedef nacm-matchall-string-type { | ||||
type string { | ||||
pattern "\*"; | ||||
} | ||||
description | ||||
"The string containing a single asterisk '*' is used | ||||
to conceptually represent all possible values | ||||
for the particular leaf using this data type."; | ||||
} | ||||
typedef nacm-matchall-string-type { | typedef nacm-rights-type { | |||
type string { | type union { | |||
pattern "\*"; | type nacm-matchall-string-type; | |||
} | ||||
description | ||||
"The string containing a single asterisk '*' is used | ||||
to conceptually represent all possible values | ||||
for the particular leaf using this data type."; | ||||
} | ||||
typedef nacm-rights-type { | type bits { | |||
type union { | bit create { | |||
type nacm-matchall-string-type; | description | |||
"Create access allowed to all specified data. | ||||
Any protocol operation that creates a | ||||
new instance of the specified data is a create | ||||
operation."; | ||||
} | ||||
bit read { | ||||
description | ||||
"Read access allowed to all specified data. | ||||
Any protocol operation or notification that | ||||
returns data to an application is a read | ||||
operation."; | ||||
} | ||||
bit update { | ||||
description | ||||
"Update access allowed to all specified data. | ||||
Any protocol operation that alters an existing | ||||
data node is an update operation."; | ||||
} | ||||
bit delete { | ||||
description | ||||
"Delete access allowed to all specified data. | ||||
Any protocol operation that removes a datastore | ||||
node instance is a delete operation."; | ||||
} | ||||
bit exec { | ||||
description | ||||
"Execution access to the specified RPC operation. | ||||
Any RPC operation invocation is an exec operation."; | ||||
} | ||||
} | ||||
} | ||||
description | ||||
"NETCONF Access Rights. | ||||
The string '*' indicates that all possible access | ||||
rights apply to the access rule. Otherwise, only | ||||
the specific access rights represented by the bit names | ||||
that are present apply to the access rule."; | ||||
} | ||||
type bits { | typedef nacm-group-name-type { | |||
bit create { | type string { | |||
description | length "1..max"; | |||
"Create access allowed to all specified data. | pattern "[^\*].*"; | |||
Any protocol operation that creates a | } | |||
new instance of the specified data is a create | description | |||
operation."; | "Name of administrative group that can be | |||
} | assigned to the user, and specified in | |||
bit read { | an access control rule."; | |||
description | } | |||
"Read access allowed to all specified data. | ||||
Any protocol operation or notification that | ||||
returns data to an application is a read | ||||
operation."; | ||||
} | ||||
bit update { | ||||
description | ||||
"Update access allowed to all specified data. | ||||
Any protocol operation that alters an existing | ||||
data node is an update operation."; | ||||
} | ||||
bit delete { | ||||
description | ||||
"Delete access allowed to all specified data. | ||||
Any protocol operation that removes a database | ||||
node instance is a delete operation."; | ||||
} | ||||
bit exec { | ||||
description | ||||
"Execution access to the specified RPC operation. | ||||
Any RPC operation invocation is an exec operation."; | ||||
} | ||||
} | ||||
} | ||||
description | ||||
"NETCONF Access Rights. | ||||
The string '*' indicates that all possible access | ||||
rights apply to the access rule. Otherwise, only | ||||
the specific access rights represented by the bit names | ||||
that are present apply to the access rule."; | ||||
} | ||||
typedef nacm-group-name-type { | typedef nacm-action-type { | |||
type string { | type enumeration { | |||
length "1..max"; | enum permit { | |||
pattern "[^\*].*"; | description | |||
} | "Requested action is permitted."; | |||
description | } | |||
"Name of administrative group that can be | enum deny { | |||
assigned to the user, and specified in | description | |||
an access control rule."; | "Requested action is denied."; | |||
} | } | |||
} | ||||
description | ||||
"Action taken by the server when a particular | ||||
rule matches."; | ||||
} | ||||
typedef nacm-action-type { | typedef schema-instance-identifier { | |||
type enumeration { | type yang:xpath1.0; | |||
enum permit { | description | |||
description | "Path expression used to represent a special | |||
"Requested action is permitted."; | schema-instance identifier string. | |||
} | ||||
enum deny { | ||||
description | ||||
"Requested action is denied."; | ||||
} | ||||
} | ||||
description | ||||
"Action taken by the server when a particular | ||||
rule matches."; | ||||
} | ||||
typedef schema-instance-identifier { | A schema-instance-identifier value is an | |||
type yang:xpath1.0; | unrestricted YANG instance-identifier expression. | |||
description | All the same rules as an instance-identifier apply | |||
"Path expression used to represent a special | except predicates for keys are optional. If a key | |||
schema-instance identifier string. | predicate is missing, then the schema-instance-identifier | |||
represents all possible server instances for that key. | ||||
A schema-instance-identifier value is an | This XPath expression is evaluated in the following context: | |||
unrestricted YANG instance-identifier expression. | ||||
All the same rules as an instance-identifier apply | ||||
except predicates for keys are optional. If a key | ||||
predicate is missing, then the schema-instance-identifier | ||||
represents all possible server instances for that key. | ||||
This XPath expression is evaluated in the following context: | o The set of namespace declarations are those in scope on | |||
the leaf element where this type is used. | ||||
o The set of namespace declarations are those in scope on | o The set of variable bindings contains one variable, | |||
the leaf element where this type is used. | 'USER', which contains the name of user of the current | |||
session. | ||||
o The set of variable bindings contains one variable, | o The function library is the core function library, but | |||
'USER', which contains the name of user of the current | note that due to the syntax restrictions of an | |||
session. | instance-identifier, no functions are allowed. | |||
o The function library is the core function library, but | o The context node is the root node in the data tree."; | |||
note that due to the syntax restrictions of an | } | |||
instance-identifier, no functions are allowed. | ||||
o The context node is the root node in the data tree."; | container nacm { | |||
} | nacm:very-secure; | |||
container nacm { | description | |||
nacm:very-secure; | "Parameters for NETCONF Access Control Model."; | |||
description | leaf enable-nacm { | |||
"Parameters for NETCONF Access Control Model."; | type boolean; | |||
default true; | ||||
description | ||||
"Enable or disable all NETCONF access control | ||||
enforcement. If 'true', then enforcement | ||||
is enabled. If 'false', then enforcement | ||||
is disabled."; | ||||
} | ||||
leaf enable-nacm { | leaf read-default { | |||
type boolean; | type nacm-action-type; | |||
default true; | default "permit"; | |||
description | description | |||
"Enable or disable all NETCONF access control | "Controls whether read access is granted if | |||
enforcement. If 'true', then enforcement | no appropriate rule is found for a | |||
is enabled. If 'false', then enforcement | particular read request."; | |||
is disabled."; | } | |||
} | ||||
leaf read-default { | leaf write-default { | |||
type nacm-action-type; | type nacm-action-type; | |||
default "permit"; | default "deny"; | |||
description | description | |||
"Controls whether read access is granted if | "Controls whether create, update, or delete access | |||
no appropriate rule is found for a | is granted if no appropriate rule is found for a | |||
particular read request."; | particular write request."; | |||
} | ||||
leaf write-default { | } | |||
type nacm-action-type; | ||||
default "deny"; | ||||
description | ||||
"Controls whether create, update, or delete access | ||||
is granted if no appropriate rule is found for a | ||||
particular write request."; | ||||
} | ||||
leaf exec-default { | leaf exec-default { | |||
type nacm-action-type; | type nacm-action-type; | |||
default "permit"; | default "permit"; | |||
description | description | |||
"Controls whether exec access is granted if no appropriate | "Controls whether exec access is granted if no appropriate | |||
rule is found for a particular RPC operation request."; | rule is found for a particular RPC operation request."; | |||
} | } | |||
leaf denied-rpcs { | leaf denied-rpcs { | |||
type yang:zero-based-counter32; | type yang:zero-based-counter32; | |||
config false; | config false; | |||
mandatory true; | mandatory true; | |||
description | description | |||
"Number of times an RPC operation request was denied | "Number of times an RPC operation request was denied | |||
since the server last restarted."; | since the server last restarted."; | |||
} | } | |||
leaf denied-data-writes { | leaf denied-data-writes { | |||
type yang:zero-based-counter32; | type yang:zero-based-counter32; | |||
config false; | config false; | |||
mandatory true; | mandatory true; | |||
description | description | |||
"Number of times a request to alter a data node | "Number of times a request to alter a data node | |||
was denied, since the server last restarted."; | was denied, since the server last restarted."; | |||
} | } | |||
container groups { | container groups { | |||
description | description | |||
"NETCONF Access Control Groups."; | "NETCONF Access Control Groups."; | |||
list group { | list group { | |||
key name; | key name; | |||
description | description | |||
"One NACM Group Entry."; | "One NACM Group Entry."; | |||
leaf name { | leaf name { | |||
type nacm-group-name-type; | type nacm-group-name-type; | |||
description | description | |||
"Group name associated with this entry."; | "Group name associated with this entry."; | |||
} | } | |||
leaf-list user-name { | leaf-list user-name { | |||
type nacm-user-name-type; | type nacm-user-name-type; | |||
description | description | |||
"Each entry identifies the user name of | "Each entry identifies the user name of | |||
a member of the group associated with | a member of the group associated with | |||
this entry."; | this entry."; | |||
} | } | |||
} | } | |||
} | } | |||
container rules { | ||||
description | ||||
"NETCONF Access Control Rules."; | ||||
grouping common-rule-parms { | container rules { | |||
description | description | |||
"Common rule parameters."; | "NETCONF Access Control Rules."; | |||
leaf rule-name { | grouping common-rule-parms { | |||
type string { | description | |||
length "1..256"; | "Common rule parameters."; | |||
} | ||||
description | ||||
"Arbitrary name assigned to the | ||||
access control rule."; | ||||
} | ||||
leaf allowed-rights { | leaf rule-name { | |||
type nacm-rights-type; | type string { | |||
description | length "1..256"; | |||
"List of access rights granted to | } | |||
specified administrative groups for the | description | |||
content specified by the associated path."; | "Arbitrary name assigned to the | |||
} | access control rule."; | |||
} | ||||
leaf-list allowed-group { | leaf allowed-rights { | |||
type union { | type nacm-rights-type; | |||
type nacm-matchall-string-type; | description | |||
type nacm-group-name-type; | "List of access rights granted to | |||
} | specified administrative groups for the | |||
min-elements 1; | content specified by the associated path."; | |||
description | } | |||
"List of administrative groups which will be | ||||
assigned the associated access rights | ||||
for the content specified by the associated path. | ||||
The string '*' indicates that all configured | leaf-list allowed-group { | |||
administrative groups apply to the entry."; | type union { | |||
} | type nacm-matchall-string-type; | |||
type nacm-group-name-type; | ||||
} | ||||
min-elements 1; | ||||
description | ||||
"List of administrative groups which will be | ||||
assigned the associated access rights | ||||
for the content specified by the associated path. | ||||
leaf nacm-action { | The string '*' indicates that all configured | |||
type nacm-action-type; | administrative groups apply to the entry."; | |||
mandatory true; | } | |||
description | ||||
"The access control action associated with the | ||||
rule. If a rule is determined to match a | ||||
particular request, then this object is used | ||||
to determine whether to permit or deny the | ||||
request."; | ||||
} | ||||
leaf comment { | leaf nacm-action { | |||
type string { | type nacm-action-type; | |||
length "1..4095"; | mandatory true; | |||
} | description | |||
description | "The access control action associated with the | |||
"A textual description of the access rule."; | rule. If a rule is determined to match a | |||
} | particular request, then this object is used | |||
} | to determine whether to permit or deny the | |||
request."; | ||||
} | ||||
list module-rule { | leaf comment { | |||
key "module-name rule-name"; | type string { | |||
ordered-by user; | length "1..4095"; | |||
} | ||||
description | ||||
"A textual description of the access rule."; | ||||
} | ||||
} | ||||
description | list module-rule { | |||
"One Module Access Rule. | key "module-name rule-name"; | |||
ordered-by user; | ||||
Rules are processed in user-defined order. A module rule | description | |||
is considered a match if the XML namespace for the | "One Module Access Rule. | |||
specified module name matches the XML namespace used | ||||
within a NETCONF PDU, and the administrative group | ||||
associated with the requesting session is specified in the | ||||
'allowed-group' leaf-list, and the requested operation | ||||
is included in the 'allowed-rights' leaf."; | ||||
leaf module-name { | Rules are processed in user-defined order. A module rule | |||
type string; | is considered a match if the XML namespace for the | |||
description | specified module name matches the XML namespace used | |||
"Name of the module associated with this rule."; | within a NETCONF PDU, and the administrative group | |||
} | associated with the requesting session is specified in the | |||
'allowed-group' leaf-list, and the requested operation | ||||
is included in the 'allowed-rights' leaf."; | ||||
uses common-rule-parms { | leaf module-name { | |||
refine allowed-rights { | type string; | |||
mandatory true; | description | |||
} | "Name of the module associated with this rule."; | |||
} | } | |||
} | ||||
list rpc-rule { | uses common-rule-parms { | |||
key "module-name rpc-name rule-name"; | refine allowed-rights { | |||
ordered-by user; | mandatory true; | |||
} | ||||
} | ||||
} | ||||
description | list rpc-rule { | |||
"One RPC Operation Access Rule. | key "module-name rpc-name rule-name"; | |||
ordered-by user; | ||||
Rules are processed in user-defined order. An RPC rule is | description | |||
considered a match if the module name of the requested RPC | "One RPC Operation Access Rule. | |||
operation matches 'module-name', the requested RPC | ||||
operation matches 'rpc-name', and an administrative group | ||||
associated with the session user is listed in the | ||||
'allowed-group' leaf-list. The 'allowed-rights' leaf | ||||
is ignored by the server if it is present. | ||||
Only the 'exec' bit can possibly cause | ||||
a match for an RPC rule."; | ||||
leaf module-name { | Rules are processed in user-defined order. An RPC rule is | |||
type string; | considered a match if the module name of the requested RPC | |||
description | operation matches 'module-name', the requested RPC | |||
"Name of the module defining this RPC operation."; | operation matches 'rpc-name', and an administrative group | |||
} | associated with the session user is listed in the | |||
'allowed-group' leaf-list. The 'allowed-rights' leaf | ||||
is ignored by the server if it is present. | ||||
Only the 'exec' bit can possibly cause | ||||
a match for an RPC rule."; | ||||
leaf rpc-name { | leaf module-name { | |||
type string; | type string; | |||
description | description | |||
"Name of the RPC operation."; | "Name of the module defining this RPC operation."; | |||
} | } | |||
uses common-rule-parms; | leaf rpc-name { | |||
} | type string; | |||
description | ||||
"Name of the RPC operation."; | ||||
} | ||||
list data-rule { | uses common-rule-parms; | |||
key "rule-name"; | } | |||
ordered-by user; | ||||
description | list data-rule { | |||
"One Data Access Control Rule. | key "rule-name"; | |||
ordered-by user; | ||||
Rules are processed in user-defined order. A data rule is | description | |||
considered to match when the path expression identifies | "One Data Access Control Rule. | |||
the same node that is being accessed in the NETCONF | ||||
database, and the administrative group associated with the | ||||
session is identified in the 'allowed-group' leaf-list, | ||||
and the requested operation is included in the | ||||
'allowed-rights' leaf."; | ||||
leaf path { | Rules are processed in user-defined order. A data rule is | |||
type schema-instance-identifier; | considered to match when the path expression identifies | |||
mandatory true; | the same node that is being accessed in the NETCONF | |||
description | datastore, and the administrative group associated with the | |||
"Schema Instance Identifier associated with the data node | session is identified in the 'allowed-group' leaf-list, | |||
controlled by this rule. | and the requested operation is included in the | |||
'allowed-rights' leaf."; | ||||
Configuration data or state data instance identifiers | leaf path { | |||
start with a top-level data node. A complete instance | type schema-instance-identifier; | |||
identifier is required for this type of path value. | mandatory true; | |||
description | ||||
"Schema Instance Identifier associated with the data node | ||||
controlled by this rule. | ||||
The special value '/' refers to all possible database | Configuration data or state data instance identifiers | |||
contents."; | start with a top-level data node. A complete instance | |||
} | identifier is required for this type of path value. | |||
uses common-rule-parms { | The special value '/' refers to all possible datastore | |||
refine allowed-rights { | contents."; | |||
mandatory true; | } | |||
} | ||||
} | ||||
} | ||||
list notification-rule { | uses common-rule-parms { | |||
key "module-name | refine allowed-rights { | |||
notification-name | mandatory true; | |||
rule-name"; | } | |||
ordered-by user; | } | |||
} | ||||
description | list notification-rule { | |||
"One Notification Access Rule. | key "module-name | |||
notification-name | ||||
rule-name"; | ||||
ordered-by user; | ||||
A notification is considered a match if the module name of | description | |||
the requested event type matches | "One Notification Access Rule. | |||
'module-name', the requested event type | ||||
matches the 'notification-name', and the administrative | ||||
group associated with the requesting session is listed in | ||||
the 'allowed-group' leaf-list. If the 'allowed-rights' | ||||
leaf is present, it is ignored by the server. | ||||
Only the 'read' bit can possibly cause | ||||
a match for a notification rule."; | ||||
leaf module-name { | A notification is considered a match if the module name of | |||
type string; | the requested event type matches | |||
description | 'module-name', the requested event type | |||
"Name of the module defining this | matches the 'notification-name', and the administrative | |||
notification event type."; | group associated with the requesting session is listed in | |||
} | the 'allowed-group' leaf-list. If the 'allowed-rights' | |||
leaf is present, it is ignored by the server. | ||||
Only the 'read' bit can possibly cause | ||||
a match for a notification rule."; | ||||
leaf notification-name { | leaf module-name { | |||
type string; | type string; | |||
description | description | |||
"Name of the notification event."; | "Name of the module defining this | |||
} | notification event type."; | |||
} | ||||
uses common-rule-parms; | leaf notification-name { | |||
} | type string; | |||
} | description | |||
"Name of the notification event."; | ||||
} | ||||
} | uses common-rule-parms; | |||
} | } | |||
} | ||||
} | ||||
} | ||||
<CODE ENDS> | <CODE ENDS> | |||
Figure 5 | Figure 5 | |||
3.5. IANA Considerations | 3.5. IANA Considerations | |||
There are two actions that are requested of IANA: This document | There are two actions that are requested of IANA: This document | |||
registers one URI in "The IETF XML Registry". Following the format | registers one URI in "The IETF XML Registry". Following the format | |||
in [RFC3688], the following has been registered. | in [RFC3688], the following has been registered. | |||
URI: urn:ietf:params:xml:ns:yang:ietf-netconf-acm | URI: urn:ietf:params:xml:ns:yang:ietf-netconf-acm | |||
skipping to change at page 41, line 47 | skipping to change at page 42, line 6 | |||
session. | session. | |||
Configuration of the access control system is highly sensitive to | Configuration of the access control system is highly sensitive to | |||
system security. A server may choose not to allow any user | system security. A server may choose not to allow any user | |||
configuration to some portions of it, such as the global security | configuration to some portions of it, such as the global security | |||
level, or the groups which allowed access to system resources. | level, or the groups which allowed access to system resources. | |||
This document incorporates the optional use of a 'superuser' account, | This document incorporates the optional use of a 'superuser' account, | |||
which can be used to bypass access control enforcement. It is | which can be used to bypass access control enforcement. It is | |||
suggested that the 'root' account not be used for NETCONF over SSH | suggested that the 'root' account not be used for NETCONF over SSH | |||
servers, because 'root' SSH logins should be disabled in the SSH | servers, because 'root' SSH logins SHOULD be disabled in the SSH | |||
server. | server. | |||
If the server chooses to allow user configuration of the access | If the server chooses to allow user configuration of the access | |||
control system, then only sessions using the 'superuser' | control system, then only sessions using the 'superuser' | |||
administrative user should be allowed to have write access to the | administrative user SHOULD be allowed to have write access to the | |||
data model. | data model. | |||
If the server chooses to allow user retrieval of the access control | If the server chooses to allow user retrieval of the access control | |||
system configuration, then only sessions using the 'superuser' | system configuration, then only sessions using the 'superuser' | |||
administrative user should be allowed to have read access to the data | administrative user SHOULD be allowed to have read access to the data | |||
model. | model. | |||
There is a risk that invocation of non-standard protocol operations | There is a risk that invocation of non-standard protocol operations | |||
will have undocumented side effects. An administrator should | will have undocumented side effects. An administrator needs to | |||
construct access control rules such that the configuration datastore | construct access control rules such that the configuration datastore | |||
is protected from such side effects. Also, such protocol operations | is protected from such side effects. Also, such protocol operations | |||
should never be invoked by a session using the 'superuser' | SHOULD never be invoked by a session using the 'superuser' | |||
administrative user. | administrative user. | |||
There is a risk that non-standard protocol operations, or even the | There is a risk that non-standard protocol operations, or even the | |||
standard <get> operation, may return data which 'aliases' or 'copies' | standard <get> operation, may return data which 'aliases' or 'copies' | |||
sensitive data from a different data object. In this case, the | sensitive data from a different data object. In this case, the | |||
namespace and/or the element name will not match the values for the | namespace and/or the element name will not match the values for the | |||
sensitive data, which is then fully or partially copied into a | sensitive data, which is then fully or partially copied into a | |||
different namespace and/or element. An administrator should avoid | different namespace and/or element. An administrator needs to avoid | |||
using data models which use this practice. | using data models which use this practice. | |||
An administrator should restrict write access to all configurable | An administrator needs to restrict write access to all configurable | |||
objects within this data model. It is suggested that only sessions | objects within this data model. It is suggested that only sessions | |||
using the 'superuser' administrative role be permitted to configure | using the 'superuser' administrative role be permitted to configure | |||
the data model defined in this document. | the data model defined in this document. | |||
If write access is allowed for configuration of access control rules, | If write access is allowed for configuration of access control rules, | |||
then care must be taken not to disrupt the access control | then care needs to be taken not to disrupt the access control | |||
enforcement. | enforcement. | |||
An administrator should restrict read access to the following objects | An administrator needs to restrict read access to the following | |||
within this data model, which reveal access control configuration | objects within this data model, which reveal access control | |||
which could be considered sensitive. | configuration which could be considered sensitive. | |||
o enable-nacm | o enable-nacm | |||
o read-default | o read-default | |||
o write-default | o write-default | |||
o exec-default | o exec-default | |||
o groups | o groups | |||
o rules | o rules | |||
4. References | 4. References | |||
4.1. Normative References | 4.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, March 1997. | Requirement Levels", BCP 14, RFC 2119, March 1997. | |||
[RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, | [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, | |||
skipping to change at page 44, line 28 | skipping to change at page 44, line 28 | |||
[RFC6020] Bjorklund, M., "YANG - A Data Modeling Language for the | [RFC6020] Bjorklund, M., "YANG - A Data Modeling Language for the | |||
Network Configuration Protocol (NETCONF)", RFC 6020, | Network Configuration Protocol (NETCONF)", RFC 6020, | |||
October 2010. | October 2010. | |||
[RFC6021] Schoenwaelder, J., "Common YANG Data Types", RFC 6021, | [RFC6021] Schoenwaelder, J., "Common YANG Data Types", RFC 6021, | |||
October 2010. | October 2010. | |||
[I-D.ietf-netconf-4741bis] | [I-D.ietf-netconf-4741bis] | |||
Enns, R., Bjorklund, M., Schoenwaelder, J., and A. | Enns, R., Bjorklund, M., Schoenwaelder, J., and A. | |||
Bierman, "Network Configuration Protocol (NETCONF)", | Bierman, "Network Configuration Protocol (NETCONF)", | |||
draft-ietf-netconf-4741bis-07 (work in progress), | draft-ietf-netconf-4741bis-09 (work in progress), | |||
January 2011. | February 2011. | |||
[I-D.ietf-netconf-rfc4742bis] | [I-D.ietf-netconf-rfc4742bis] | |||
Wasserman, M. and T. Goddard, "Using the NETCONF | Wasserman, M. and T. Goddard, "Using the NETCONF | |||
Configuration Protocol over Secure Shell (SSH)", | Configuration Protocol over Secure Shell (SSH)", | |||
draft-ietf-netconf-rfc4742bis-06 (work in progress), | draft-ietf-netconf-rfc4742bis-07 (work in progress), | |||
January 2011. | February 2011. | |||
4.2. Informative References | 4.2. Informative References | |||
[RFC2865] Rigney, C., Willens, S., Rubens, A., and W. Simpson, | [RFC2865] Rigney, C., Willens, S., Rubens, A., and W. Simpson, | |||
"Remote Authentication Dial In User Service (RADIUS)", | "Remote Authentication Dial In User Service (RADIUS)", | |||
RFC 2865, June 2000. | RFC 2865, June 2000. | |||
[RFC5607] Nelson, D. and G. Weber, "Remote Authentication Dial-In | [RFC5607] Nelson, D. and G. Weber, "Remote Authentication Dial-In | |||
User Service (RADIUS) Authorization for Network Access | User Service (RADIUS) Authorization for Network Access | |||
Server (NAS) Management", RFC 5607, July 2009. | Server (NAS) Management", RFC 5607, July 2009. | |||
Appendix A. Usage Examples | Appendix A. Usage Examples | |||
The following XML snippets are provided as examples only, to | The following XML snippets are provided as examples only, to | |||
demonstrate how NACM can be configured to perform some access control | demonstrate how NACM can be configured to perform some access control | |||
tasks. | tasks. | |||
A.1. <groups> Example | A.1. <groups> Example | |||
There must be at least one <group> entry in order for any of the | There needs to be at least one <group> entry in order for any of the | |||
access control rules to be useful. | access control rules to be useful. | |||
The following XML shows arbitrary groups, and is not intended to | The following XML shows arbitrary groups, and is not intended to | |||
represent any particular use-case. | represent any particular use-case. | |||
<nacm xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-acm"> | <nacm xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-acm"> | |||
<groups> | <groups> | |||
<group> | <group> | |||
<name>admin</name> | <name>admin</name> | |||
<user-name>admin</user-name> | <user-name>admin</user-name> | |||
skipping to change at page 52, line 9 | skipping to change at page 52, line 9 | |||
This example shows 1 notification rule: | This example shows 1 notification rule: | |||
notif-1: This rule prevents the monitor or guest groups from | notif-1: This rule prevents the monitor or guest groups from | |||
receiving the acme <sys-config-change> event type. | receiving the acme <sys-config-change> event type. | |||
Appendix B. Change Log | Appendix B. Change Log | |||
-- RFC Ed.: remove this section before publication. | -- RFC Ed.: remove this section before publication. | |||
B.1. 01-02 | B.1. 02-03 | |||
Fixed improper usage of RFC 2119 keywords. | ||||
Changed term usage of 'database' to 'datastore'. | ||||
Clarified that 'secure' and 'very-secure' extensions only apply if | ||||
the /nacm/enable-nacm object is 'true'. | ||||
B.2. 01-02 | ||||
Removed authentication text and objects. | Removed authentication text and objects. | |||
Changed module name from ietf-nacm to ietf-netconf-acm. | Changed module name from ietf-nacm to ietf-netconf-acm. | |||
Updated NETCONF and YANG terminology. | Updated NETCONF and YANG terminology. | |||
Removed open issues section. | Removed open issues section. | |||
Changed some must to MUST in requirements section. | Changed some must to MUST in requirements section. | |||
B.2. 00-01 | B.3. 00-01 | |||
Updated YANG anf YANG Types references. | Updated YANG anf YANG Types references. | |||
Updated module namespace URI to standard format. | Updated module namespace URI to standard format. | |||
Updated module header meta-data to standard format. | Updated module header meta-data to standard format. | |||
Filled in IANA section. | Filled in IANA section. | |||
B.3. 00 | B.4. 00 | |||
Initial version cloned from | Initial version cloned from | |||
draft-bierman-netconf-access-control-02.txt. | draft-bierman-netconf-access-control-02.txt. | |||
Authors' Addresses | Authors' Addresses | |||
Andy Bierman | Andy Bierman | |||
Brocade | Brocade | |||
Email: andy.bierman@brocade.com | Email: andy.bierman@brocade.com | |||
End of changes. 147 change blocks. | ||||
515 lines changed or deleted | 527 lines changed or added | |||
This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |