From Fedora Project Wiki
(Add link and info about Patrick's debug script)
(update chrome/chromium policy parameter names)
 
(35 intermediate revisions by 23 users not shown)
Line 1: Line 1:
= Infrastructure kerberos authentication =
= Infrastructure Kerberos authentication =


== Background ==
== Background ==


Starting in November 2016, Fedora Infrastructure began to use kerberos authentication for some services, starting with koji (the Fedora build system). On December 12th 2016, the koji buildsystem will be switched to only allow kerberos authentication, and disallow the old ssl cert authentication.
Starting in November 2016, Fedora Infrastructure began to use Kerberos authentication for some services, starting with koji (the Fedora build system). On December 12th 2016, the koji buildsystem will be switched to only allow Kerberos authentication, and disallow the old SSL cert authentication. In March 2021 the authentication backend FAS was replaced with Accounts


== Supported Services ==
== Supported Services ==
Line 13: Line 13:
== Technical Details ==
== Technical Details ==


Fedora Infrastructure still uses the Fedora Account System (fas), but now it syncs some account information to a pair of FreeIPA servers. Those servers are made available via a web proxy to Fedora contributors. Also, via the ipsilon identity management server and GSSAPI we are able to use kerberos tickets to authenticate users to any services that use ipsilon.  
Fedora Infrastructure is using Fedora Accounts (was FAS before), but now it syncs some account information to a pair of FreeIPA servers. Those servers are made available via a web proxy to Fedora contributors. Also, via the [https://pagure.io/ipsilon ipsilon] identity management server and GSSAPI we are able to use Kerberos tickets to authenticate users to any services that use ipsilon.


== How to use kerberos auth with Fedora Infrastructure ==
== How to use kerberos auth with Fedora Infrastructure ==


=== Command line ===
=== Command line ===
<ul>
<li>Install the <code>krb5-workstation</code> package (<code>sudo dnf install krb5-workstation</code>) if you do not have <code>kinit</code> command available.</li>
<li>If you are using two-factor authentication (OTP) you will also need the <code>krb5-pkinit</code> package.
<li>You can check the Kerberos main configuration file <code>/etc/krb5.conf</code> that it contains stanza <code>includedir /etc/krb5.conf.d/</code> to sources modules from the directory <code>/etc/krb5.conf.d/</code>. It should be something as following
<blockquote><pre>
includedir /etc/krb5.conf.d/


* kinit <yourfasloginname>@FEDORAPROJECT.ORG
[logging]
* enter your FAS password
default = FILE:/var/log/krb5libs.log
* You should now be able to authenticate to supported services
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log


* Tickets are valid for 24 hours and can be renewed for 1 week. You can renew a existing ticket with kinit -R <yourfasloginname>@FEDORAPROJECT.ORG
[libdefaults]
  dns_lookup_realm = false
  ticket_lifetime = 24h
  renew_lifetime = 7d
  forwardable = true
  rdns = false
  default_ccache_name = KEYRING:persistent:%{uid}
  dns_canonicalize_hostname = false
 
[realms]
 
[domain_realm]</pre></blockquote></li>
 
<li>Create the file <code>/etc/krb5.conf.d/fedoraproject_org</code> with the following content (or install the <code>fedora-packager-kerberos</code> package)
<blockquote><pre>
[realms]
FEDORAPROJECT.ORG = {
        kdc = https://id.fedoraproject.org/KdcProxy
        pkinit_anchors = FILE:/etc/pki/ipa/fedoraproject_ipa_ca.crt
}
[domain_realm]
.fedoraproject.org = FEDORAPROJECT.ORG
fedoraproject.org = FEDORAPROJECT.ORG
</pre></blockquote>
{{admon/note|Note|See section '''Debugging problems''' to double sure the configuration}}
 
<li>With <code>fedora-packager-kerberos</code> package you can run <code>fkinit</code> or <code>fkinit -u yourusername</code>. Alternatively you can do the following steps:</li>
<li><code>kinit <yourfasloginname>@FEDORAPROJECT.ORG</code></li>
{{admon/note|Note|Yes, upper-case FEDORAPROJECT.ORG — that's the convention for Kerberos.}}
You can set <code>default_realm = FEDORAPROJECT.ORG</code> at <code>libdefaults</code> section to avoid each typing <code>@FEDORAPROJECT.ORG</code>
</li>
<li>Enter your FAS password</li>
{{admon/note|Note|You should now be able to authenticate to supported services (koji and lookaside upload)<br>
Tickets are valid for 24 hours and can be renewed for 1 week.<br>
You can renew a existing ticket with <code>kinit -R <username>@FEDORAPROJECT.ORG</code>}}
 
<li> If you are using two-factor authentication (AKA OTP) you need to do init your kerberos ticket with
<blockquote><pre>
kinit -n @FEDORAPROJECT.ORG -c FILE:${HOME}/armor.ccache
kinit -T FILE:${HOME}/armor.ccache <username>@FEDORAPROJECT.ORG
</pre></blockquote>
When prompted for <code>Enter OTP Token Value:</code>, you should actually enter password+OTP.
More information on [https://docs.fedoraproject.org/en-US/fedora-accounts/user/#pkinit Fedora Accounts documentation].
</li>
 
 
 
<li>Store your FAS username (all lower case) in <code>~/.fedora.upn</code> (This is not actually needed for Kerberos but for other tools that used the Fedora client certificate to determine the FAS username)</li>
{{admon/note|Note|You need to do this regularly whenever fedpkg or koji authentication fail. There is no support for these tools to prompt you automatically when the ticket expired.}}
</ul>


=== GUI (gnome/workstation) ===
=== GUI (gnome/workstation) ===


* Open settings -> Online Accounts -> Click on the + to add an account -> Click on "Other" at the end of the list -> Click on "Enterprise login (kerberos)"
* Open settings -> Online Accounts -> Click on the + to add an account -> Click on "Other" at the end of the list -> Click on "Enterprise login (kerberos)"
* Enter FEDORAPROJECT.ORG for the domain
* Enter your FAS name @FEDORAPROJECT.ORG for the principal, e.g. fas@FEDORAPROJECT.ORG.
* Enter your FAS name in the name field.  
* Enter your password when prompted.  
* Enter your password when prompted.  


Line 52: Line 107:
<pre>
<pre>
{
{
"AuthServerWhitelist": "*.fedoraproject.org"
"AuthServerWhitelist": "*.fedoraproject.org",
"AuthNegotiateDelegateWhitelist": "*.fedoraproject.org"
}
}
</pre>
</pre>
For Mac Chrome/Chromium, you need to enter command
<pre>
sudo defaults write /Library/Preferences/com.google.Chrome.plist AuthServerWhitelist '.fedoraproject.org'
sudo defaults write /Library/Preferences/com.google.Chrome.plist AuthNegotiateDelegateWhitelist '.fedoraproject.org'
</pre>
{{admon/note|Note|For Chrome/Chromium > 86 the policy parameter names are `AuthServerAllowlist` and `AuthNegotiateDelegateAllowlist`.}}


== Questions and Answers ==
== Questions and Answers ==


'''Question:''' Is there any particular format for username / domain I need to use?
'''Is there any particular format for username / domain I need to use?'''


'''Answer:''' Yes. Your username should be all lower case, and the domain name should be all UPPER CASE. ie, username@FEDORAPROJECT.ORG
: Yes. Your username should be all lower case, and the domain name should be all UPPER CASE. ie, <code>username@FEDORAPROJECT.ORG</code>


'''Question:''' I have 2 (or more) domains I login to with kerberos and koji only seems to work when it's the last one I add, whats going on? (The error it will show is "Kerberos authentication failed: Server not found in Kerberos database (-1765328377)")
'''How can I see how long my ticket(s) are valid for?'''


'''Answer:''' koji currently requires this, but there's a patch coming to fix it. In the mean time you can use 'kswitch' to switch which is primary.
: use <code>klist -A</code>


'''Question:''' How can I see how long my ticket(s) are valid for?
'''I don't seem to be logged into the koji web interface after this, why not?'''


'''Answer:''' use 'klist -A'
: Logging into the koji web interface doesn't really get you much of anything, but you can get a valid ticket and then go to https://koji.fedoraproject.org/koji/login in your browser and you will be logged in.


'''Question:''' I don't seem to be logged into the koji web interface after this, why not?
'''When I run kinit I get <code>Client 'yourname@FEDORAPROJECT.ORG' not found in Kerberos database while getting initial credentials</code>'''


'''Answer:''' Logging into the koji web interface doesn't really get you much of anything, but we are working on a patch to get this working down the road.
: Login to [https://accounts.fedoraproject.org/ Fedora Accounts] and then retry. Your information needs to be synced from Fedora Accounts to the IPA server. Logging into FAS does so.


'''Question:''' When I run kinit I get: Client 'yourname@FEDORAPROJECT.ORG' not found in Kerberos database while getting initial credentials
'''I did that (logged into Fedora Accounts) in the last answer, and it didn't help, I still get the same error message. What's going on?'''


'''Answer:''' Login to fas ( https://admin.fedoraproject.org/accounts ) and then retry. Your information needs to be synced from fas to the ipa server. Logging into fas does so.
: For some small number of users there may be some issue with syncing information from Fedora Accounts->ipa. If this happens to you, please file an infrastructure ticket or talk with us on {{fpchat|#fedora-admin}} and we can manually fix things.  


'''Question:''' I did that (logged into FAS) in the last answer, and it didn't help, I still get the same error message. Whats going on?
'''It's not working for me, how can I gather debugging information?'''


'''Answer:''' For some small number of users there may be some issue with syncing information from fas->ipa. If this happens to you, please file an infrastructure ticket or talk with us on #fedora-admin and we can manually fix things.  
: Run the command with <code>KRB5_TRACE=/dev/stdout</code> in front of it and it should print a lot of debugging information.  


'''Question:''' It's not working for me, how can I gather debugging information?
'''koji and/or fedpkg don't seem to be working for me.'''


'''Answer:''' Run the command with KRB5_TRACE=/dev/stdout in front of it and it should print a lot of debugging information.  
: Make sure you have upgraded to the versions listed above and also make sure you fold changes from <code>/etc/koji.conf.rpmnew</code> (if you ever modified your <code>/etc/koji.conf</code>) and your <code>~/.koji/config</code>. Note that in normal operation you can just use the stock <code>/etc/koji.conf</code> from the koji package and there is no need for a <code>~/.koji/config</code>. If it still doesn't work also check <code>/etc/rpkg/fedpkg.conf.rpmnew</code> and update your old config if it exists.


'''Question:''' koji and/or fedpkg don't seem to be working for me.
'''Where should I report problems or get help? '''


'''Answer:''' Make sure you have upgraded to the versions listed above and also make sure you fold changes from /etc/koji.conf.rpmnew (if you ever modified your /etc/koji.conf) and your ~/.koji/config. Note that in normal operation you can just use the stock /etc/koji.conf from the koji package and there is no need for a ~/.koji/config.
: {{fpchat|#fedora-admin}} on IRC or [https://pagure.io/fedora-infrastructure/issues file a fedora-infrastructure ticket] and we will try and assist you!


'''Question:''' Where should I report problems or get help?
'''I get <code>kinit: Cannot find KDC for realm "FEDORAPROJECT.ORG" while getting initial credentials</code>'''


'''Answer:''' #fedora-admin on IRC or file a fedora-infrastructure ticket and we will try and assist you!
: Try adding "includedir /etc/krb5.conf.d/" as the top line in the /etc/krb5.conf file


== Debugging problems ==
'''I get <code>kinit: KDC can't fulfill requested option while renewing credentials</code>'''


There is [https://github.com/puiterwijk/KrbDebug/blob/master/KrbDebug a script that can check you configuration] and tell you if there is any common problem. Just clone the repository and run the script.
: When getting the initial ticket, use kinit -r <secs> to get a renewable ticket. Or add "renew_lifetime = <lifetime>", where <lifetime> is for example 7d, to the [libdefaults] section of /etc/krb5.conf.


<pre>
'''After entering my password I get: <code>Password incorrect while getting initial credentials</code>'''
$ git clone https://github.com/puiterwijk/KrbDebug.git
 
$ cd KrbDebug/
: Please make sure you enter your correct password. If you are sure you entered the correct password, but it doesn't work, please visit the [https://accounts.fedoraproject.org/ Fedora Accounts] and log in and change your password. '''NOTE: Resetting your password does *NOT* update the Kerberos password.''' If you forgot your password, first use the password reset feature and then log in again to Fedora Accounts and use the change password link.
$ ./KrbDebug
 
</pre>
'''Using Koji, I get an error <code>ImportError: Please install python-krbV to use kerberos</code>'''
 
: Please make sure that in /etc/krb5.conf, under [libdefaults], the option "rdns = false" is set. Note that this might break some non-Fedora krb5 services, but this is required to make GSSAPI work against Fedora services.
 
'''I'm on a windows machine and I get a pop up window asking me for login and password and no matter what I enter there it doesn't work. Whats going on?'''
 
: This is windows seeing that you have a kerberos ticket and trying to authenticate as if it was a active directory setup. This will not work at all. When you get a windows authentication pop up, press 'cancel' and you should instead see the fedoraproject login/pass in the web browser page, enter your information here and you should authenticate.


== Extra info for Infrastructure people ==
== Extra info for Infrastructure people ==


To access nagios, you need to use Kerberos as well.
To access nagios, you need to use Kerberos as well.
This will require you to change /etc/krb5.conf, and under [libdefaults] add or set "rdns = false".
* This will require you to change /etc/krb5.conf, and under [libdefaults] add or set "rdns = false" and "dns_canonicalize_hostname = false".

Latest revision as of 18:29, 11 February 2023

Infrastructure Kerberos authentication

Background

Starting in November 2016, Fedora Infrastructure began to use Kerberos authentication for some services, starting with koji (the Fedora build system). On December 12th 2016, the koji buildsystem will be switched to only allow Kerberos authentication, and disallow the old SSL cert authentication. In March 2021 the authentication backend FAS was replaced with Accounts

Supported Services

  • koji
  • All Fedora Infrastructure ipsilon using applications via GSSAPI

Technical Details

Fedora Infrastructure is using Fedora Accounts (was FAS before), but now it syncs some account information to a pair of FreeIPA servers. Those servers are made available via a web proxy to Fedora contributors. Also, via the ipsilon identity management server and GSSAPI we are able to use Kerberos tickets to authenticate users to any services that use ipsilon.

How to use kerberos auth with Fedora Infrastructure

Command line

  • Install the krb5-workstation package (sudo dnf install krb5-workstation) if you do not have kinit command available.
  • If you are using two-factor authentication (OTP) you will also need the krb5-pkinit package.
  • You can check the Kerberos main configuration file /etc/krb5.conf that it contains stanza includedir /etc/krb5.conf.d/ to sources modules from the directory /etc/krb5.conf.d/. It should be something as following
    includedir /etc/krb5.conf.d/
    
    [logging]
     default = FILE:/var/log/krb5libs.log
     kdc = FILE:/var/log/krb5kdc.log
     admin_server = FILE:/var/log/kadmind.log
    
    [libdefaults]
      dns_lookup_realm = false
      ticket_lifetime = 24h
      renew_lifetime = 7d
      forwardable = true
      rdns = false
      default_ccache_name = KEYRING:persistent:%{uid}
      dns_canonicalize_hostname = false
    
    [realms]
    
    [domain_realm]
  • Create the file /etc/krb5.conf.d/fedoraproject_org with the following content (or install the fedora-packager-kerberos package)
    [realms]
     FEDORAPROJECT.ORG = {
            kdc = https://id.fedoraproject.org/KdcProxy
            pkinit_anchors = FILE:/etc/pki/ipa/fedoraproject_ipa_ca.crt
     }
    [domain_realm]
     .fedoraproject.org = FEDORAPROJECT.ORG
     fedoraproject.org = FEDORAPROJECT.ORG
    
    Note
    See section Debugging problems to double sure the configuration
  • With fedora-packager-kerberos package you can run fkinit or fkinit -u yourusername. Alternatively you can do the following steps:
  • kinit <yourfasloginname>@FEDORAPROJECT.ORG
  • Note
    Yes, upper-case FEDORAPROJECT.ORG — that's the convention for Kerberos.

    You can set default_realm = FEDORAPROJECT.ORG at libdefaults section to avoid each typing @FEDORAPROJECT.ORG

  • Enter your FAS password
  • Note
    You should now be able to authenticate to supported services (koji and lookaside upload)

    Tickets are valid for 24 hours and can be renewed for 1 week.

    You can renew a existing ticket with kinit -R <username>@FEDORAPROJECT.ORG
  • If you are using two-factor authentication (AKA OTP) you need to do init your kerberos ticket with
    kinit -n @FEDORAPROJECT.ORG -c FILE:${HOME}/armor.ccache
    kinit -T FILE:${HOME}/armor.ccache <username>@FEDORAPROJECT.ORG
    

    When prompted for Enter OTP Token Value:, you should actually enter password+OTP. More information on Fedora Accounts documentation.

  • Store your FAS username (all lower case) in ~/.fedora.upn (This is not actually needed for Kerberos but for other tools that used the Fedora client certificate to determine the FAS username)
  • Note
    You need to do this regularly whenever fedpkg or koji authentication fail. There is no support for these tools to prompt you automatically when the ticket expired.

GUI (gnome/workstation)

  • Open settings -> Online Accounts -> Click on the + to add an account -> Click on "Other" at the end of the list -> Click on "Enterprise login (kerberos)"
  • Enter your FAS name @FEDORAPROJECT.ORG for the principal, e.g. fas@FEDORAPROJECT.ORG.
  • Enter your password when prompted.

Firefox

If you have Firefox 49 or higher and not tweaked any special configuration, you are done. If you have a lower version or want to check:

  • Go to about:config
  • Click the "I accept the risk" button
  • Search for "network.negotiate-auth.trusted-uris"
  • Double-click this option if it's not set to "https://", and set it to "https://"

Chromium/Chrome

For Chrome/Chromium, you need to create a policy file.

  • For Chromium, the directory to put this in is /etc/chromium/policies/managed/ .
  • For Chrome, the directory is /etc/opt/chrome/policies/managed/ (you might have to create this yourself).

In that, create a file (e.g. fedora_kerberos.json), with contents:

{
	"AuthServerWhitelist": "*.fedoraproject.org",
	"AuthNegotiateDelegateWhitelist": "*.fedoraproject.org"
}


For Mac Chrome/Chromium, you need to enter command


	sudo defaults write /Library/Preferences/com.google.Chrome.plist AuthServerWhitelist '.fedoraproject.org'
	sudo defaults write /Library/Preferences/com.google.Chrome.plist AuthNegotiateDelegateWhitelist '.fedoraproject.org'

Note
For Chrome/Chromium > 86 the policy parameter names are AuthServerAllowlist and AuthNegotiateDelegateAllowlist.

Questions and Answers

Is there any particular format for username / domain I need to use?

Yes. Your username should be all lower case, and the domain name should be all UPPER CASE. ie, username@FEDORAPROJECT.ORG

How can I see how long my ticket(s) are valid for?

use klist -A

I don't seem to be logged into the koji web interface after this, why not?

Logging into the koji web interface doesn't really get you much of anything, but you can get a valid ticket and then go to https://koji.fedoraproject.org/koji/login in your browser and you will be logged in.

When I run kinit I get Client 'yourname@FEDORAPROJECT.ORG' not found in Kerberos database while getting initial credentials

Login to Fedora Accounts and then retry. Your information needs to be synced from Fedora Accounts to the IPA server. Logging into FAS does so.

I did that (logged into Fedora Accounts) in the last answer, and it didn't help, I still get the same error message. What's going on?

For some small number of users there may be some issue with syncing information from Fedora Accounts->ipa. If this happens to you, please file an infrastructure ticket or talk with us on #fedora-admin[?] and we can manually fix things.

It's not working for me, how can I gather debugging information?

Run the command with KRB5_TRACE=/dev/stdout in front of it and it should print a lot of debugging information.

koji and/or fedpkg don't seem to be working for me.

Make sure you have upgraded to the versions listed above and also make sure you fold changes from /etc/koji.conf.rpmnew (if you ever modified your /etc/koji.conf) and your ~/.koji/config. Note that in normal operation you can just use the stock /etc/koji.conf from the koji package and there is no need for a ~/.koji/config. If it still doesn't work also check /etc/rpkg/fedpkg.conf.rpmnew and update your old config if it exists.

Where should I report problems or get help?

#fedora-admin[?] on IRC or file a fedora-infrastructure ticket and we will try and assist you!

I get kinit: Cannot find KDC for realm "FEDORAPROJECT.ORG" while getting initial credentials

Try adding "includedir /etc/krb5.conf.d/" as the top line in the /etc/krb5.conf file

I get kinit: KDC can't fulfill requested option while renewing credentials

When getting the initial ticket, use kinit -r <secs> to get a renewable ticket. Or add "renew_lifetime = <lifetime>", where <lifetime> is for example 7d, to the [libdefaults] section of /etc/krb5.conf.

After entering my password I get: Password incorrect while getting initial credentials

Please make sure you enter your correct password. If you are sure you entered the correct password, but it doesn't work, please visit the Fedora Accounts and log in and change your password. NOTE: Resetting your password does *NOT* update the Kerberos password. If you forgot your password, first use the password reset feature and then log in again to Fedora Accounts and use the change password link.

Using Koji, I get an error ImportError: Please install python-krbV to use kerberos

Please make sure that in /etc/krb5.conf, under [libdefaults], the option "rdns = false" is set. Note that this might break some non-Fedora krb5 services, but this is required to make GSSAPI work against Fedora services.

I'm on a windows machine and I get a pop up window asking me for login and password and no matter what I enter there it doesn't work. Whats going on?

This is windows seeing that you have a kerberos ticket and trying to authenticate as if it was a active directory setup. This will not work at all. When you get a windows authentication pop up, press 'cancel' and you should instead see the fedoraproject login/pass in the web browser page, enter your information here and you should authenticate.

Extra info for Infrastructure people

To access nagios, you need to use Kerberos as well.

  • This will require you to change /etc/krb5.conf, and under [libdefaults] add or set "rdns = false" and "dns_canonicalize_hostname = false".