mirror of
				https://github.com/samply/bridgehead.git
				synced 2025-11-04 10:40:18 +01:00 
			
		
		
		
	Add support for SELinux systems
This commit is contained in:
		
				
					committed by
					
						
						tobiaskussel
					
				
			
			
				
	
			
			
			
						parent
						
							4c6f9e0f13
						
					
				
				
					commit
					c530b55aa4
				
			@@ -36,6 +36,32 @@ setupProxy() {
 | 
				
			|||||||
	export HTTPS_PROXY_HOST HTTPS_PROXY_PORT HTTPS_PROXY_FULL_URL
 | 
						export HTTPS_PROXY_HOST HTTPS_PROXY_PORT HTTPS_PROXY_FULL_URL
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					checkAndSetSelinux() {
 | 
				
			||||||
 | 
						# This is needed for the systemd service to start on SELinux systems.
 | 
				
			||||||
 | 
						if ! command -v sestatus > /dev/null 2>&1; then
 | 
				
			||||||
 | 
						 	echo "SELinux not available; nothing to do"
 | 
				
			||||||
 | 
						 	return
 | 
				
			||||||
 | 
						fi
 | 
				
			||||||
 | 
						if ! sestatus | grep "SELinux status:" | grep enabled > /dev/null; then
 | 
				
			||||||
 | 
							echo "SELinux disabled; nothing to do"
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						fi
 | 
				
			||||||
 | 
						current_mode="$(sestatus | grep 'Current mode:' | tr -s ' ' | cut -d' ' -f 3)"
 | 
				
			||||||
 | 
						echo "SELinux is active and ${current_mode}, checking for labels..."
 | 
				
			||||||
 | 
						# TODO: perhaps split this into checkSelinux (without the need for root) and setSelinux (needing root)
 | 
				
			||||||
 | 
						# "stat /srv/docker/bridgehead/bridgehead --printf %C" could be used for a check that doesn't need root
 | 
				
			||||||
 | 
						exitIfNotRoot
 | 
				
			||||||
 | 
						labels_for_srv="$(semanage fcontext --list | grep -e ^/srv)"
 | 
				
			||||||
 | 
						echo "Found the following labels for /srv:"
 | 
				
			||||||
 | 
						echo "${labels_for_srv}"
 | 
				
			||||||
 | 
						if ! echo "${labels_for_srv}" | grep -e ^/srv/docker/bridgehead/bridgehead > /dev/null; then
 | 
				
			||||||
 | 
							echo "Adding a label for /srv/docker/bridgehead/bridgehead..."
 | 
				
			||||||
 | 
							semanage fcontext --add --type bin_t /srv/docker/bridgehead/bridgehead
 | 
				
			||||||
 | 
						fi
 | 
				
			||||||
 | 
						restorecon -v /srv/docker/bridgehead/bridgehead  # this survives a reboot
 | 
				
			||||||
 | 
						# TODO: check if this survives updates
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
exitIfNotRoot() {
 | 
					exitIfNotRoot() {
 | 
				
			||||||
  if [ "$EUID" -ne 0 ]; then
 | 
					  if [ "$EUID" -ne 0 ]; then
 | 
				
			||||||
    log "ERROR" "Please run as root"
 | 
					    log "ERROR" "Please run as root"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,6 +3,7 @@
 | 
				
			|||||||
source lib/functions.sh
 | 
					source lib/functions.sh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
exitIfNotRoot
 | 
					exitIfNotRoot
 | 
				
			||||||
 | 
					checkAndSetSelinux
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if [ $# -eq 0 ]; then
 | 
					if [ $# -eq 0 ]; then
 | 
				
			||||||
    log "ERROR" "Please provide a Project as argument"
 | 
					    log "ERROR" "Please provide a Project as argument"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -25,6 +25,9 @@ services:
 | 
				
			|||||||
    ports:
 | 
					    ports:
 | 
				
			||||||
      - 80:80
 | 
					      - 80:80
 | 
				
			||||||
      - 443:443
 | 
					      - 443:443
 | 
				
			||||||
 | 
					    security_opt:
 | 
				
			||||||
 | 
					      # allow access to the docker socket on systems with SELinux
 | 
				
			||||||
 | 
					      - "label:type:container_runtime_t"
 | 
				
			||||||
    volumes:
 | 
					    volumes:
 | 
				
			||||||
      - /etc/bridgehead/traefik-tls:/certs:ro
 | 
					      - /etc/bridgehead/traefik-tls:/certs:ro
 | 
				
			||||||
      - ../lib/traefik-configuration/:/configuration:ro
 | 
					      - ../lib/traefik-configuration/:/configuration:ro
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,13 +12,13 @@ services:
 | 
				
			|||||||
      ALL_PROXY: http://forward_proxy:3128
 | 
					      ALL_PROXY: http://forward_proxy:3128
 | 
				
			||||||
      TLS_CA_CERTIFICATES_DIR: ./conf/trusted-ca-certs
 | 
					      TLS_CA_CERTIFICATES_DIR: ./conf/trusted-ca-certs
 | 
				
			||||||
      ROOTCERT_FILE: ./conf/root.crt.pem
 | 
					      ROOTCERT_FILE: ./conf/root.crt.pem
 | 
				
			||||||
    secrets:
 | 
					 | 
				
			||||||
      - proxy.pem
 | 
					 | 
				
			||||||
    depends_on:
 | 
					    depends_on:
 | 
				
			||||||
      - "forward_proxy"
 | 
					      - "forward_proxy"
 | 
				
			||||||
    volumes:
 | 
					    volumes:
 | 
				
			||||||
      - /etc/bridgehead/trusted-ca-certs:/conf/trusted-ca-certs:ro
 | 
					      - /etc/bridgehead/trusted-ca-certs:/conf/trusted-ca-certs:ro
 | 
				
			||||||
      - /srv/docker/bridgehead/ccp/root.crt.pem:/conf/root.crt.pem:ro
 | 
					      - /srv/docker/bridgehead/ccp/root.crt.pem:/conf/root.crt.pem:ro,Z
 | 
				
			||||||
 | 
					      # secrets don't seem to allow us to specify Z
 | 
				
			||||||
 | 
					      - /etc/bridgehead/pki/${SITE_ID}.priv.pem:/run/secrets/proxy.pem:ro
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  dnpm-beam-connect:
 | 
					  dnpm-beam-connect:
 | 
				
			||||||
    depends_on: [ dnpm-beam-proxy ]
 | 
					    depends_on: [ dnpm-beam-proxy ]
 | 
				
			||||||
@@ -41,7 +41,7 @@ services:
 | 
				
			|||||||
    volumes:
 | 
					    volumes:
 | 
				
			||||||
      - /etc/bridgehead/trusted-ca-certs:/conf/trusted-ca-certs:ro
 | 
					      - /etc/bridgehead/trusted-ca-certs:/conf/trusted-ca-certs:ro
 | 
				
			||||||
      - /etc/bridgehead/dnpm/local_targets.json:/conf/connect_targets.json:ro
 | 
					      - /etc/bridgehead/dnpm/local_targets.json:/conf/connect_targets.json:ro
 | 
				
			||||||
      - /srv/docker/bridgehead/minimal/modules/dnpm-central-targets.json:/conf/central_targets.json:ro
 | 
					      - /srv/docker/bridgehead/minimal/modules/dnpm-central-targets.json:/conf/central_targets.json:ro,Z
 | 
				
			||||||
    labels:
 | 
					    labels:
 | 
				
			||||||
      - "traefik.enable=true"
 | 
					      - "traefik.enable=true"
 | 
				
			||||||
      - "traefik.http.routers.dnpm-connect.rule=PathPrefix(`/dnpm-connect`)"
 | 
					      - "traefik.http.routers.dnpm-connect.rule=PathPrefix(`/dnpm-connect`)"
 | 
				
			||||||
@@ -53,7 +53,3 @@ services:
 | 
				
			|||||||
  dnpm-echo:
 | 
					  dnpm-echo:
 | 
				
			||||||
    image: docker.verbis.dkfz.de/cache/samply/bridgehead-echo:latest
 | 
					    image: docker.verbis.dkfz.de/cache/samply/bridgehead-echo:latest
 | 
				
			||||||
    container_name: bridgehead-dnpm-echo
 | 
					    container_name: bridgehead-dnpm-echo
 | 
				
			||||||
 | 
					 | 
				
			||||||
secrets:
 | 
					 | 
				
			||||||
  proxy.pem:
 | 
					 | 
				
			||||||
    file: /etc/bridgehead/pki/${SITE_ID}.priv.pem
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user