=============================================
Administering a multi-user conda installation
=============================================

By default, conda and all of the packages it installs are installed locally with a
user-specific configuration. Administrative privileges are not required, and
no upstream files or other users are affected by the installation.

You can make conda and any number of packages available to a
group of one or more users, while preventing these users
from installing unwanted packages with conda:

#. Install conda and the allowed packages, if any, in a
   location that is under administrator control and
   accessible to users.

#. Create a
   :doc:`.condarc system configuration file <use-condarc>` in
   the root directory of the installation. This system-level
   configuration file will override any user-level configuration
   files installed by the user.

Each user accesses the central conda installation, which reads
settings from the user ``.condarc`` configuration file located
in their home directory. The path to the user file is the same
as the root environment prefix displayed by ``conda info``,
as shown in :ref:`admin-inst-user` below. The user
``.condarc`` file is limited by the system ``.condarc`` file.

System configuration settings are commonly used in a
system ``.condarc`` file but may also be used in a
user ``.condarc`` file. All user configuration settings may
also be used in a system ``.condarc`` file.

For information about settings in the ``.condarc`` file,
see :doc:`use-condarc`.

.. _admin-inst:

Example administrator-controlled installation
=============================================

The following example describes how to view the system
configuration file, review the settings, compare it to a user's
configuration file, and determine what happens when the user
attempts to access a file from a blocked channel. It then
describes how the user must modify their configuration file to
access the channels allowed by the administrator.

System configuration file
-------------------------

#. The system configuration file must be in the top-level conda
   installation directory. Check the path where ``conda`` is located, e.g.
   in a miniconda installation

   .. code-block:: bash

      $ which conda
      /tmp/miniconda/bin/conda

#. View the contents of the ``.condarc`` file in the
   administrator's directory:

   .. code-block:: bash

      cat /tmp/miniconda/.condarc

   The following administrative ``.condarc`` file
   uses the ``#!final`` flag to specify the channels,
   default channels, and channel_alias available to the user.

   .. code-block:: bash

     $ cat /tmp/miniconda/.condarc

     channels:                                   #!final
       - admin

     channel_alias: https://conda.anaconda.org/  #!final

The ``#!final`` flag is very similar to the ``!important``
rule in CSS; any parameter within the ``.condarc`` that is
trailed by the ``#!final`` cannot be overwritten by any other
``.condarc`` source. For more information on this flag, see the
`Anaconda Blog <https://www.anaconda.com/blog/conda-configuration-engine-power-users>`_
on the subject.

Because the ``#!final`` flag has been used and the channel
defaults are not explicitly specified, users are disallowed
from downloading packages from the default channels. You can
check this in the next procedure.

.. _admin-inst-user:

User configuration file
-----------------------

#. Check the location of the user's conda installation:

   .. code-block:: bash

     $ conda info
     Current conda install:
     . . .
            channel URLs : https://repo.anaconda.com/pkgs/free/osx-64/
                           https://repo.anaconda.com/pkgs/pro/osx-64/
            config file : /Users/username/.condarc

   The ``conda info`` command shows that conda is using the
   user's ``.condarc`` file, located at
   ``/Users/username/.condarc`` and that the default channels
   such as ``repo.anaconda.com`` are listed as channel URLs.

#. View the contents of the administrative ``.condarc`` file in
   the directory that was located in step 1:

   .. code-block:: bash

     $ cat ~/.condarc
     channels:
       - defaults

   This user's ``.condarc`` file specifies only the default
   channels, but the administrator config file has blocked
   default channels by specifying that only ``admin`` is
   allowed. If this user attempts to search for a package in the
   default channels, they get a message telling them what
   channels are allowed:

   .. code-block:: bash

      $ conda search flask
      Fetching package metadata:
      Error: URL 'http://repo.anaconda.com/pkgs/pro/osx-64/' not
      in allowed channels.
      Allowed channels are:
       - https://conda.anaconda.org/admin/osx-64/

   This error message tells the user to add the ``admin`` channel
   to their configuration file.

#. The user must edit their local ``.condarc`` configuration file
   to access the package through the admin channel:

   .. code-block:: yaml

     channels:
       - admin

   The user can now search for packages in the allowed
   ``admin`` channel.
