Skip to content

Security, Identification and Authentication

As CTA has access to every EOS instance, it must prevent crosstalk between EOS instances belonging to different VOs. This is achieved by applying the least privilege principle, i.e. the ATLAS EOS instance should not be able to access (or even know about) files belonging to CMS.

The EOS--CTA Protocol Buffer identifies the instance sending the Request. The CTA Frontend must also be able to authenticate that the instance name is legitimate.

Simple Shared Secrets

XRootD uses Simple Shared Secrets (SSS) to authenticate Protocol Buffer requests. In order to authenticate the instance name, there must be a unique SSS key for each VO.

The EOS team say that the following SSS keys are in use:

Number Len Date/Time Created Expires  Keyname   User & Group
------ --- --------- ------- -------- -------   ------------
2      32  02/10/12 17:34:12 -------- eosalice  daemon daemon
2      32  12/10/10 15:22:01 -------- eoscms    daemon daemon
1      32  06/25/12 15:42:16 -------- eoslhcb   daemon daemon
1      32  02/14/13 16:20:06 -------- eospublic daemon daemon
3      32  10/06/14 12:04:59 -------- eosuser   daemon daemon

XRootD allows us to detect the user name of the key but not the keyname, and currently all key user names are set to the same value (daemon). However, when the key is communicated from client to server, only the key value is sent across the wire. The value for the u: (user) field is read from the keytab on the server side.

Therefore, the solution to the problem of using the SSS key to validate the instance name in the Protocol Buffer is simply to edit the u: field for all keys in the CTA Frontend keytab so that they match the expected instance names. This also needs to be implemented in the Frontend:

The u: field from the keytab is passed as a parameter to Service::ProcessRequest(). The g:~(group) field does not appear to be used. n:~(keyname) is a unique identifier within the keytab and appears to be used for key management only.

There is an XRootD bug affecting the generation of unique keys: if the keys are created within the same second, XRoot treats them as different versions of the same key. The workaround is to have at least a two-second delay between generating each key, so this is not really an issue in production.

Access Rules

Info

Redundant Rules?

The struck through rules below are probably not required.

A listStorageClass command should return the list of storage classes belonging to the instance from where the command was executed only

A queueArchive command should be authorized only if:

  • the instance provided in the command line coincides with the instance from where the command was executed
  • the storage class provided in the command line belongs to the instance from where the command was executed
  • the EOS username and/or group (of the original archive requester) provided in the command line belongs to the instance from where the command was executed<\del>

A queueRetrieve command should be authorized only if:

  • the instance of the requested file coincides with the instance from where the command was executed
  • the EOS username and/or group (of the original retrieve requester) provided in the command line belongs to the instance from where the command was executed<\del>

A deleteArchive command should be authorized only if:

  • the instance of the file to be deleted coincides with the instance from where the command was executed
  • the EOS username and/or group (of the original delete requester) provided in the command line belongs to the instance from where the command was executed<\del>

A cancelRetrieve command should be authorized only if:

  • the instance of the file to be canceled coincides with the instance from where the command was executed
  • the EOS username and/or group (of the original cancel requester) provided in the command line belongs to the instance from where the command was executed<\del>

An updateFileStorageClass command should be authorized only if:

  • the instance of the file to be updated coincides with the instance from where the command was executed
  • the storage class provided in the command line belongs to the instance from where the command was executed
  • the EOS username and/or group (of the original update requester) provided in the command line belongs to the instance from where the command was executed<\del>

An updateFileInfo command should be authorized only if:

  • the instance of the file to be updated coincides with the instance from where the command was executed