SELinux/portage

From Gentoo Wiki
Jump to:navigation Jump to:search

Structure

Domains

The portage module provides the following domains:

Domain Process(es) Description
portage_t emerge, ebuild, quickpkg, ebuild.sh, regenworld, sandbox Gentoo's package manager domain.
portage_sandbox_t sandbox Portage compile sandbox domain.
portage_fetch_t rsync, emerge-webrsync, layman Domain responsible for fetching ebuilds and sources as well as managing overlays.
gcc_config_t gcc-config Domain for the gcc-config wrapper.

File types/labels

The following table lists the file type/labels defined in the portage module:

Type Description
portage_exec_t Entrypoints for the portage and portage-related domains. Used for binaries or scripts such as sandbox, emerge, ...
gcc_config_exec_t Entrypoints for the gcc-config wrapper domain.
portage_ebuild_t Type assigned to the ebuild files and directories.
portage_srcrepo_t Type assigned to the live repository pulls (git, svn, cvs, ...) used by live ebuilds.
portage_fetch_tmp_t Type used by the portage_fetch_t domain when storing files in a temporary location.
portage_db_t Type used by Portage' data files.
portage_conf_t Type used by Portage' configuration files.
portage_cache_t Type used for the Portage cache.
portage_log_t Type used by Portage for its log files.
portage_tmp_t, portage_tmpfs_t Type used by Portage for temporary files .

Other types

Besides the files and domains, the following types are also defined in the portage module:

Type Description
portage_devpts_t Type used for the terminal output device/location

Using the portage module

File locations

The policy offered only contains the right file context rules for the default locations. If you deviate from these locations, you'll need to update the contexts accordingly.

The following table provides an overview of the Portage settings (variables in make.conf) that are commonly changed by end users, and the file context that it should have.

Variable in make.conf Default Location Old location File context(s)
${PORTDIR} /var/db/repos/gentoo /usr/portage system_u:object_r:portage_ebuild_t
${DISTDIR} /var/cache/distfiles /usr/portage/distfiles system_u:object_r:portage_ebuild_t
${DISTDIR}/{git,svc,cvs}-src /var/cache/distfiles/{git,svc,cvs}-src /usr/portage/distfiles/{git,svc,cvs}-src system_u:object_r:portage_srcrepo_t
${PKGDIR} /var/cache/binpkgs /usr/portage/packages system_u:object_r:portage_ebuild_t
${PORT_LOGDIR} /var/log/portage /var/log/portage system_u:object_r:portage_log_t
${PORTAGE_TMPDIR} /var/tmp/portage /var/tmp/portage system_u:object_r:portage_tmp_t

If you use different locations, use the following commands to update the file contexts accordingly (example to use /var/repo/portage for the Portage tree instead of /usr/portage):

root #semanage fcontext -a -t portage_ebuild_t /var/repo/portage
root #restorecon -R /var/repo/portage

Don't forget that Portage uses subdirectories with different labels (think distfiles or the repositories for the live ebuilds) so take care when relabeling locations!

If you are using different mounts, you might need to use the rootcontext= mount option to set the initial context. If the file system does not support SELinux contexts (like NFS), you can use the context= mount option to force the context of all files on the mounted location.

SELinux booleans

The Portage module within Gentoo defines one boolean, called portage_use_nfs.

  • When portage_use_nfs is enabled, then the Portage-related domains will be able to manage the nfs_t and as such, allow for the Portage tree and other locations to be NFS-mounted without correcting their label (which is still supported when using the context= mount option).

To switch booleans, use setsebool or togglesebool.

root #setsebool -P portage_use_nfs on