diff --git a/roles/koji_hub/files/koji-ssl.conf b/roles/koji_hub/files/koji-ssl.conf new file mode 100644 index 0000000000..93696c8330 --- /dev/null +++ b/roles/koji_hub/files/koji-ssl.conf @@ -0,0 +1,234 @@ +# +# This is the Apache server configuration file providing SSL support. +# It contains the configuration directives to instruct the server how to +# serve pages over an https connection. For detailing information about these +# directives see +# +# Do NOT simply read the instructions in here without understanding +# what they do. They're here only as hints or reminders. If you are unsure +# consult the online docs. You have been warned. +# + +LoadModule ssl_module modules/mod_ssl.so + +# +# When we also provide SSL we have to listen to the +# the HTTPS port in addition. +# +Listen 443 + +## +## SSL Global Context +## +## All SSL configuration in this context applies both to +## the main server and all SSL-enabled virtual hosts. +## + +# +# Some MIME-types for downloading Certificates and CRLs +# +AddType application/x-x509-ca-cert .crt +AddType application/x-pkcs7-crl .crl + +# Pass Phrase Dialog: +# Configure the pass phrase gathering process. +# The filtering dialog program (`builtin' is a internal +# terminal dialog) has to provide the pass phrase on stdout. +SSLPassPhraseDialog builtin + +# Inter-Process Session Cache: +# Configure the SSL Session Cache: First the mechanism +# to use and second the expiring timeout (in seconds). +#SSLSessionCache dc:UNIX:/var/cache/mod_ssl/distcache +SSLSessionCache shmcb:/var/cache/mod_ssl/scache(512000) +SSLSessionCacheTimeout 86400 + +# Semaphore: +# Configure the path to the mutual exclusion semaphore the +# SSL engine uses internally for inter-process synchronization. +SSLMutex default + +# Pseudo Random Number Generator (PRNG): +# Configure one or more sources to seed the PRNG of the +# SSL library. The seed data should be of good random quality. +# WARNING! On some platforms /dev/random blocks if not enough entropy +# is available. This means you then cannot use the /dev/random device +# because it would lead to very long connection times (as long as +# it requires to make more entropy available). But usually those +# platforms additionally provide a /dev/urandom device which doesn't +# block. So, if available, use this one instead. Read the mod_ssl User +# Manual for more details. +SSLRandomSeed startup file:/dev/urandom 256 +SSLRandomSeed connect builtin +#SSLRandomSeed startup file:/dev/random 512 +#SSLRandomSeed connect file:/dev/random 512 +#SSLRandomSeed connect file:/dev/urandom 512 + +# +# Use "SSLCryptoDevice" to enable any supported hardware +# accelerators. Use "openssl engine -v" to list supported +# engine names. NOTE: If you enable an accelerator and the +# server does not start, consult the error logs and ensure +# your accelerator is functioning properly. +# +SSLCryptoDevice builtin +#SSLCryptoDevice ubsec + +## +## SSL Virtual Host Context +## + + + +# General setup for the virtual host, inherited from global configuration +#DocumentRoot "/var/www/html" +#ServerName www.example.com:443 + +# Use separate log files for the SSL virtual host; note that LogLevel +# is not inherited from httpd.conf. +ErrorLog logs/ssl_error_log +TransferLog logs/ssl_access_log +LogLevel warn + +# SSL Engine Switch: +# Enable/Disable SSL for this virtual host. +SSLEngine on + +# SSL Protocol support: +# List the enable protocol levels with which clients will be able to +# connect. Disable SSLv2 access by default: +SSLProtocol all -SSLv2 + +# SSL Cipher Suite: +# List the ciphers that the client is permitted to negotiate. +# See the mod_ssl documentation for a complete list. +SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW + +# Server Certificate: +# Point SSLCertificateFile at a PEM encoded certificate. If +# the certificate is encrypted, then you will be prompted for a +# pass phrase. Note that a kill -HUP will prompt again. A new +# certificate can be generated using the genkey(1) command. +SSLCertificateFile /etc/pki/tls/certs/koji_cert.pem + +# Server Private Key: +# If the key is not combined with the certificate, use this +# directive to point at the key file. Keep in mind that if +# you've both a RSA and a DSA private key you can configure +# both in parallel (to also allow the use of DSA ciphers, etc.) +SSLCertificateKeyFile /etc/pki/tls/private/koji_key.pem + +# Server Certificate Chain: +# Point SSLCertificateChainFile at a file containing the +# concatenation of PEM encoded CA certificates which form the +# certificate chain for the server certificate. Alternatively +# the referenced file can be the same as SSLCertificateFile +# when the CA certificates are directly appended to the server +# certificate for convinience. +SSLCertificateChainFile /etc/pki/tls/certs/extras_cacert.pem + +# Certificate Authority (CA): +# Set the CA certificate verification path where to find CA +# certificates for client authentication or alternatively one +# huge file containing all of them (file must be PEM encoded) +SSLCACertificateFile /etc/pki/tls/certs/extras_upload_cacert.pem + +# Client Authentication (Type): +# Client certificate verification type and depth. Types are +# none, optional, require and optional_no_ca. Depth is a +# number which specifies how deeply to verify the certificate +# issuer chain before deciding the certificate is not valid. +#SSLVerifyClient require +#SSLVerifyDepth 10 + + +# our CRL ;) +SSLCARevocationFile /etc/pki/tls/crl.pem + +# Access Control: +# With SSLRequire you can do per-directory access control based +# on arbitrary complex boolean expressions containing server +# variable checks and other lookup directives. The syntax is a +# mixture between C and Perl. See the mod_ssl documentation +# for more details. +# +#SSLRequire ( %{SSL_CIPHER} !~ m/^(EXP|NULL)/ \ +# and %{SSL_CLIENT_S_DN_O} eq "Snake Oil, Ltd." \ +# and %{SSL_CLIENT_S_DN_OU} in {"Staff", "CA", "Dev"} \ +# and %{TIME_WDAY} >= 1 and %{TIME_WDAY} <= 5 \ +# and %{TIME_HOUR} >= 8 and %{TIME_HOUR} <= 20 ) \ +# or %{REMOTE_ADDR} =~ m/^192\.76\.162\.[0-9]+$/ +# + +# SSL Engine Options: +# Set various options for the SSL engine. +# o FakeBasicAuth: +# Translate the client X.509 into a Basic Authorisation. This means that +# the standard Auth/DBMAuth methods can be used for access control. The +# user name is the `one line' version of the client's X.509 certificate. +# Note that no password is obtained from the user. Every entry in the user +# file needs this password: `xxj31ZMTZzkVA'. +# o ExportCertData: +# This exports two additional environment variables: SSL_CLIENT_CERT and +# SSL_SERVER_CERT. These contain the PEM-encoded certificates of the +# server (always existing) and the client (only existing when client +# authentication is used). This can be used to import the certificates +# into CGI scripts. +# o StdEnvVars: +# This exports the standard SSL/TLS related `SSL_*' environment variables. +# Per default this exportation is switched off for performance reasons, +# because the extraction step is an expensive operation and is usually +# useless for serving static content. So one usually enables the +# exportation for CGI and SSI requests only. +# o StrictRequire: +# This denies access when "SSLRequireSSL" or "SSLRequire" applied even +# under a "Satisfy any" situation, i.e. when it applies access is denied +# and no other module can change it. +# o OptRenegotiate: +# This enables optimized SSL connection renegotiation handling when SSL +# directives are used in per-directory context. +#SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire + + SSLOptions +StdEnvVars + + + SSLOptions +StdEnvVars + + +# SSL Protocol Adjustments: +# The safe and default but still SSL/TLS standard compliant shutdown +# approach is that mod_ssl sends the close notify alert but doesn't wait for +# the close notify alert from client. When you need a different shutdown +# approach you can use one of the following variables: +# o ssl-unclean-shutdown: +# This forces an unclean shutdown when the connection is closed, i.e. no +# SSL close notify alert is send or allowed to received. This violates +# the SSL/TLS standard but is needed for some brain-dead browsers. Use +# this when you receive I/O errors because of the standard approach where +# mod_ssl sends the close notify alert. +# o ssl-accurate-shutdown: +# This forces an accurate shutdown when the connection is closed, i.e. a +# SSL close notify alert is send and mod_ssl waits for the close notify +# alert of the client. This is 100% SSL/TLS standard compliant, but in +# practice often causes hanging connections with brain-dead browsers. Use +# this only for browsers where you know that their SSL implementation +# works correctly. +# Notice: Most problems of broken clients are also related to the HTTP +# keep-alive facility, so you usually additionally want to disable +# keep-alive for those clients, too. Use variable "nokeepalive" for this. +# Similarly, one has to force some clients to use HTTP/1.0 to workaround +# their broken HTTP/1.1 implementation. Use variables "downgrade-1.0" and +# "force-response-1.0" for this. +SetEnvIf User-Agent ".*MSIE.*" \ + nokeepalive ssl-unclean-shutdown \ + downgrade-1.0 force-response-1.0 + +# Per-Server Logging: +# The home of a custom SSL log file. Use this when you want a +# compact non-error SSL logfile on a virtual host basis. +CustomLog logs/ssl_request_log \ + "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" + +RewriteEngine on +RewriteRule ^/$ /koji [R,L] + diff --git a/roles/koji_hub/files/kojihub.conf b/roles/koji_hub/files/kojihub.conf new file mode 100644 index 0000000000..aae5fce9d6 --- /dev/null +++ b/roles/koji_hub/files/kojihub.conf @@ -0,0 +1,28 @@ +# +# koji-hub is an xmlrpc interface to the Koji database +# + +Alias /kojihub /usr/share/koji-hub/kojixmlrpc.py + + + Options ExecCGI + SetHandler wsgi-script + Order allow,deny + Allow from all + + + + + SSLVerifyClient require + SSLVerifyDepth 10 + SSLOptions +StdEnvVars + + +# uncomment this to enable authentication via SSL client certificates +# +# SSLOptions +StdEnvVars +# +# these options must be enabled globally (in ssl.conf) +# SSLVerifyClient require +# SSLVerifyDepth 10 + diff --git a/roles/koji_hub/files/kojira.conf b/roles/koji_hub/files/kojira.conf new file mode 100644 index 0000000000..dd1cd1cab6 --- /dev/null +++ b/roles/koji_hub/files/kojira.conf @@ -0,0 +1,40 @@ +[kojira] +; For user/pass authentication +; user=kojira +; password=kojira + +; For Kerberos authentication +; the principal to connect with +; principal=koji/repo@EXAMPLE.COM +; The location of the keytab for the principal above +; keytab=/etc/kojira.keytab + +; The URL for the koji hub server +server=http://localhost/kojihub + +; The directory containing the repos/ directory +topdir=/mnt/koji + +; Logfile +logfile=/var/log/kojira/kojira.log + +; Include srpms in repos? (not needed for normal operation) +with_src=no + +; prevent repo cleanup from stalling repo regen +;prune_batch_size=1 +;delete_batch_size=1 + +; prevent kojira from flooding the build system with newRepo tasks +max_repo_tasks=3 + +;configuration for SSL athentication + +;client certificate +cert = /etc/kojira/kojira_cert_key.pem + +;certificate of the CA that issued the client certificate +ca = /etc/kojira/extras_cacert.pem + +;certificate of the CA that issued the HTTP server certificate +serverca = /etc/kojira/extras_cacert.pem diff --git a/roles/koji_hub/files/kojiweb.conf b/roles/koji_hub/files/kojiweb.conf new file mode 100644 index 0000000000..f4b09d7bb9 --- /dev/null +++ b/roles/koji_hub/files/kojiweb.conf @@ -0,0 +1,56 @@ +RewriteEngine On +RewriteRule ^/$ /koji/ [R,L] + +#We use wsgi by default +Alias /koji "/usr/share/koji-web/scripts/wsgi_publisher.py" +#(configuration goes in /etc/kojiweb/web.conf) + + + Options ExecCGI + SetHandler wsgi-script + Order allow,deny + Allow from all + + + + SSLVerifyClient require + SSLVerifyDepth 10 + SSLOptions +StdEnvVars + + + +Alias /koji-static/ "/usr/share/koji-web/static/" + + + Options None + AllowOverride None + Order allow,deny + Allow from all + + +Alias /repos "/mnt/koji/repos/" + + + Options Indexes FollowSymLinks + + +Alias /scratch "/mnt/koji/scratch/" + + + Options Indexes + + +Alias /work "/mnt/koji/work/" + + + Options Indexes + + +Alias /buildgroups "/mnt/koji/buildgroups/" + + + Options Indexes FollowSymLinks + + + +RewriteRule ^/packages(.+) https://kojipkgs.fedoraproject.org/packages$1 [R=301,L] diff --git a/roles/koji_hub/files/mash.conf b/roles/koji_hub/files/mash.conf new file mode 100644 index 0000000000..2fe3c5d224 --- /dev/null +++ b/roles/koji_hub/files/mash.conf @@ -0,0 +1,4 @@ +Alias /mash /mnt/koji/mash/ + + Options Indexes + diff --git a/roles/koji_hub/files/rel-eng.conf b/roles/koji_hub/files/rel-eng.conf new file mode 100644 index 0000000000..d76ad0c6fe --- /dev/null +++ b/roles/koji_hub/files/rel-eng.conf @@ -0,0 +1,4 @@ +Alias /rel-eng /mnt/koji/rel-eng/ + + Options Indexes + diff --git a/roles/koji_hub/files/repo.conf b/roles/koji_hub/files/repo.conf new file mode 100644 index 0000000000..d2f049d9d9 --- /dev/null +++ b/roles/koji_hub/files/repo.conf @@ -0,0 +1,6 @@ +Alias /koji-repo /srv/local-repo + + Options None + order allow,deny + allow from all + diff --git a/roles/koji_hub/tasks/main.yml b/roles/koji_hub/tasks/main.yml index b3c38c61f7..cbf0ec3d1f 100644 --- a/roles/koji_hub/tasks/main.yml +++ b/roles/koji_hub/tasks/main.yml @@ -31,6 +31,12 @@ - config notify: restart httpd +- name: kojiweb config + template: src=hub.conf.j2 dest=/etc/koji-hub/hub.conf owner=apache group=apache mode=600 + tags: + - config + notify: restart httpd + - name: init koji ca key file copy: src={{ puppet_private }}/koji/koji.stg_key.pem dest=/etc/pki/tls/private/koji.stg_key.pem tags: @@ -46,10 +52,24 @@ tags: - config -# Todo here -# httpd ssl.conf changes -# koji hub.conf template -# +- name: koji web config files + file: src={{ item }} path=/etc/httpd/conf.d/{{ item }} owner=root group=root + with_items: + - kojiweb.conf + - kojihub.conf + - mash.conf + - rel-eng.conf + - repo.conf + - kojira.conf + tags: + - config + notify: restart httpd + +- name: koji ssl config + copy: src=koji-ssl.confg dest=/etc/httpd/conf.d/ssl.conf + tags: + - config + - name: make mnt/koji directory file: state=directory path=/mnt/koji/ owner=root group=root @@ -59,8 +79,6 @@ - name: set sebooleans so koji can anon write seboolean: name=allow_httpd_anon_write state=true persistent=true -# chcon -R -t public_content_rw_t /mnt/koji/* - - name: Set httpd to run on boot service: name=httpd enabled=yes ignore_errors: true