UNIX Password, Roles & Node Management: Nomenclature
There's a few concepts and terms that are thrown around when working with Password Management. This document attempts to clear up a few things.
Essentially, if it's on a network, and it's managed, then it can be classified as a node.
There are two different classifications of nodes: local, and remote:
pw-source01.domain.com 192.168.10.10 pw-node01.domain.com 192.168.10.11
In this example, pw-source01
is the Password Management control instance, and
pw-node01
is local to the source.
Nodes have several attributes, which are detailed in a seperate document.
These attributes are called tags, or ``plus-tags'' (because they take the form
of +TAG
).
All the node attributes are stored in a Node Control File (NCF). In order for a NCF to be considered valid, it must have the following two attributes set:
+ENV={environment}
+ENV
tag specifies the environment this node belongs to.
{environment}
is one of the environments you create under the
environments directory. You can have multiple environments,
seperated by a comma-whitespace, like so:
+ENV=prod, prod/billing
Or you can have multiple lines, like so:
+ENV=prod +ENV=prod/billing
+OS={os_specification}
+OS
tag defines what operating system, machine architecture, and revision
this node runs. It's syntax looks like this:
os_name/machine_arch/os_version
For example, if you have a Solaris 8 node running on Sparc, the os_specification would look like:
solaris/sparc/5.8
You can only have one +OS
tag per node.
The following operating systems are known:
The following architectures are known:
Nodes are assigned to one or more valid environments via the +ENV
environment tag,
as shown above.
See also the Covad::Pwman::Tags documentation.
alice
, bob
), or a
system-type account (eg, nobody
, root
, daemon
). Each user has the following
attributes:
(If you're familiar with the passwd file format, these should be pretty obvious.)
There are two basic types of users: real users, and system users.
Real users should gain access to nodes via one or more roles under the roles directory.
daemon
,
sys
, and root
fall into this category. They generally fullfill the purpose of an
account to which a particular service or application is run as that isn't a real user
(which can be terminated based on association to your organization; employees sometimes
quit or get fired) and that isn't root
(in general, running everything as root
is
considered poor discipline as well as a security risk).
System users should gain access to nodes via direct installation into one or more environments under the environments tree via the system-users files.
Think of a role as a group of users that fullfills a specific purpose. You could, for example: have a role called AdminUsersFulltime containing all of your fulltime system admins, with pretty broad access and ``ALL:ALL'' sudo directives; a role called AdminUsersHelpdeskSupport containing all your helpdesk users, with not-so-broad access and a limited subset of commands; a role called EngBillingSupport for all your engineers that support the billing applications, who can only access the billing servers and might not have any sudo commands. Users can of course be members of more than one role (some companies enjoy matrix reporting; some engineers wear several different hats), and that user effectively receives the union of all those roles.
A role is assigned to one or more environments under the environment tree via the role-users files.
dev dev/www prod prod/www prod/printers prod/dns
Each tree leaf is an environment (even ``prod'' and ``dev'', in the above example). You can specify multiple environments, and get the union of roles from both. Environments inherit attributes and roles from those that come before it. For example, the attributes and roles installed in ``prod'' would also be applied to ``prod/www'' and ``prod/printers''. Environments can be marked to not follow this behavior, but rather to ignore higher-up environments; this is called ``no-inherit''. Environments can also be ``exclusive'', which not only would ignore parent environments but other environment (there's much more on inheritance and exclusivity later).
You can break down your taxonomy of environments in whatever way suits your organization or installation. You might have them broken down by geographical region, or by organizational owner, or by functional role, or even flat and non-organized; whatever best matches how you do categorize your nodes. This is entirely up to you, and completely freeform. A few examples are below:
san_jose_ca/ san_jose_ca/www san_jose_ca/database san_jose_ca/console san_jose_ca/misc atlanta_ga/ atlanta_ga/www atlanta_ga/database atlanta_ga/console atlanta_ga/misc
Or even something like this, in case you expect a new datacenter somewhere in California someday:
ca/ ca/san_jose/ ca/san_jose/www ca/san_jose/database ca/san_jose/misc ca/san_jose/misc/console ga/ ga/atlanta/ ga/atlanta/www ga/atlanta/database ga/atlanta/misc ga/atlanta/misc/console
billing/ billing/application billing/database order-mgmt/ aaa/ aaa/radius aaa/tacacs aaa/unified-database
If you wanted to take this a step further and replicate these environments for your software development group, you could do this:
prod/ prod/billing/ prod/billing/application prod/billing/database prod/order-mgmt/ prod/aaa/ prod/aaa/radius prod/aaa/tacacs prod/aaa/unified-database dev/ dev/billing/ dev/billing/application dev/billing/database dev/order-mgmt/ dev/aaa/ dev/aaa/radius dev/aaa/tacacs dev/aaa/unified-database
finance/ finance/reporting finance/print-svr hr/ hr/shared-nas hr/printers rnd/ rnd/misc
passwd(4), mkdir(!), the Covad::Pwman::Tags manpage
Jon Gilbert <jong@jong.org>
$Id: pwman_docs_nomenclature.pod,v 1.2 2005/10/20 08:46:34 jgilbertsjc Exp $