This section describes the mechanisms for setting up Condor's host-based security. This allows you to control what machines can join your Condor pool, what machines can find out information about your pool, and what machines within your pool can perform administrative commands. By default, Condor is configured to allow anyone to view or join your pool. You probably want to change that.
First, we discuss how the host-based security works inside Condor. Then, we list the different levels of access you can grant and what parts of Condor use which levels. Next, we describe how to configure your pool to grant (or deny) certain levels of access to various machines. Finally, we provide some examples of how you might configure your pool.
Inside the Condor daemons or tools that use DaemonCore (see section 3.6 on ``DaemonCore'' for details), most things are accomplished by sending commands to another Condor daemon. These commands are just an integer to specify which command, followed by any optional information that the protocol requires at that point (such as a ClassAd, capability string, etc). When the daemons start up, they register which commands they are willing to accept, what to do with them when they arrive, and what access level is required for that command. When a command comes in, Condor sees what access level is required, and then checks the IP address of the machine that sent the command and makes sure it passes the various allow/deny settings in your config file for that access level. If permission is granted, the command continues. If not, the command is aborted.
As you would expect, settings for the access levels in your global config file will affect all the machines in your pool. Settings in a local config file will only affect that specific machine. The settings for a given machine determine what other hosts can send commands to that machine. So, if you want machine ``foo'' to have administrator access on to machine ``bar'', you need to put ``foo'' in bar's config file access list, not the other way around.
The following are the various access levels that commands within Condor can be registered with:
IMPORTANT: For a machine to join a condor pool, it must have WRITE permission AND READ permission! (Just WRITE permission is not enough).
IMPORTANT: This is host-wide access we're talking about. So, if you grant ADMINISTRATOR access to a given machine, ANY USER on that machine now has ADMINISTRATOR rights. Therefore, you should grant ADMINISTRATOR access carefully.
NEGOTIATOR permission is handled automatically by Condor, and there is nothing special you need to configure. The other four permissions, READ, WRITE, ADMINISTRATOR and OWNER need to be specified in the config files. See the section on Configuring Condor for details on where these files might be located, general information about how to set parameters, and how to reconfigure the Condor daemons.
ADMINISTRATOR access defaults to only your central manager. OWNER access defaults to the local machine, and any machines listed with ADMINISTRATOR access. You can probably leave that how it is. If you want other machines to have OWNER access, you probably want them to have ADMINISTRATOR access as well. By granting machines ADMINISTRATOR access, they would automatically have OWNER access, given how OWNER access is configured.
For these permissions, you can optionally list an ALLOW or a DENY.
Therefore, the settings you might set are:
HOSTALLOW_READ = <machines> HOSTDENY_READ = ... HOSTALLOW_WRITE = ... HOSTDENY_WRITE = ... HOSTALLOW_ADMINISTRATOR = ... HOSTDENY_ADMINISTRATOR = ... HOSTALLOW_OWNER = ... HOSTDENY_OWNER = ...
Machines can be listed by:
Multiple machine entries can be separated by either a space or a comma.
For resolving something that falls into both allow and deny: Individual machines have a higher order of precedence than wildcard entries, and hostnames with a wildcard have a higher order of precedence than IP subnets. Otherwise, DENY has a higher order of precedence than ALLOW. (this is intuitively how most people would expect it to work).
In addition, you can specify any of the above access levels on a per-daemon basis, instead of machine-wide for all daemons. You do this with the subsystem string (described in section 3.4.1 on ``Subsystem Names''), which is one of: ``STARTD'', ``SCHEDD'', ``MASTER'', ``NEGOTIATOR'', or ``COLLECTOR''. For example, if you wanted to grant different read access for the condor_schedd:
HOSTALLOW_READ_SCHEDD = <machines>
Here are all the commands registered in Condor, what daemon registers them, and what permission they are registered with. With this information, you should be able to grant exactly the permission you wish for your pool:
STARTD:
The command that condor_checkpoint sends to periodically checkpoint all running jobs.
NEGOTIATOR:
COLLECTOR:
SCHEDD:
The commands that a startd sends to the schedd when it must vacate its jobs and release the schedd's claim.
MASTER: All commands are registered with ADMINISTRATOR access:
Notice in all these examples that ADMINISTRATOR access is only granted through a HOSTALLOW setting to explicitly grant access to a small number of machines. We recommend this.
HOSTALLOW_ADMINISTRATOR = $(CONDOR_HOST) HOSTALLOW_OWNER = $(FULL_HOSTNAME), $(HOSTALLOW_ADMINISTRATOR)
HOSTALLOW_READ = *.ncsa.uiuc.edu HOSTALLOW_WRITE = *.ncsa.uiuc.edu HOSTALLOW_ADMINISTRATOR = $(CONDOR_HOST) HOSTALLOW_OWNER = $(FULL_HOSTNAME), $(HOSTALLOW_ADMINISTRATOR)
HOSTALLOW_WRITE = *.ncsa.uiuc.edu, *.math.uiuc.edu HOSTDENY_WRITE = lab-*.edu, *.lab.uiuc.edu, 177.55.* HOSTALLOW_ADMINISTRATOR = bigcheese.ncsa.uiuc.edu HOSTALLOW_OWNER = $(FULL_HOSTNAME), $(HOSTALLOW_ADMINISTRATOR)
\
'' to continue a long list of machines
onto multiple lines, making it more readable (this works for all
config file entries, not just host access entries, see
section 3.4 on ``Configuring Condor'' for
details).
HOSTALLOW_READ = *.ncsa.uiuc.edu, *.cs.wisc.edu HOSTALLOW_WRITE = *.ncsa.uiuc.edu, raven.cs.wisc.edu HOSTALLOW_ADMINISTRATOR = $(CONDOR_HOST), bigcheese.ncsa.uiuc.edu, \ biggercheese.uiuc.edu HOSTALLOW_OWNER = $(FULL_HOSTNAME), $(HOSTALLOW_ADMINISTRATOR)
HOSTDENY_READ = *.mil HOSTALLOW_READ_SCHEDD = *.ncsa.uiuc.edu HOSTALLOW_WRITE = *.ncsa.uiuc.edu HOSTALLOW_ADMINISTRATOR = $(CONDOR_HOST), bigcheese.ncsa.uiuc.edu, \ biggercheese.uiuc.edu HOSTALLOW_ADMINISTRATOR_NEGOTIATOR = biggercheese.uiuc.edu HOSTALLOW_OWNER = $(FULL_HOSTNAME), $(HOSTALLOW_ADMINISTRATOR)