{"id":1233,"date":"2021-01-09T18:02:13","date_gmt":"2021-01-09T18:02:13","guid":{"rendered":"https:\/\/www.nicktailor.com\/?p=1233"},"modified":"2026-02-15T11:01:00","modified_gmt":"2026-02-15T11:01:00","slug":"how-to-deploy-open-akcauthorized-key-chain","status":"publish","type":"post","link":"https:\/\/nicktailor.com\/tech-blog\/how-to-deploy-open-akcauthorized-key-chain\/","title":{"rendered":"How to deploy Open-AKC(Authorized Key Chain)"},"content":{"rendered":"<p><!-- OpenAKC Blog Post - WordPress HTML --><!-- Paste this into your WordPress editor in \"Text\/Code\" mode --><\/p>\n<div style=\"max-width: 900px; margin: 0 auto; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; line-height: 1.8; color: #1a1a2e;\">\n<h2 style=\"color: #302b63; border-bottom: 3px solid #6c63ff; padding-bottom: 8px; font-size: 24px;\">What is OpenAKC?<\/h2>\n<p>OpenAKC is an open-source authentication gateway, dynamic SSH key manager, and privileged access management tool for Linux. It completely rethinks how SSH trust is managed across an estate.<\/p>\n<p><strong>As a centralised trust management platform,<\/strong> OpenAKC allows the <code>authorized_keys<\/code> mechanism on hosts to be completely disabled. SSH trust across your entire estate can be managed centrally by systems administration or information security staff, with rich control and monitoring features. Users and application developers can no longer add or remove trust relationships on their own, effectively enforcing any whitelist or approval process you want.<\/p>\n<p><strong>As a practical jump host solution,<\/strong> OpenAKC replaces the dubious mechanisms many of us have seen in production: shared private keys, dodgy sudo wrappers, and insecure AD-to-SSH bridges. It acts as a drop-in upgrade by migrating users to personal keys with self-service key management, enforcing passphrases, and providing full audit trails.<\/p>\n<p><!-- The Problems Box --><\/p>\n<div style=\"background: #fef3c7; border-left: 5px solid #f59e0b; border-radius: 0 8px 8px 0; padding: 25px 30px; margin: 30px 0;\">\n<h3 style=\"color: #92400e; margin-top: 0; font-size: 18px;\">\ud83e\udd14 The Problems Everyone Thinks About But Never Solves<\/h3>\n<ul style=\"margin: 0; padding-left: 20px; color: #78350f;\">\n<li style=\"margin-bottom: 8px;\"><strong>Root access auditing<\/strong> \u2013 How do you give admins root while logging every keystroke per user?<\/li>\n<li style=\"margin-bottom: 8px;\"><strong>IAM without domain-joining<\/strong> \u2013 Joining every server to AD exposes user accounts, group memberships, and home directories to attackers who gain access.<\/li>\n<li style=\"margin-bottom: 8px;\"><strong>Uncontrolled root<\/strong> \u2013 Once someone sudos to root, there is zero control on what that root user can do. Multiple concurrent root sessions make logs useless.<\/li>\n<li style=\"margin-bottom: 8px;\"><strong>Limiting root capabilities<\/strong> \u2013 What if you could give admins root but prevent them from touching files you deem too sensitive?<\/li>\n<li style=\"margin-bottom: 8px;\"><strong>Eliminating password auth entirely<\/strong> \u2013 No more user\/pass login vectors across the estate.<\/li>\n<li style=\"margin-bottom: 0;\"><strong>Faster than LDAP\/SSSD<\/strong> \u2013 Deploy this across multiple distros faster than traditional directory integration.<\/li>\n<\/ul>\n<\/div>\n<p style=\"background: #ecfdf5; border: 2px solid #10b981; border-radius: 8px; padding: 20px 25px; font-size: 16px; color: #065f46; text-align: center; font-weight: 600;\">\u2705 OpenAKC solves all of these. This architecture takes a few steps to understand, but from a security standpoint it trumps anything most organisations are currently running.<\/p>\n<p><!-- Architecture Section --><\/p>\n<h2 style=\"color: #302b63; border-bottom: 3px solid #6c63ff; padding-bottom: 8px; font-size: 24px;\">Architecture Options<\/h2>\n<p>OpenAKC supports two deployment architectures depending on the size of your team and estate. Both can be scaled out for redundancy.<\/p>\n<div style=\"text-align: center; margin: 25px 0;\"><img decoding=\"async\" style=\"max-width: 100%; border-radius: 8px; border: 1px solid #e2e8f0;\" src=\"https:\/\/mail.fsck.co.uk\/assets\/OpenAKC_Home.png\" alt=\"OpenAKC Architecture Overview\" \/><\/p>\n<p style=\"font-size: 12px; color: #64748b; margin-top: 8px;\">OpenAKC Architecture Overview (source: <a style=\"color: #6c63ff;\" href=\"https:\/\/netlore.github.io\/OpenAKC\/\" target=\"_blank\" rel=\"noopener\">netlore.github.io\/OpenAKC<\/a>)<\/p>\n<\/div>\n<p><!-- Architecture Cards --><\/p>\n<div style=\"display: flex; gap: 20px; flex-wrap: wrap; margin: 25px 0;\"><!-- Combined Card --><\/p>\n<div style=\"flex: 1; min-width: 280px; border: 2px solid #6c63ff; border-radius: 12px; overflow: hidden;\">\n<div style=\"background: #6c63ff; padding: 15px 20px;\">\n<h3 style=\"color: #fff; margin: 0; font-size: 18px;\">\ud83c\udfe0 Combined Architecture<\/h3>\n<p style=\"color: #c7c4ff; margin: 5px 0 0 0; font-size: 13px;\">Jump Host + Security Server on one box<\/p>\n<\/div>\n<div style=\"padding: 20px;\">\n<div style=\"margin-bottom: 15px;\"><img decoding=\"async\" style=\"width: 100%; border-radius: 6px;\" src=\"https:\/\/nicktailor.com\/tech-blog\/wp-content\/uploads\/2026\/02\/openakc-combined-diagram.jpg\" alt=\"Combined Bastion Host &amp; Security Server Diagram\" \/><\/div>\n<p style=\"font-size: 14px; margin-top: 0;\"><strong>Best for:<\/strong> Small teams where the admin team also manages security.<\/p>\n<div style=\"margin-top: 12px;\">\n<p style=\"font-size: 13px; margin: 0;\">Single point of management with role rules and diagnostics all in one place. Only a couple of client packages to deploy and clients are brought into trust immediately. In today&#8217;s evolving threat landscape, the ability to control what even root can do is no longer optional. Military and financial environments demand this level of granular access control, and this architecture delivers it with minimal overhead.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!-- Segregated Card --><\/p>\n<div style=\"flex: 1; min-width: 280px; border: 2px solid #302b63; border-radius: 12px; overflow: hidden;\">\n<div style=\"background: #302b63; padding: 15px 20px;\">\n<h3 style=\"color: #fff; margin: 0; font-size: 18px;\">\ud83c\udfe2 Segregated Architecture<\/h3>\n<p style=\"color: #a8a8d0; margin: 5px 0 0 0; font-size: 13px;\">Separate Jump Hosts + Security Server<\/p>\n<\/div>\n<div style=\"padding: 20px;\"><img decoding=\"async\" style=\"width: 100%; border-radius: 6px; margin-bottom: 15px; background: #fff;\" src=\"https:\/\/raw.githubusercontent.com\/netlore\/OpenAKC\/master\/docs\/resources\/OpenAKC%20Separate%20Bastion%20Host%20%26%20Security%20Server%20Diagram.svg\" alt=\"Separate Bastion Host &amp; Security Server Diagram\" \/><\/p>\n<p style=\"font-size: 14px; margin-top: 0;\"><strong>Best for:<\/strong> Large teams with multiple groups and tighter security requirements.<\/p>\n<div style=\"margin-top: 12px;\">\n<p style=\"font-size: 13px; margin: 0;\">Security server and jump hosts are fully separated, meaning client machines are never joined to the domain. Attackers who compromise a client machine cannot query AD for users, groups, or any organisational structure. Jump hosts are disposable and easily redeployed. For military and financial institutions where root capability control, full session audit trails, and zero-trust principles are regulatory requirements, this segregated model is the gold standard.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p><!-- Special Features --><\/p>\n<div style=\"background: #ede9fe; border-radius: 10px; padding: 25px 30px; margin: 30px 0;\">\n<h3 style=\"color: #5b21b6; margin-top: 0; font-size: 18px;\">\u2728 Special Features<\/h3>\n<div style=\"display: flex; flex-wrap: wrap; gap: 12px;\"><span style=\"background: #fff; color: #5b21b6; padding: 8px 16px; border-radius: 20px; font-size: 13px; font-weight: 600;\">Session Recording<\/span> <span style=\"background: #fff; color: #5b21b6; padding: 8px 16px; border-radius: 20px; font-size: 13px; font-weight: 600;\">Incident Logging (ServiceNow, Jira)<\/span> <span style=\"background: #fff; color: #5b21b6; padding: 8px 16px; border-radius: 20px; font-size: 13px; font-weight: 600;\">Linux Capabilities Control<\/span> <span style=\"background: #fff; color: #5b21b6; padding: 8px 16px; border-radius: 20px; font-size: 13px; font-weight: 600;\">Time-Based Access Rules<\/span> <span style=\"background: #fff; color: #5b21b6; padding: 8px 16px; border-radius: 20px; font-size: 13px; font-weight: 600;\">SCP File Transfer Logging<\/span> <span style=\"background: #fff; color: #5b21b6; padding: 8px 16px; border-radius: 20px; font-size: 13px; font-weight: 600;\">Immutable File Protection<\/span> <span style=\"background: #fff; color: #5b21b6; padding: 8px 16px; border-radius: 20px; font-size: 13px; font-weight: 600;\">Shell Override \/ Deny<\/span> <span style=\"background: #fff; color: #5b21b6; padding: 8px 16px; border-radius: 20px; font-size: 13px; font-weight: 600;\">Command Whitelisting<\/span> <span style=\"background: #fff; color: #5b21b6; padding: 8px 16px; border-radius: 20px; font-size: 13px; font-weight: 600;\">Self-Service Key Management<\/span><\/div>\n<\/div>\n<p><!-- ============================================================ --><!-- PRACTICAL DEPLOYMENT GUIDE --><!-- ============================================================ --><\/p>\n<h2 style=\"color: #302b63; border-bottom: 3px solid #6c63ff; padding-bottom: 8px; font-size: 24px;\">Practical Deployment Guide<\/h2>\n<p>This walkthrough covers the <strong>segregated architecture<\/strong> (separate jump host and security server). We are deploying on CentOS 7.<\/p>\n<div style=\"background: #fef2f2; border-left: 5px solid #ef4444; border-radius: 0 8px 8px 0; padding: 18px 25px; margin: 20px 0;\">\n<p style=\"margin: 0; color: #991b1b; font-size: 14px;\"><strong>\u26a0\ufe0f Prerequisites:<\/strong> Two CentOS 7 machines deployed. Active Directory configured with a user in a Linux group. Disable <code>firewalld<\/code> and <code>selinux<\/code> on your machines before proceeding.<\/p>\n<p><strong>\u26a0\ufe0f The original repo source code does not support newer OS&#8217;s. I have updated all the code to work with newer versions and written automations to deploy it for any environment<\/strong><\/p>\n<\/div>\n<p><!-- ================================ --><!-- PHASE 1 --><!-- ================================ --><\/p>\n<div style=\"background: #f8fafc; border: 2px solid #e2e8f0; border-radius: 12px; margin: 30px 0; overflow: hidden;\">\n<div style=\"background: linear-gradient(135deg, #302b63, #6c63ff); padding: 18px 25px;\">\n<h3 style=\"color: #fff; margin: 0; font-size: 20px;\">Phase 1 \u2014 Security Server Setup<\/h3>\n<p style=\"color: #c7c4ff; margin: 5px 0 0 0; font-size: 13px;\">Join to AD, install OpenAKC server, register your admin key<\/p>\n<\/div>\n<div style=\"padding: 25px;\"><!-- Step 1.1 --><\/p>\n<div style=\"display: flex; gap: 15px; margin-bottom: 25px;\">\n<div style=\"flex-shrink: 0; width: 36px; height: 36px; background: #6c63ff; color: #fff; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-weight: bold; font-size: 16px;\">1<\/div>\n<div style=\"flex: 1;\">\n<h4 style=\"margin: 4px 0 10px 0; color: #1e293b; font-size: 16px;\">Install AD\/Kerberos Packages<\/h4>\n<pre style=\"background: #1e293b; color: #e2e8f0; padding: 16px 20px; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.6; margin: 0;\"><code>yum install oddjob realmd samba samba-common oddjob-mkhomedir sssd adcli<\/code><\/pre>\n<\/div>\n<\/div>\n<p><!-- Step 1.2 --><\/p>\n<div style=\"display: flex; gap: 15px; margin-bottom: 25px;\">\n<div style=\"flex-shrink: 0; width: 36px; height: 36px; background: #6c63ff; color: #fff; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-weight: bold; font-size: 16px;\">2<\/div>\n<div style=\"flex: 1;\">\n<h4 style=\"margin: 4px 0 10px 0; color: #1e293b; font-size: 16px;\">Point DNS at Active Directory<\/h4>\n<p style=\"margin: 0 0 10px 0; font-size: 14px; color: #475569;\">Edit <code>\/etc\/resolv.conf<\/code> to include your AD server as a nameserver so it can resolve the necessary DNS records.<\/p>\n<pre style=\"background: #1e293b; color: #e2e8f0; padding: 16px 20px; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.6; margin: 0;\"><code>vi \/etc\/resolv.conf\n\nnameserver 192.168.1.300\nnameserver 192.168.1.301<\/code><\/pre>\n<\/div>\n<\/div>\n<p><!-- Step 1.3 --><\/p>\n<div style=\"display: flex; gap: 15px; margin-bottom: 25px;\">\n<div style=\"flex-shrink: 0; width: 36px; height: 36px; background: #6c63ff; color: #fff; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-weight: bold; font-size: 16px;\">3<\/div>\n<div style=\"flex: 1;\">\n<h4 style=\"margin: 4px 0 10px 0; color: #1e293b; font-size: 16px;\">Discover and Join the Realm<\/h4>\n<p style=\"margin: 0 0 10px 0; font-size: 14px; color: #475569;\">The realm name is <strong>case sensitive<\/strong>.<\/p>\n<pre style=\"background: #1e293b; color: #e2e8f0; padding: 16px 20px; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.6; margin: 0;\"><code># Discover the realm\nrealm discover AD.NICKTAILOR.COM\n\n# Join the domain (enter AD admin password when prompted)\nrealm join --user=admin ad.nicktailor.com\n\n# Verify it worked\nid nicktailor@ad.nicktailor.com<\/code><\/pre>\n<div style=\"background: #f0f9ff; border-left: 4px solid #3b82f6; padding: 12px 16px; border-radius: 0 6px 6px 0; margin-top: 10px;\">\n<p style=\"margin: 0; font-size: 13px; color: #1e40af;\"><strong>Tip:<\/strong> You can set <code>use_fully_qualified_names = False<\/code> in <code>\/etc\/sssd\/sssd.conf<\/code> so you don&#8217;t need <code>@ad.nicktailor.com<\/code> when running <code>id<\/code>.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!-- Step 1.4 --><\/p>\n<div style=\"display: flex; gap: 15px; margin-bottom: 25px;\">\n<div style=\"flex-shrink: 0; width: 36px; height: 36px; background: #6c63ff; color: #fff; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-weight: bold; font-size: 16px;\">4<\/div>\n<div style=\"flex: 1;\">\n<h4 style=\"margin: 4px 0 10px 0; color: #1e293b; font-size: 16px;\">Add User to Sudo<\/h4>\n<pre style=\"background: #1e293b; color: #e2e8f0; padding: 16px 20px; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.6; margin: 0;\"><code>usermod -aG wheel nicktailor<\/code><\/pre>\n<\/div>\n<\/div>\n<p><!-- Step 1.5 --><\/p>\n<div style=\"display: flex; gap: 15px; margin-bottom: 25px;\">\n<div style=\"flex-shrink: 0; width: 36px; height: 36px; background: #6c63ff; color: #fff; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-weight: bold; font-size: 16px;\">5<\/div>\n<div style=\"flex: 1;\">\n<h4 style=\"margin: 4px 0 10px 0; color: #1e293b; font-size: 16px;\">Install OpenAKC Server<\/h4>\n<pre style=\"background: #1e293b; color: #e2e8f0; padding: 16px 20px; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.6; margin: 0;\"><code># Add the OpenAKC repository\ncurl https:\/\/netlore.github.io\/OpenAKC\/repos\/openakc-el7.repo \\\n  | sudo tee \/etc\/yum.repos.d\/openakc.repo\n\n# Install the server package\nyum install openakc-server<\/code><\/pre>\n<\/div>\n<\/div>\n<p><!-- Step 1.6 --><\/p>\n<div style=\"display: flex; gap: 15px; margin-bottom: 25px;\">\n<div style=\"flex-shrink: 0; width: 36px; height: 36px; background: #6c63ff; color: #fff; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-weight: bold; font-size: 16px;\">6<\/div>\n<div style=\"flex: 1;\">\n<h4 style=\"margin: 4px 0 10px 0; color: #1e293b; font-size: 16px;\">Generate and Register Your SSH Key<\/h4>\n<p style=\"margin: 0 0 10px 0; font-size: 14px; color: #475569;\">Switch to your user account, generate an RSA key pair, and register it with OpenAKC.<\/p>\n<pre style=\"background: #1e293b; color: #e2e8f0; padding: 16px 20px; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.6; margin: 0;\"><code># Switch to your user\nsu nicktailor\n\n# Generate SSH keys (use a passphrase!)\nssh-keygen -t rsa\n\n# Register the key with OpenAKC\nopenakc register\n\n# Verify the public key was created\nls -al \/home\/nicktailor\/.openakc\/\n\n# Copy the key to the security server's key store (may need root)\ncp \/home\/nicktailor\/.openakc\/openakc-user-client-nicktailor--pubkey.pem \\\n   \/var\/lib\/openakc\/keys\/<\/code><\/pre>\n<details style=\"margin-top: 12px; background: #f8fafc; border: 1px solid #e2e8f0; border-radius: 8px; padding: 0;\">\n<summary style=\"padding: 12px 16px; cursor: pointer; font-weight: 600; font-size: 14px; color: #334155;\">\ud83d\udccb Example Output (click to expand)<\/summary>\n<pre style=\"background: #1e293b; color: #e2e8f0; padding: 16px 20px; margin: 0; font-size: 12px; line-height: 1.5; border-radius: 0 0 8px 8px;\"><code>[nicktailor@security1 ~]$ ssh-keygen -t rsa\nGenerating public\/private rsa key pair.\nEnter file in which to save the key (\/home\/nicktailor\/.ssh\/id_rsa):\nEnter passphrase (empty for no passphrase):\nEnter same passphrase again:\nYour identification has been saved in \/home\/nicktailor\/.ssh\/id_rsa.\nYour public key has been saved in \/home\/nicktailor\/.ssh\/id_rsa.pub.\nThe key fingerprint is:\nSHA256:udhNKEp0txzfup7IxhUwNA+VSviWP1mu\/aKPA5vZb3w nicktailor@security1\n\n[nicktailor@security1 ~]$ openakc register\nOpenAKC Copyright (C) 2019-2020 A. James Lewis. Version is 1.0.0~alpha18\n\nPassphrase is requested to ensure you own this key.\nEnter passphrase:\nEscalating to perform API call\nConnected to OpenAKC server. Sending key registration request\nOK: Request processed<\/code><\/pre>\n<\/details>\n<\/div>\n<\/div>\n<p><!-- Step 1.7 --><\/p>\n<div style=\"display: flex; gap: 15px; margin-bottom: 25px;\">\n<div style=\"flex-shrink: 0; width: 36px; height: 36px; background: #6c63ff; color: #fff; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-weight: bold; font-size: 16px;\">7<\/div>\n<div style=\"flex: 1;\">\n<h4 style=\"margin: 4px 0 10px 0; color: #1e293b; font-size: 16px;\">Create Access Roles<\/h4>\n<p style=\"margin: 0 0 10px 0; font-size: 14px; color: #475569;\">Define who can access what, when, and how. This is where OpenAKC really shines.<\/p>\n<pre style=\"background: #1e293b; color: #e2e8f0; padding: 16px 20px; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.6; margin: 0;\"><code># Edit the default root role\nopenakc editrole root@DEFAULT<\/code><\/pre>\n<p style=\"margin: 10px 0; font-size: 14px; color: #475569;\">Add role blocks like these:<\/p>\n<pre style=\"background: #1e293b; color: #e2e8f0; padding: 16px 20px; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.6; margin: 0;\"><code><span style=\"color: #7dd3fc;\">## Per-user rule<\/span>\nRULE=2020\/01\/13 19:17,2030\/01\/13 20:17,user,nicktailor\nDAY=any\nTIM=any\nSHELL=\/bin\/bash\nCMD=any\nSCP=s,^\/,\/data\/,g\nCAP=cap_linux_immutable\nREC=yes\nFROM=any\n\n<span style=\"color: #7dd3fc;\">## Group-based rule (for all linuxusers)<\/span>\nRULE=2020\/01\/13 19:17,2030\/01\/13 20:17,group,linuxusers\nDAY=any\nTIM=any\nSHELL=\/bin\/bash\nCMD=any\nSCP=s,^\/,\/data\/,g\nCAP=cap_linux_immutable\nREC=yes\nFROM=any<\/code><\/pre>\n<p><!-- Role field reference --><\/p>\n<div style=\"margin-top: 15px; border: 1px solid #e2e8f0; border-radius: 8px; overflow: hidden;\">\n<table style=\"width: 100%; border-collapse: collapse; font-size: 13px;\">\n<thead>\n<tr style=\"background: #f1f5f9;\">\n<th style=\"text-align: left; padding: 10px 14px; color: #334155; border-bottom: 2px solid #e2e8f0; width: 120px;\">Field<\/th>\n<th style=\"text-align: left; padding: 10px 14px; color: #334155; border-bottom: 2px solid #e2e8f0;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"padding: 8px 14px; border-bottom: 1px solid #f1f5f9; font-family: monospace; color: #6c63ff; font-weight: 600;\">RULE<\/td>\n<td style=\"padding: 8px 14px; border-bottom: 1px solid #f1f5f9;\">Date range, type (user\/group), and identity<\/td>\n<\/tr>\n<tr style=\"background: #fafafa;\">\n<td style=\"padding: 8px 14px; border-bottom: 1px solid #f1f5f9; font-family: monospace; color: #6c63ff; font-weight: 600;\">DAY<\/td>\n<td style=\"padding: 8px 14px; border-bottom: 1px solid #f1f5f9;\">Restrict access to specific days (or <code>any<\/code>)<\/td>\n<\/tr>\n<tr>\n<td style=\"padding: 8px 14px; border-bottom: 1px solid #f1f5f9; font-family: monospace; color: #6c63ff; font-weight: 600;\">TIM<\/td>\n<td style=\"padding: 8px 14px; border-bottom: 1px solid #f1f5f9;\">Restrict access to specific times (or <code>any<\/code>)<\/td>\n<\/tr>\n<tr style=\"background: #fafafa;\">\n<td style=\"padding: 8px 14px; border-bottom: 1px solid #f1f5f9; font-family: monospace; color: #6c63ff; font-weight: 600;\">SHELL<\/td>\n<td style=\"padding: 8px 14px; border-bottom: 1px solid #f1f5f9;\">Override the user&#8217;s shell on login<\/td>\n<\/tr>\n<tr>\n<td style=\"padding: 8px 14px; border-bottom: 1px solid #f1f5f9; font-family: monospace; color: #6c63ff; font-weight: 600;\">CMD<\/td>\n<td style=\"padding: 8px 14px; border-bottom: 1px solid #f1f5f9;\">Whitelist specific commands (or <code>any<\/code>)<\/td>\n<\/tr>\n<tr style=\"background: #fafafa;\">\n<td style=\"padding: 8px 14px; border-bottom: 1px solid #f1f5f9; font-family: monospace; color: #6c63ff; font-weight: 600;\">CAP<\/td>\n<td style=\"padding: 8px 14px; border-bottom: 1px solid #f1f5f9;\">Drop Linux capabilities (e.g. block immutable file edits even for root)<\/td>\n<\/tr>\n<tr>\n<td style=\"padding: 8px 14px; border-bottom: 1px solid #f1f5f9; font-family: monospace; color: #6c63ff; font-weight: 600;\">REC<\/td>\n<td style=\"padding: 8px 14px; border-bottom: 1px solid #f1f5f9;\">Enable session recording (<code>yes<\/code>\/<code>no<\/code>)<\/td>\n<\/tr>\n<tr style=\"background: #fafafa;\">\n<td style=\"padding: 8px 14px; font-family: monospace; color: #6c63ff; font-weight: 600;\">FROM<\/td>\n<td style=\"padding: 8px 14px;\">Restrict source IP\/hostname (or <code>any<\/code>)<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<div style=\"background: #fef3c7; border-left: 4px solid #f59e0b; padding: 12px 16px; border-radius: 0 6px 6px 0; margin-top: 12px;\">\n<p style=\"margin: 0; font-size: 13px; color: #92400e;\"><strong>Key Insight:<\/strong> The <code>CAP=cap_linux_immutable<\/code> setting strips root&#8217;s ability to modify files with the immutable flag. This is just one of many Linux capabilities you can revoke. Your root users literally cannot change protected files, even as root.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!-- Step 1.8 --><\/p>\n<div style=\"display: flex; gap: 15px;\">\n<div style=\"flex-shrink: 0; width: 36px; height: 36px; background: #6c63ff; color: #fff; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-weight: bold; font-size: 16px;\">8<\/div>\n<div style=\"flex: 1;\">\n<h4 style=\"margin: 4px 0 10px 0; color: #1e293b; font-size: 16px;\">Copy Your Key to the Jump Host<\/h4>\n<pre style=\"background: #1e293b; color: #e2e8f0; padding: 16px 20px; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.6; margin: 0;\"><code>ssh-copy-id -i ~\/.ssh\/id_rsa.pub root@192.168.1.200<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p><!-- ================================ --><!-- PHASE 2 --><!-- ================================ --><\/p>\n<div style=\"background: #f8fafc; border: 2px solid #e2e8f0; border-radius: 12px; margin: 30px 0; overflow: hidden;\">\n<div style=\"background: linear-gradient(135deg, #0f766e, #14b8a6); padding: 18px 25px;\">\n<h3 style=\"color: #fff; margin: 0; font-size: 20px;\">Phase 2 \u2014 Jump Host Setup<\/h3>\n<p style=\"color: #99f6e4; margin: 5px 0 0 0; font-size: 13px;\">Join to AD, install OpenAKC tools, point at security server<\/p>\n<\/div>\n<div style=\"padding: 25px;\">\n<div style=\"background: #f0f9ff; border-left: 4px solid #3b82f6; padding: 12px 16px; border-radius: 0 6px 6px 0; margin-bottom: 20px;\">\n<p style=\"margin: 0; font-size: 13px; color: #1e40af;\"><strong>Note:<\/strong> Join this server to the domain first using the same steps from Phase 1 (Steps 1-4), then continue from here.<\/p>\n<\/div>\n<p><!-- Step 2.1 --><\/p>\n<div style=\"display: flex; gap: 15px; margin-bottom: 25px;\">\n<div style=\"flex-shrink: 0; width: 36px; height: 36px; background: #14b8a6; color: #fff; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-weight: bold; font-size: 16px;\">1<\/div>\n<div style=\"flex: 1;\">\n<h4 style=\"margin: 4px 0 10px 0; color: #1e293b; font-size: 16px;\">Install OpenAKC Tools<\/h4>\n<pre style=\"background: #1e293b; color: #e2e8f0; padding: 16px 20px; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.6; margin: 0;\"><code># Add the repository\ncurl https:\/\/netlore.github.io\/OpenAKC\/repos\/openakc-el7.repo \\\n  | sudo tee \/etc\/yum.repos.d\/openakc.repo\n\n# Install the tools package (NOT openakc-server)\nyum install openakc-tools<\/code><\/pre>\n<\/div>\n<\/div>\n<p><!-- Step 2.2 --><\/p>\n<div style=\"display: flex; gap: 15px; margin-bottom: 25px;\">\n<div style=\"flex-shrink: 0; width: 36px; height: 36px; background: #14b8a6; color: #fff; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-weight: bold; font-size: 16px;\">2<\/div>\n<div style=\"flex: 1;\">\n<h4 style=\"margin: 4px 0 10px 0; color: #1e293b; font-size: 16px;\">Configure the Security Server Connection<\/h4>\n<pre style=\"background: #1e293b; color: #e2e8f0; padding: 16px 20px; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.6; margin: 0;\"><code>vi \/etc\/openakc\/openakc.conf\n\nAPIS=\"securityakc1.nicktailor.com\"\nPORT=\"889\"<\/code><\/pre>\n<\/div>\n<\/div>\n<p><!-- Step 2.3 --><\/p>\n<div style=\"display: flex; gap: 15px; margin-bottom: 25px;\">\n<div style=\"flex-shrink: 0; width: 36px; height: 36px; background: #14b8a6; color: #fff; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-weight: bold; font-size: 16px;\">3<\/div>\n<div style=\"flex: 1;\">\n<h4 style=\"margin: 4px 0 10px 0; color: #1e293b; font-size: 16px;\">Login as Your User and Copy Key<\/h4>\n<pre style=\"background: #1e293b; color: #e2e8f0; padding: 16px 20px; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.6; margin: 0;\"><code># Switch to your user (lets SSSD create the home directory)\nsu nicktailor\n\n# Copy your key from the security server\nssh-copy-id -i ~\/.ssh\/id_rsa.pub root@192.168.1.200<\/code><\/pre>\n<\/div>\n<\/div>\n<p><!-- Step 2.4 --><\/p>\n<div style=\"display: flex; gap: 15px;\">\n<div style=\"flex-shrink: 0; width: 36px; height: 36px; background: #14b8a6; color: #fff; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-weight: bold; font-size: 16px;\">4<\/div>\n<div style=\"flex: 1;\">\n<h4 style=\"margin: 4px 0 10px 0; color: #1e293b; font-size: 16px;\">Verify Connectivity<\/h4>\n<pre style=\"background: #1e293b; color: #e2e8f0; padding: 16px 20px; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.6; margin: 0;\"><code>[nicktailor@jumphost1 ~]$ openakc ping\nOpenAKC Copyright (C) 2019-2020 A. James Lewis. Version is 1.0.0~alpha18\n\nConnected to OpenAKC server. Sending Test Run Ping Message\nTest Run Response - OK: Pong! - from server - securityakc1.nicktailor.com<\/code><\/pre>\n<div style=\"background: #ecfdf5; border-left: 4px solid #10b981; padding: 12px 16px; border-radius: 0 6px 6px 0; margin-top: 10px;\">\n<p style=\"margin: 0; font-size: 13px; color: #065f46;\"><strong>\u2705 Success!<\/strong> If you see the Pong response, your jump host is talking to the security server correctly.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p><!-- ================================ --><!-- PHASE 3 --><!-- ================================ --><\/p>\n<div style=\"background: #f8fafc; border: 2px solid #e2e8f0; border-radius: 12px; margin: 30px 0; overflow: hidden;\">\n<div style=\"background: linear-gradient(135deg, #9333ea, #c084fc); padding: 18px 25px;\">\n<h3 style=\"color: #fff; margin: 0; font-size: 20px;\">Phase 3 \u2014 Client Machine Setup<\/h3>\n<p style=\"color: #e9d5ff; margin: 5px 0 0 0; font-size: 13px;\">The easiest part. Add any machine to the estate in minutes.<\/p>\n<\/div>\n<div style=\"padding: 25px;\">\n<p style=\"color: #475569; font-size: 14px; margin-top: 0;\">This is where it gets beautiful. Got a bunch of legacy systems? Want centralised login without joining them to the domain? Want every root session tracked with keystroke logging? Here&#8217;s all you do.<\/p>\n<p><!-- Step 3.1 --><\/p>\n<div style=\"display: flex; gap: 15px; margin-bottom: 25px;\">\n<div style=\"flex-shrink: 0; width: 36px; height: 36px; background: #9333ea; color: #fff; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-weight: bold; font-size: 16px;\">1<\/div>\n<div style=\"flex: 1;\">\n<h4 style=\"margin: 4px 0 10px 0; color: #1e293b; font-size: 16px;\">Install OpenAKC Client<\/h4>\n<div style=\"background: #fef2f2; border-left: 4px solid #ef4444; padding: 10px 14px; border-radius: 0 6px 6px 0; margin-bottom: 10px;\">\n<p style=\"margin: 0; font-size: 13px; color: #991b1b;\"><strong>\u26a0\ufe0f Important:<\/strong> The client package is called <code>openakc<\/code> (not <code>openakc-server<\/code> or <code>openakc-tools<\/code>). If you install the wrong one it&#8217;s painful to clean up!<\/p>\n<\/div>\n<pre style=\"background: #1e293b; color: #e2e8f0; padding: 16px 20px; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.6; margin: 0;\"><code># Add the repo\ncurl https:\/\/netlore.github.io\/OpenAKC\/repos\/openakc-el7.repo \\\n  | sudo tee \/etc\/yum.repos.d\/openakc.repo\n\n# Install the CLIENT package\nyum install openakc<\/code><\/pre>\n<\/div>\n<\/div>\n<p><!-- Step 3.2 --><\/p>\n<div style=\"display: flex; gap: 15px; margin-bottom: 25px;\">\n<div style=\"flex-shrink: 0; width: 36px; height: 36px; background: #9333ea; color: #fff; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-weight: bold; font-size: 16px;\">2<\/div>\n<div style=\"flex: 1;\">\n<h4 style=\"margin: 4px 0 10px 0; color: #1e293b; font-size: 16px;\">Configure the Client<\/h4>\n<pre style=\"background: #1e293b; color: #e2e8f0; padding: 16px 20px; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.6; margin: 0;\"><code>vi \/etc\/openakc\/openakc.conf\n\nAPIS=\"192.168.1.200\"\nENABLED=\"yes\"\nPORT=\"889\"\nCACHETIME=\"60\"\nDEBUG=\"no\"\nPERMITROOT=\"yes\"\nAUDIT=\"yes\"\nQUIZ=\"no\"\nHIDE=\"restrict\"\nFAKESUDO=\"yes\"<\/code><\/pre>\n<div style=\"margin-top: 15px; border: 1px solid #e2e8f0; border-radius: 8px; overflow: hidden;\">\n<table style=\"width: 100%; border-collapse: collapse; font-size: 13px;\">\n<thead>\n<tr style=\"background: #f1f5f9;\">\n<th style=\"text-align: left; padding: 10px 14px; color: #334155; border-bottom: 2px solid #e2e8f0; width: 130px;\">Setting<\/th>\n<th style=\"text-align: left; padding: 10px 14px; color: #334155; border-bottom: 2px solid #e2e8f0;\">What It Does<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"padding: 8px 14px; border-bottom: 1px solid #f1f5f9; font-family: monospace; color: #9333ea; font-weight: 600;\">PERMITROOT<\/td>\n<td style=\"padding: 8px 14px; border-bottom: 1px solid #f1f5f9;\">Allow root login via OpenAKC keys<\/td>\n<\/tr>\n<tr style=\"background: #fafafa;\">\n<td style=\"padding: 8px 14px; border-bottom: 1px solid #f1f5f9; font-family: monospace; color: #9333ea; font-weight: 600;\">AUDIT<\/td>\n<td style=\"padding: 8px 14px; border-bottom: 1px solid #f1f5f9;\">Enable full audit logging<\/td>\n<\/tr>\n<tr>\n<td style=\"padding: 8px 14px; border-bottom: 1px solid #f1f5f9; font-family: monospace; color: #9333ea; font-weight: 600;\">QUIZ<\/td>\n<td style=\"padding: 8px 14px; border-bottom: 1px solid #f1f5f9;\">Prompt for ticket number on login (ServiceNow, Jira, etc.)<\/td>\n<\/tr>\n<tr style=\"background: #fafafa;\">\n<td style=\"padding: 8px 14px; border-bottom: 1px solid #f1f5f9; font-family: monospace; color: #9333ea; font-weight: 600;\">HIDE<\/td>\n<td style=\"padding: 8px 14px; border-bottom: 1px solid #f1f5f9;\">Restrict visibility of other users on the system<\/td>\n<\/tr>\n<tr>\n<td style=\"padding: 8px 14px; font-family: monospace; color: #9333ea; font-weight: 600;\">FAKESUDO<\/td>\n<td style=\"padding: 8px 14px;\">Simulate sudo behaviour for compatibility<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<\/div>\n<p><!-- Step 3.3 --><\/p>\n<div style=\"display: flex; gap: 15px;\">\n<div style=\"flex-shrink: 0; width: 36px; height: 36px; background: #9333ea; color: #fff; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-weight: bold; font-size: 16px;\">3<\/div>\n<div style=\"flex: 1;\">\n<h4 style=\"margin: 4px 0 10px 0; color: #1e293b; font-size: 16px;\">That&#8217;s It. Test It.<\/h4>\n<pre style=\"background: #1e293b; color: #e2e8f0; padding: 16px 20px; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.6; margin: 0;\"><code>[nicktailor@jumphost1 ~]$ ssh root@192.168.1.38\nEnter passphrase for key '\/home\/nicktailor\/.ssh\/id_rsa':\nOpenAKC (v1.0.0~alpha18-1.el7) - Interactive Session Initialized\n\n[root@nickclient1 ~]#<\/code><\/pre>\n<p style=\"margin: 10px 0 0 0; font-size: 14px; color: #475569;\">This session is now being recorded. And notice what happens when you try to look up domain users:<\/p>\n<pre style=\"background: #1e293b; color: #e2e8f0; padding: 16px 20px; border-radius: 8px; overflow-x: auto; font-size: 13px; line-height: 1.6; margin: 0;\"><code>[root@nickclient1 ~]# id nicktailor\nid: nicktailor: no such user<\/code><\/pre>\n<div style=\"background: #ecfdf5; border-left: 4px solid #10b981; padding: 12px 16px; border-radius: 0 6px 6px 0; margin-top: 10px;\">\n<p style=\"margin: 0; font-size: 13px; color: #065f46;\"><strong>\ud83d\udd12 Security win:<\/strong> The client machine has no knowledge of domain users. A compromised machine reveals nothing about your AD structure, groups, or user accounts.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p><!-- ================================ --><!-- Onboarding New Users --><!-- ================================ --><\/p>\n<div style=\"background: linear-gradient(135deg, #faf5ff, #f3e8ff); border: 2px solid #c084fc; border-radius: 12px; padding: 25px 30px; margin: 30px 0;\">\n<h3 style=\"color: #7c3aed; margin-top: 0; font-size: 20px;\">\ud83d\udc64 Adding New Users<\/h3>\n<p style=\"color: #6b21a8; margin-bottom: 15px; font-size: 14px;\">Once the infrastructure is in place, onboarding a new user takes about 60 seconds:<\/p>\n<div style=\"display: flex; flex-wrap: wrap; gap: 12px;\">\n<div style=\"flex: 1; min-width: 180px; background: #fff; border-radius: 8px; padding: 15px; text-align: center;\">\n<div style=\"background: #7c3aed; color: #fff; width: 32px; height: 32px; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center; font-weight: bold; margin-bottom: 8px;\">1<\/div>\n<p style=\"margin: 0; font-size: 13px; color: #374151;\">Add user to AD and the appropriate Linux group<\/p>\n<\/div>\n<div style=\"flex: 1; min-width: 180px; background: #fff; border-radius: 8px; padding: 15px; text-align: center;\">\n<div style=\"background: #7c3aed; color: #fff; width: 32px; height: 32px; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center; font-weight: bold; margin-bottom: 8px;\">2<\/div>\n<p style=\"margin: 0; font-size: 13px; color: #374151;\">SSH to the jump host and generate keys:<br \/>\n<code>ssh-keygen -t rsa<\/code><\/p>\n<\/div>\n<div style=\"flex: 1; min-width: 180px; background: #fff; border-radius: 8px; padding: 15px; text-align: center;\">\n<div style=\"background: #7c3aed; color: #fff; width: 32px; height: 32px; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center; font-weight: bold; margin-bottom: 8px;\">3<\/div>\n<p style=\"margin: 0; font-size: 13px; color: #374151;\">Register with OpenAKC:<br \/>\n<code>openakc register<\/code><\/p>\n<\/div>\n<div style=\"flex: 1; min-width: 180px; background: #fff; border-radius: 8px; padding: 15px; text-align: center;\">\n<div style=\"background: #7c3aed; color: #fff; width: 32px; height: 32px; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center; font-weight: bold; margin-bottom: 8px;\">4<\/div>\n<p style=\"margin: 0; font-size: 13px; color: #374151;\"><strong>Done.<\/strong> The user can now SSH to any machine in the estate.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!-- Demo GIF --><\/p>\n<h2 style=\"color: #302b63; border-bottom: 3px solid #6c63ff; padding-bottom: 8px; font-size: 24px;\">OpenAKC in Action<\/h2>\n<div style=\"text-align: center; margin: 25px 0;\"><img decoding=\"async\" style=\"max-width: 100%; border-radius: 8px; border: 2px solid #e2e8f0;\" src=\"https:\/\/raw.githubusercontent.com\/netlore\/OpenAKC\/master\/docs\/resources\/OpenAKC_Demo.gif\" alt=\"OpenAKC Demo\" \/><\/p>\n<p style=\"font-size: 12px; color: #64748b; margin-top: 8px;\">Live demo of OpenAKC authentication and session management<\/p>\n<\/div>\n<p><!-- Closing --><\/p>\n<div style=\"background: linear-gradient(135deg, #0f0c29, #302b63); border-radius: 12px; padding: 30px 35px; margin-top: 35px; text-align: center;\">\n<p style=\"color: #c7c4ff; font-size: 16px; margin: 0 0 10px 0;\">This is how you set up SSH security properly. No more blind trust, no more unaudited root, no more domain-joined attack surfaces.<\/p>\n<p style=\"color: #e2e8f0; font-size: 14px; margin: 0 0 20px 0;\">Special thanks to <strong style=\"color: #fff;\">James for teaching me this while @ LSE <\/strong>and\u00a0for the innovation behind this project.<\/p>\n<div style=\"display: flex; gap: 12px; justify-content: center; flex-wrap: wrap;\"><a style=\"display: inline-block; background: #6c63ff; color: #fff; padding: 10px 24px; border-radius: 6px; text-decoration: none; font-weight: 600; font-size: 14px;\" href=\"https:\/\/github.com\/netlore\/OpenAKC\" target=\"_blank\" rel=\"noopener\">GitHub Repo<\/a> <a style=\"display: inline-block; background: transparent; color: #c7c4ff; padding: 10px 24px; border-radius: 6px; text-decoration: none; font-weight: 600; font-size: 14px; border: 2px solid #6c63ff;\" href=\"https:\/\/netlore.github.io\/OpenAKC\/\" target=\"_blank\" rel=\"noopener\">OpenAKC Homepage<\/a> YouTube<\/div>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>What is OpenAKC? OpenAKC is an open-source authentication gateway, dynamic SSH key manager, and privileged access management tool for Linux. It completely rethinks how SSH trust is managed across an estate. As a centralised trust management platform, OpenAKC allows the authorized_keys mechanism on hosts to be completely disabled. SSH trust across your entire estate can be managed centrally by systems<a href=\"https:\/\/nicktailor.com\/tech-blog\/how-to-deploy-open-akcauthorized-key-chain\/\" class=\"read-more\">Read More &#8230;<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[138,131],"tags":[],"class_list":["post-1233","post","type-post","status-publish","format-standard","hentry","category-linux","category-security"],"_links":{"self":[{"href":"https:\/\/nicktailor.com\/tech-blog\/wp-json\/wp\/v2\/posts\/1233","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nicktailor.com\/tech-blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nicktailor.com\/tech-blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nicktailor.com\/tech-blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/nicktailor.com\/tech-blog\/wp-json\/wp\/v2\/comments?post=1233"}],"version-history":[{"count":25,"href":"https:\/\/nicktailor.com\/tech-blog\/wp-json\/wp\/v2\/posts\/1233\/revisions"}],"predecessor-version":[{"id":2237,"href":"https:\/\/nicktailor.com\/tech-blog\/wp-json\/wp\/v2\/posts\/1233\/revisions\/2237"}],"wp:attachment":[{"href":"https:\/\/nicktailor.com\/tech-blog\/wp-json\/wp\/v2\/media?parent=1233"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nicktailor.com\/tech-blog\/wp-json\/wp\/v2\/categories?post=1233"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nicktailor.com\/tech-blog\/wp-json\/wp\/v2\/tags?post=1233"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}