ldap: first attempt at ldap
This commit is contained in:
parent
fbbefc1e2a
commit
53696c927e
3 changed files with 198 additions and 0 deletions
85
applications/ldap.nix
Normal file
85
applications/ldap.nix
Normal file
|
@ -0,0 +1,85 @@
|
||||||
|
/*
|
||||||
|
Gonna use a priper nixos module for this
|
||||||
|
*/
|
||||||
|
|
||||||
|
{ config, pkgs, ... }:
|
||||||
|
with lib;
|
||||||
|
let
|
||||||
|
cfg = config.services.skynet_ldap;
|
||||||
|
in {
|
||||||
|
|
||||||
|
# these are needed for teh program in question
|
||||||
|
imports = [
|
||||||
|
./acme.nix
|
||||||
|
./nginx.nix
|
||||||
|
];
|
||||||
|
|
||||||
|
|
||||||
|
options.services.skynet_ldap = {
|
||||||
|
# options that need to be passed in to make this work
|
||||||
|
|
||||||
|
enable = mkEnableOption "Skynet LDAP service";
|
||||||
|
|
||||||
|
host = {
|
||||||
|
ip = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
};
|
||||||
|
|
||||||
|
name = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
subdomain = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
default = "sso";
|
||||||
|
};
|
||||||
|
|
||||||
|
port = mkOption {
|
||||||
|
type = types.port;
|
||||||
|
default = 8080;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
# this is athe actual configuration that we need to do
|
||||||
|
|
||||||
|
# some things first just for skynet
|
||||||
|
skynet_firewall.forward = [
|
||||||
|
"ip daddr ${cfg.host.ip} udp dport 80 counter packets 0 bytes 0 accept"
|
||||||
|
"ip daddr ${cfg.host.ip} udp dport 443 counter packets 0 bytes 0 accept"
|
||||||
|
];
|
||||||
|
|
||||||
|
skynet_dns.records.cname = [
|
||||||
|
"${cfg.subdomain} CNAME ${cfg.host.name}"
|
||||||
|
];
|
||||||
|
|
||||||
|
# firewall on teh computer itself
|
||||||
|
networking.firewall.allowedTCPPorts = [
|
||||||
|
80
|
||||||
|
443
|
||||||
|
];
|
||||||
|
|
||||||
|
|
||||||
|
# finally down to configurating teha ctual service
|
||||||
|
|
||||||
|
# gonna need a reverse proxy set up
|
||||||
|
services.nginx = {
|
||||||
|
virtualHosts."${cfg.subdomain}.skynet.ie" = {
|
||||||
|
forceSSL = true;
|
||||||
|
useACMEHost = "skynet";
|
||||||
|
locations."/".proxyPass = "http://localhost:${port}";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
# finally the actual service we are doing
|
||||||
|
services.portunus = {
|
||||||
|
enable = true;
|
||||||
|
domain = hostname;
|
||||||
|
port = port;
|
||||||
|
# not sure if this will work
|
||||||
|
seedPath = "./ldap/seed.json";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
58
applications/ldap/seed.json
Normal file
58
applications/ldap/seed.json
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
{
|
||||||
|
"groups": [
|
||||||
|
{
|
||||||
|
"name": "portunus-team",
|
||||||
|
"long_name": "Skynet Portunus Administrators",
|
||||||
|
"members": [
|
||||||
|
"Silver"
|
||||||
|
],
|
||||||
|
"permissions": {
|
||||||
|
"portunus": {
|
||||||
|
"is_admin": true
|
||||||
|
},
|
||||||
|
"ldap": {
|
||||||
|
"can_read": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"posix_gid": 101
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "skynet-user",
|
||||||
|
"long_name": "Skynet users",
|
||||||
|
"members": [
|
||||||
|
"Silver",
|
||||||
|
"NotSilver"
|
||||||
|
],
|
||||||
|
"permissions": {
|
||||||
|
"portunus": {
|
||||||
|
"is_admin": false
|
||||||
|
},
|
||||||
|
"ldap": {
|
||||||
|
"can_read": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"posix_gid": 1001
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"users": [
|
||||||
|
{
|
||||||
|
"login_name": "Silver",
|
||||||
|
"given_name": "Brendan",
|
||||||
|
"family_name": "Golden",
|
||||||
|
"email": "skynet@brendan.ie",
|
||||||
|
"ssh_public_keys": [
|
||||||
|
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIN34yTh0nk7HAz8id5Z/wiIX3H7ptleDyXy5bfbemico Desktop"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"login_name": "NotSilver",
|
||||||
|
"given_name": "Not",
|
||||||
|
"family_name": "Silver",
|
||||||
|
"email": "hahahahaaaaa@example.com",
|
||||||
|
"ssh_public_keys": [
|
||||||
|
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIN34yTh0nk7HAz8id5Z/wiIX3H7ptleDyXy5bfbemico notDesktop"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
55
machines/kitt.nix
Normal file
55
machines/kitt.nix
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
/*
|
||||||
|
|
||||||
|
Name: https://en.wikipedia.org/wiki/KITT
|
||||||
|
Why: Kitt used to have this role before (as well as email and dns)
|
||||||
|
Type: VM
|
||||||
|
Hardware: -
|
||||||
|
From: 2023
|
||||||
|
Role: LDAP Server
|
||||||
|
Notes:
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
{ pkgs, lib, nodes, ... }: ip_address:
|
||||||
|
let
|
||||||
|
# name of the server, sets teh hostname and record for it
|
||||||
|
name = "kitt";
|
||||||
|
ip_pub = "193.1.99.74";
|
||||||
|
ip_priv = "172.20.20.5";
|
||||||
|
hostname = "${name}.skynet.ie";
|
||||||
|
hostname = ip_pub;
|
||||||
|
|
||||||
|
in {
|
||||||
|
imports = [
|
||||||
|
# required imports
|
||||||
|
../applications/firewall.nix
|
||||||
|
../applications/dns.nix
|
||||||
|
|
||||||
|
# whats running on teh server
|
||||||
|
../applications/ldap.nix
|
||||||
|
];
|
||||||
|
|
||||||
|
deployment = {
|
||||||
|
targetHost = hostname;
|
||||||
|
targetPort = 22;
|
||||||
|
targetUser = "root";
|
||||||
|
};
|
||||||
|
|
||||||
|
# add this server to dns
|
||||||
|
skynet_dns.records.external = [
|
||||||
|
"${name} A ${ip_pub}"
|
||||||
|
];
|
||||||
|
|
||||||
|
# we use this to pass in teh relevent infomation to the
|
||||||
|
services.skynet_ldap = {
|
||||||
|
enable = true;
|
||||||
|
|
||||||
|
host = {
|
||||||
|
# pass in teh ip (used for firewall)
|
||||||
|
ip = ip_pub;
|
||||||
|
|
||||||
|
# the name is used for dns
|
||||||
|
name = name;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
Loading…
Reference in a new issue