From e8134ccabe9bc8b4974fa886566a07e535751422 Mon Sep 17 00:00:00 2001 From: Eric Rodrigues Pires Date: Sun, 22 Dec 2024 16:38:41 -0300 Subject: [PATCH] Add functionality to remove users via the admin interface Closes #19 --- .github/workflows/build.yml | 2 - .github/workflows/validate.yml | 2 +- CHANGELOG.md | 11 + Cargo.toml | 2 +- Dockerfile | 23 +- Dockerfile.ci | 25 -- book/src/logo.png | Bin 75160 -> 82977 bytes src/admin.rs | 430 ++++++++++++++++++++++++++++----- src/connections.rs | 5 +- src/error.rs | 2 + src/fingerprints.rs | 124 +++++++--- src/lib.rs | 23 +- src/ssh.rs | 92 ++++--- 13 files changed, 573 insertions(+), 168 deletions(-) delete mode 100644 Dockerfile.ci diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 1d06ceb..60fbe51 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -56,7 +56,6 @@ jobs: - name: Build and push uses: docker/build-push-action@v6 with: - file: Dockerfile.ci push: true platforms: | linux/amd64 @@ -66,7 +65,6 @@ jobs: - name: Export binaries uses: docker/build-push-action@v6 with: - file: Dockerfile.ci target: binary outputs: type=local,dest=out - name: Upload artifact diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml index 65957a5..c777243 100644 --- a/.github/workflows/validate.yml +++ b/.github/workflows/validate.yml @@ -9,7 +9,7 @@ permissions: contents: read env: - RUST_MSRV: 1.81.0 + RUST_MSRV: 1.82.0 jobs: rustfmt: diff --git a/CHANGELOG.md b/CHANGELOG.md index 366c00a..2b87303 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,16 @@ # Changelog +## Unreleased + +### Added + +- Add user detail popups to admin interface. +- Add functionality to remove users via the admin interface. + +### Changed + +- **BREAKING**: Bump MSRV to 1.82.0. + ## 0.2.1 (2024-12-22) ### Added diff --git a/Cargo.toml b/Cargo.toml index d0a8687..9adb4b0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,7 +2,7 @@ name = "sandhole" version = "0.2.1" edition = "2021" -rust-version = "1.81.0" +rust-version = "1.82.0" description = "Expose HTTP/SSH/TCP services through SSH port forwarding." repository = "https://github.com/EpicEric/sandhole" homepage = "https://epiceric.github.io/sandhole/" diff --git a/Dockerfile b/Dockerfile index db72c73..1b4034d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,16 +1,25 @@ -FROM rust:1.83.0-alpine3.20 AS builder -RUN apk add --no-cache musl-dev libressl-dev perl build-base +FROM --platform=$BUILDPLATFORM rust:1.83.0-alpine3.20 AS builder +ENV PKGCONFIG_SYSROOTDIR=/ +RUN apk add --no-cache musl-dev libressl-dev perl build-base zig +RUN cargo install --locked cargo-zigbuild +RUN rustup target add x86_64-unknown-linux-musl aarch64-unknown-linux-musl WORKDIR /app COPY Cargo.toml Cargo.lock . RUN mkdir src \ && echo "fn main() {}" > src/main.rs \ && cargo fetch \ - && cargo build --release \ + && cargo zigbuild --release --target x86_64-unknown-linux-musl --target aarch64-unknown-linux-musl \ && rm src/main.rs COPY src ./src COPY README.md . -RUN cargo build --release +RUN cargo zigbuild --release --target x86_64-unknown-linux-musl --target aarch64-unknown-linux-musl -FROM alpine:3.20 AS runner -COPY --from=builder /app/target/release/sandhole /usr/local/bin/sandhole -ENTRYPOINT [ "sandhole" ] +FROM --platform=$BUILDPLATFORM scratch AS binary +COPY --from=builder /app/target/x86_64-unknown-linux-musl/release/sandhole /sandhole-linux-amd64 +COPY --from=builder /app/target/aarch64-unknown-linux-musl/release/sandhole /sandhole-linux-arm64 + +FROM scratch AS runner +ARG TARGETOS +ARG TARGETARCH +COPY --from=binary /sandhole-${TARGETOS}-${TARGETARCH} /sandhole +ENTRYPOINT [ "/sandhole" ] diff --git a/Dockerfile.ci b/Dockerfile.ci deleted file mode 100644 index 1b4034d..0000000 --- a/Dockerfile.ci +++ /dev/null @@ -1,25 +0,0 @@ -FROM --platform=$BUILDPLATFORM rust:1.83.0-alpine3.20 AS builder -ENV PKGCONFIG_SYSROOTDIR=/ -RUN apk add --no-cache musl-dev libressl-dev perl build-base zig -RUN cargo install --locked cargo-zigbuild -RUN rustup target add x86_64-unknown-linux-musl aarch64-unknown-linux-musl -WORKDIR /app -COPY Cargo.toml Cargo.lock . -RUN mkdir src \ - && echo "fn main() {}" > src/main.rs \ - && cargo fetch \ - && cargo zigbuild --release --target x86_64-unknown-linux-musl --target aarch64-unknown-linux-musl \ - && rm src/main.rs -COPY src ./src -COPY README.md . -RUN cargo zigbuild --release --target x86_64-unknown-linux-musl --target aarch64-unknown-linux-musl - -FROM --platform=$BUILDPLATFORM scratch AS binary -COPY --from=builder /app/target/x86_64-unknown-linux-musl/release/sandhole /sandhole-linux-amd64 -COPY --from=builder /app/target/aarch64-unknown-linux-musl/release/sandhole /sandhole-linux-arm64 - -FROM scratch AS runner -ARG TARGETOS -ARG TARGETARCH -COPY --from=binary /sandhole-${TARGETOS}-${TARGETARCH} /sandhole -ENTRYPOINT [ "/sandhole" ] diff --git a/book/src/logo.png b/book/src/logo.png index bb925e3e654c2bf224b30e6b89df3f38bd001220..aa31482c3117738f0a0e83a9eebef62de5712709 100644 GIT binary patch delta 80157 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 delta 72279 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 HDWM4fmevCT diff --git a/src/admin.rs b/src/admin.rs index 5ed5beb..c836135 100644 --- a/src/admin.rs +++ b/src/admin.rs @@ -10,23 +10,29 @@ use human_bytes::human_bytes; use itertools::Itertools; use ratatui::{ buffer::Buffer, - layout::{Constraint, Layout, Margin, Rect}, + layout::{Constraint, Flex, Layout, Margin, Rect}, prelude::CrosstermBackend, style::{Color, Modifier, Style, Stylize}, symbols::border, text::{Line, Text}, widgets::{ - Block, Paragraph, Row, Scrollbar, ScrollbarOrientation, ScrollbarState, StatefulWidget, - Table, TableState, Tabs, Widget, + Block, Clear, Paragraph, Row, Scrollbar, ScrollbarOrientation, ScrollbarState, + StatefulWidget, Table, TableState, Tabs, Widget, Wrap, }, Terminal, TerminalOptions, Viewport, }; +use ssh_key::Fingerprint; use tokio::{ sync::{mpsc::UnboundedSender, watch}, time::sleep, }; -use crate::{droppable_handle::DroppableHandle, tcp_alias::TcpAlias, SandholeServer, SystemData}; +use crate::{ + droppable_handle::DroppableHandle, + fingerprints::{AuthenticationType, KeyData}, + tcp_alias::TcpAlias, + SandholeServer, SystemData, +}; struct BufferedSender { tx: UnboundedSender>, @@ -85,15 +91,23 @@ impl Tab { } } +enum AdminPrompt { + Infobox(String), + SelectUser(Vec, TableState), + UserDetails(String, Option<(Fingerprint, KeyData)>), + RemoveUser(String, Option<(Fingerprint, KeyData)>), +} + struct AdminState { server: Arc, is_pty: bool, tab: Tab, table_state: TableState, vertical_scroll: ScrollbarState, + prompt: Option, } -fn to_socket_addr_string(addr: SocketAddr) -> String { +fn to_socket_addr_string(addr: &SocketAddr) -> String { let ip = addr.ip().to_canonical(); if ip.is_ipv4() { format!("{}:{}", ip, addr.port()) @@ -111,6 +125,8 @@ impl AdminState { let instructions = Line::from(vec![ " Change tab".into(), " ".blue().bold(), + " Details".into(), + " ".blue().bold(), " Quit".into(), " ".blue().bold(), ]); @@ -133,6 +149,7 @@ impl AdminState { .border_set(border::PROPORTIONAL_TALL) .render(inner_area, buf); self.render_tab(inner_area.inner(Margin::new(2, 1)), buf); + self.render_prompt(area, buf); } else { let text = Text::from(vec![ Line::from( @@ -146,6 +163,91 @@ impl AdminState { } } + fn render_prompt(&mut self, area: Rect, buf: &mut Buffer) { + if let Some(ref mut prompt) = self.prompt { + let vertical = Layout::vertical([Constraint::Percentage(50)]).flex(Flex::Center); + let horizontal = Layout::horizontal([Constraint::Length(60)]).flex(Flex::Center); + let [area] = vertical.areas(area); + let [area] = horizontal.areas(area); + let block = Block::bordered().black().on_white(); + let inner = block.inner(area); + Widget::render(Clear, area, buf); + match prompt { + AdminPrompt::Infobox(text) => { + let block = block.title_bottom(Line::raw(" Close ").centered()); + let text = Paragraph::new(text.as_str()) + .centered() + .wrap(Wrap { trim: true }); + Widget::render(block, area, buf); + Widget::render(text, inner, buf); + } + AdminPrompt::SelectUser(users, table_state) => { + let block = block + .title(Line::raw("Connected users")) + .title_bottom(Line::raw(" Details ").centered()); + let users = Table::new( + users.iter().map(|user| Row::new([user.as_str()])), + [Constraint::Fill(1)], + ) + .row_highlight_style(Style::new().black().on_blue()); + Widget::render(block, area, buf); + StatefulWidget::render(users, inner, buf, table_state); + } + AdminPrompt::UserDetails(user, data) => { + let block = block.title(Line::raw("User details")).title_bottom( + Line::raw( + if data + .as_ref() + .is_none_or(|(_, data)| data.auth == AuthenticationType::User) + { + " Close Remove " + } else { + " Close " + }, + ) + .centered(), + ); + let (user_type, comment) = data + .as_ref() + .map(|(_, data)| { + ( + format!("Type: {}", data.auth), + format!("Key comment: {}", data.comment), + ) + }) + .unwrap_or(("Type: User".into(), "(authenticated with password)".into())); + let text = Paragraph::new(vec![ + Line::from(user.as_str()).centered(), + Line::from(user_type).centered(), + Line::from(comment).centered(), + ]) + .wrap(Wrap { trim: true }); + Widget::render(block, area, buf); + Widget::render(text, inner, buf); + } + AdminPrompt::RemoveUser(user, data) => { + let block = block + .title(Line::raw("Remove user?")) + .title_bottom(Line::raw(" Cancel Confirm ").centered()); + let text = Paragraph::new(vec![ + Line::from("Are you sure you want to remove the following user?") + .centered(), + Line::from(user.as_str()).bold().centered(), + Line::from(if data.is_some() { + "They will lose all forwarding permissions!" + } else { + "They might still be able to reconnect via the login API!" + }) + .centered(), + ]) + .wrap(Wrap { trim: true }); + Widget::render(block, area, buf); + Widget::render(text, inner, buf); + } + }; + } + } + // Render the selected tab's contents fn render_tab(&mut self, area: Rect, buf: &mut Buffer) { let color = self.tab.color(); @@ -153,17 +255,20 @@ impl AdminState { Tab::Http => { let data = self.server.http_data.read().unwrap().clone(); self.vertical_scroll = self.vertical_scroll.content_length(data.len()); - let rows = data.into_iter().map(|(host, (connections, req_per_min))| { - let len = connections.len() as u16; - let (peers, users): (Vec<_>, Vec<_>) = connections.into_iter().unzip(); - Row::new(vec![ - host, - req_per_min.to_string(), - users.iter().join("\n"), - peers.into_iter().map(to_socket_addr_string).join("\n"), - ]) - .height(len) - }); + let rows: Vec> = data + .iter() + .map(|(host, (connections, req_per_min))| { + let len = connections.len() as u16; + let (peers, users): (Vec<_>, Vec<_>) = connections.iter().unzip(); + Row::new(vec![ + host.clone(), + req_per_min.to_string(), + users.iter().join("\n"), + peers.iter().map(to_socket_addr_string).join("\n"), + ]) + .height(len) + }) + .collect(); let constraints = [ Constraint::Min(25), Constraint::Length(7), @@ -183,16 +288,19 @@ impl AdminState { Tab::Ssh => { let data = self.server.ssh_data.read().unwrap().clone(); self.vertical_scroll = self.vertical_scroll.content_length(data.len()); - let rows = data.into_iter().map(|(host, connections)| { - let len = connections.len() as u16; - let (peers, users): (Vec<_>, Vec<_>) = connections.into_iter().unzip(); - Row::new(vec![ - host, - users.iter().join("\n"), - peers.into_iter().map(to_socket_addr_string).join("\n"), - ]) - .height(len) - }); + let rows: Vec> = data + .iter() + .map(|(host, connections)| { + let len = connections.len() as u16; + let (peers, users): (Vec<_>, Vec<_>) = connections.iter().unzip(); + Row::new(vec![ + host.clone(), + users.iter().join("\n"), + peers.iter().map(to_socket_addr_string).join("\n"), + ]) + .height(len) + }) + .collect(); let constraints = [ Constraint::Min(25), Constraint::Length(50), @@ -211,19 +319,20 @@ impl AdminState { Tab::Tcp => { let data = self.server.tcp_data.read().unwrap().clone(); self.vertical_scroll = self.vertical_scroll.content_length(data.len()); - let rows = data - .into_iter() + let rows: Vec> = data + .iter() .map(|(TcpAlias(alias, port), connections)| { let len = connections.len() as u16; - let (peers, users): (Vec<_>, Vec<_>) = connections.into_iter().unzip(); + let (peers, users): (Vec<_>, Vec<_>) = connections.iter().unzip(); Row::new(vec![ - alias, + alias.clone(), port.to_string(), users.iter().join("\n"), - peers.into_iter().map(to_socket_addr_string).join("\n"), + peers.iter().map(to_socket_addr_string).join("\n"), ]) .height(len) - }); + }) + .collect(); let constraints = [ Constraint::Min(25), Constraint::Length(5), @@ -326,6 +435,7 @@ impl AdminInterface { is_pty: false, table_state: Default::default(), vertical_scroll: Default::default(), + prompt: None, }, })); let interface_clone = Arc::clone(&interface); @@ -370,7 +480,6 @@ impl AdminInterface { let mut interface = self.interface.lock().unwrap(); interface.terminal.resize(rect)?; interface.state.is_pty = true; - drop(interface); } let _ = self.change_notifier.send(()); Ok(()) @@ -393,7 +502,6 @@ impl AdminInterface { } interface.state.table_state = Default::default(); interface.state.vertical_scroll = Default::default(); - drop(interface); } let _ = self.change_notifier.send(()); } @@ -415,47 +523,255 @@ impl AdminInterface { } interface.state.table_state = Default::default(); interface.state.vertical_scroll = Default::default(); - drop(interface); } let _ = self.change_notifier.send(()); } // Move down in the selected tab's table pub(crate) fn move_down(&mut self) { - { + let notify = { let mut interface = self.interface.lock().unwrap(); - interface.state.table_state.select_next(); - interface.state.vertical_scroll = interface - .state - .vertical_scroll - .position(interface.state.table_state.selected().unwrap()); - drop(interface); + match interface.state.prompt { + Some(AdminPrompt::SelectUser(_, ref mut state)) => { + state.select_next(); + true + } + Some(_) => false, + None => { + interface.state.table_state.select_next(); + interface.state.vertical_scroll = interface + .state + .vertical_scroll + .position(interface.state.table_state.selected().unwrap()); + true + } + } + }; + if notify { + let _ = self.change_notifier.send(()); } - let _ = self.change_notifier.send(()); } // Move up in the selected tab's table pub(crate) fn move_up(&mut self) { - { + let notify = { let mut interface = self.interface.lock().unwrap(); - interface.state.table_state.select_previous(); - interface.state.vertical_scroll = interface - .state - .vertical_scroll - .position(interface.state.table_state.selected().unwrap()); - drop(interface); + match interface.state.prompt { + Some(AdminPrompt::SelectUser(_, ref mut state)) => { + state.select_previous(); + true + } + Some(_) => false, + None => { + interface.state.table_state.select_previous(); + interface.state.vertical_scroll = interface + .state + .vertical_scroll + .position(interface.state.table_state.selected().unwrap()); + true + } + } + }; + if notify { + let _ = self.change_notifier.send(()); } - let _ = self.change_notifier.send(()); } - // Cancel current selection in the table + // Cancel current selection in the table or prompt pub(crate) fn cancel(&mut self) { - { + let notify = { let mut interface = self.interface.lock().unwrap(); - interface.state.table_state = Default::default(); - interface.state.vertical_scroll = Default::default(); - drop(interface); + match interface.state.prompt { + Some(_) => { + interface.state.prompt = None; + true + } + None => { + if interface.state.table_state.selected().is_some() { + interface.state.table_state = Default::default(); + interface.state.vertical_scroll = Default::default(); + true + } else { + false + } + } + } + }; + if notify { + let _ = self.change_notifier.send(()); + } + } + + // Confirm current selection, which might be an entry in a table or a prompt + pub(crate) fn enter(&mut self) { + let notify = { + let mut interface = self.interface.lock().unwrap(); + match interface.state.prompt.take() { + Some(AdminPrompt::Infobox(_)) => { + interface.state.prompt = None; + true + } + Some(AdminPrompt::RemoveUser(user, data)) => { + let mut text = "User removed successfully!".into(); + if let Some(fingerprint) = data.map(|(fingerprint, _)| fingerprint) { + if let Err(err) = interface + .state + .server + .fingerprints_validator + .remove_user_key(&fingerprint) + { + text = format!("Error: {}", err); + } + if let Some(sessions) = interface + .state + .server + .sessions_publickey + .lock() + .unwrap() + .remove(&fingerprint) + { + sessions.values().for_each(|tx| { + let _ = tx.send(()); + }); + } + } else if let Some(sessions) = interface + .state + .server + .sessions_password + .lock() + .unwrap() + .remove(&user) + { + sessions.values().for_each(|tx| { + let _ = tx.send(()); + }); + } + interface.state.prompt = Some(AdminPrompt::Infobox(text)); + true + } + Some(AdminPrompt::SelectUser(users, table_state)) => { + if let Some(user) = table_state + .selected() + .and_then(|selected| users.get(selected)) + { + let user = user.clone(); + let fingerprint = user.parse().ok(); + let key_data = fingerprint.as_ref().and_then(|fingerprint| { + interface + .state + .server + .fingerprints_validator + .get_data_for_fingerprint(fingerprint) + }); + interface.state.prompt = + Some(AdminPrompt::UserDetails(user, fingerprint.zip(key_data))); + true + } else { + interface.state.prompt = Some(AdminPrompt::SelectUser(users, table_state)); + false + } + } + Some(prompt) => { + interface.state.prompt = Some(prompt); + false + } + None => { + if let Some(row) = interface.state.table_state.selected() { + let users: Option> = match interface.state.tab { + Tab::Http => interface + .state + .server + .http_data + .read() + .unwrap() + .values() + .nth(row) + .map(|value| value.0.values().cloned().collect()), + Tab::Ssh => interface + .state + .server + .ssh_data + .read() + .unwrap() + .values() + .nth(row) + .map(|value| value.values().cloned().collect()), + Tab::Tcp => interface + .state + .server + .tcp_data + .read() + .unwrap() + .values() + .nth(row) + .map(|value| value.values().cloned().collect()), + }; + match users { + None => { + interface.state.prompt = + Some(AdminPrompt::Infobox("No users found!".into())); + } + Some(users) if users.is_empty() => { + interface.state.prompt = + Some(AdminPrompt::Infobox("No users found!".into())); + } + Some(mut users) if users.len() == 1 => { + let user = users.remove(0); + let fingerprint = user.parse().ok(); + let key_data = fingerprint.as_ref().and_then(|fingerprint| { + interface + .state + .server + .fingerprints_validator + .get_data_for_fingerprint(fingerprint) + }); + interface.state.prompt = + Some(AdminPrompt::UserDetails(user, fingerprint.zip(key_data))); + } + Some(users) => { + interface.state.prompt = + Some(AdminPrompt::SelectUser(users, TableState::default())); + } + } + true + } else { + interface.state.prompt = + Some(AdminPrompt::Infobox("No row selected!".into())); + true + } + } + } + }; + if notify { + let _ = self.change_notifier.send(()); + } + } + + pub(crate) fn delete(&mut self) { + let notify = { + let mut interface = self.interface.lock().unwrap(); + match interface.state.prompt.take() { + Some(AdminPrompt::UserDetails(user, data)) => { + if data + .as_ref() + .is_none_or(|(_, data)| data.auth == AuthenticationType::User) + { + interface.state.prompt = Some(AdminPrompt::RemoveUser(user, data)); + true + } else { + interface.state.prompt = Some(AdminPrompt::UserDetails(user, data)); + false + } + } + Some(prompt) => { + interface.state.prompt = Some(prompt); + false + } + None => false, + } + }; + if notify { + let _ = self.change_notifier.send(()); } - let _ = self.change_notifier.send(()); } } diff --git a/src/connections.rs b/src/connections.rs index 4b22e07..618ec1c 100644 --- a/src/connections.rs +++ b/src/connections.rs @@ -9,7 +9,7 @@ use std::{ use dashmap::DashMap; #[cfg(test)] use mockall::automock; -use rand::seq::SliceRandom; +use rand::{seq::SliceRandom, thread_rng}; use crate::{ config::LoadBalancing, @@ -127,12 +127,11 @@ where K: Borrow, Q: Hash + Eq + ?Sized, { - let mut rng = rand::thread_rng(); self.map.get(key).and_then(|handler| { handler .value() .as_slice() - .choose(&mut rng) + .choose(&mut thread_rng()) .map(|ConnectionMapEntry { handler, .. }| Clone::clone(handler)) }) } diff --git a/src/error.rs b/src/error.rs index c9990dc..bd61110 100644 --- a/src/error.rs +++ b/src/error.rs @@ -16,4 +16,6 @@ pub(crate) enum ServerError { LoadBalancingAlreadyBound, #[error("Quota reached for user")] QuotaReached, + #[error("No matching user key")] + NoMatchingUserKey, } diff --git a/src/fingerprints.rs b/src/fingerprints.rs index fb8c696..a3f5354 100644 --- a/src/fingerprints.rs +++ b/src/fingerprints.rs @@ -1,12 +1,18 @@ -use std::{collections::BTreeSet, path::PathBuf, sync::Arc, time::Duration}; +use std::{ + collections::BTreeMap, + fs::remove_file, + path::PathBuf, + sync::{Arc, RwLock}, + time::Duration, +}; -use crate::{directory::watch_directory, droppable_handle::DroppableHandle}; +use crate::{directory::watch_directory, droppable_handle::DroppableHandle, error::ServerError}; use log::{error, warn}; use notify::RecommendedWatcher; use ssh_key::{Fingerprint, HashAlg, PublicKey}; use tokio::{ fs::{read_dir, read_to_string}, - sync::{oneshot, RwLock}, + sync::oneshot, }; #[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)] @@ -19,10 +25,27 @@ pub(crate) enum AuthenticationType { Admin, } +impl std::fmt::Display for AuthenticationType { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + f.write_str(match self { + AuthenticationType::None => "None", + AuthenticationType::User => "User", + AuthenticationType::Admin => "Admin", + }) + } +} + +#[derive(Debug, Clone)] +pub(crate) struct KeyData { + pub(crate) file: PathBuf, + pub(crate) comment: String, + pub(crate) auth: AuthenticationType, +} + #[derive(Debug)] pub(crate) struct FingerprintsValidator { - user_fingerprints: Arc>>, - admin_fingerprints: Arc>>, + user_fingerprints: Arc>>, + admin_fingerprints: Arc>>, _user_join_handle: DroppableHandle<()>, _admin_join_handle: DroppableHandle<()>, _watchers: [RecommendedWatcher; 2], @@ -34,11 +57,11 @@ impl FingerprintsValidator { user_keys_directory: PathBuf, admin_keys_directory: PathBuf, ) -> anyhow::Result { - let user_fingerprints = Arc::new(RwLock::new(BTreeSet::new())); + let user_fingerprints = Arc::new(RwLock::new(BTreeMap::new())); let (user_watcher, mut user_rx) = watch_directory::(user_keys_directory.as_path())?; user_rx.mark_changed(); - let admin_fingerprints = Arc::new(RwLock::new(BTreeSet::new())); + let admin_fingerprints = Arc::new(RwLock::new(BTreeMap::new())); let (admin_watcher, mut admin_rx) = watch_directory::(admin_keys_directory.as_path())?; admin_rx.mark_changed(); @@ -51,7 +74,7 @@ impl FingerprintsValidator { if user_rx.changed().await.is_err() { break; } - let mut user_set = BTreeSet::new(); + let mut user_set = BTreeMap::new(); match read_dir(user_keys_directory.as_path()).await { Ok(mut read_dir) => { while let Ok(Some(entry)) = read_dir.next_entry().await { @@ -60,7 +83,16 @@ impl FingerprintsValidator { user_set.extend( data.lines() .flat_map(|line| PublicKey::from_openssh(line).ok()) - .map(|key| key.fingerprint(HashAlg::Sha256)), + .map(|key| { + ( + key.fingerprint(HashAlg::Sha256), + KeyData { + file: entry.path(), + comment: key.comment().into(), + auth: AuthenticationType::User, + }, + ) + }), ); } Err(err) => { @@ -72,7 +104,7 @@ impl FingerprintsValidator { } } } - *user_fingerprints_clone.write().await = user_set; + *user_fingerprints_clone.write().unwrap() = user_set; } Err(err) => { error!( @@ -96,7 +128,7 @@ impl FingerprintsValidator { if admin_rx.changed().await.is_err() { break; } - let mut admin_set = BTreeSet::new(); + let mut admin_set = BTreeMap::new(); match read_dir(admin_keys_directory.as_path()).await { Ok(mut read_dir) => { while let Ok(Some(entry)) = read_dir.next_entry().await { @@ -105,7 +137,16 @@ impl FingerprintsValidator { admin_set.extend( data.lines() .flat_map(|line| PublicKey::from_openssh(line).ok()) - .map(|key| key.fingerprint(HashAlg::Sha256)), + .map(|key| { + ( + key.fingerprint(HashAlg::Sha256), + KeyData { + file: entry.path(), + comment: key.comment().into(), + auth: AuthenticationType::Admin, + }, + ) + }), ); } Err(err) => { @@ -117,7 +158,7 @@ impl FingerprintsValidator { } } } - *admin_fingerprints_clone.write().await = admin_set; + *admin_fingerprints_clone.write().unwrap() = admin_set; } Err(err) => { error!( @@ -143,18 +184,47 @@ impl FingerprintsValidator { } // Find the right authentication type for a given fingerprint - pub(crate) async fn authenticate_fingerprint( - &self, - fingerprint: &Fingerprint, - ) -> AuthenticationType { - if self.admin_fingerprints.read().await.contains(fingerprint) { + pub(crate) fn authenticate_fingerprint(&self, fingerprint: &Fingerprint) -> AuthenticationType { + if self + .admin_fingerprints + .read() + .unwrap() + .contains_key(fingerprint) + { AuthenticationType::Admin - } else if self.user_fingerprints.read().await.contains(fingerprint) { + } else if self + .user_fingerprints + .read() + .unwrap() + .contains_key(fingerprint) + { AuthenticationType::User } else { AuthenticationType::None } } + + pub(crate) fn get_data_for_fingerprint(&self, fingerprint: &Fingerprint) -> Option { + if let Some(key_data) = self.admin_fingerprints.read().unwrap().get(fingerprint) { + Some(key_data.clone()) + } else { + self.user_fingerprints + .read() + .unwrap() + .get(fingerprint) + .cloned() + } + } + + pub(crate) fn remove_user_key(&self, fingerprint: &Fingerprint) -> anyhow::Result<()> { + if let Some(KeyData { file, .. }) = + self.user_fingerprints.write().unwrap().remove(fingerprint) + { + Ok(remove_file(file)?) + } else { + Err(ServerError::NoMatchingUserKey.into()) + } + } } #[cfg(test)] @@ -195,27 +265,19 @@ mod fingerprints_validator_tests { .unwrap(); assert_eq!( - validator - .authenticate_fingerprint(&admin_key.fingerprint(HashAlg::Sha256)) - .await, + validator.authenticate_fingerprint(&admin_key.fingerprint(HashAlg::Sha256)), AuthenticationType::Admin ); assert_eq!( - validator - .authenticate_fingerprint(&key_one.fingerprint(HashAlg::Sha256)) - .await, + validator.authenticate_fingerprint(&key_one.fingerprint(HashAlg::Sha256)), AuthenticationType::User ); assert_eq!( - validator - .authenticate_fingerprint(&key_two.fingerprint(HashAlg::Sha256)) - .await, + validator.authenticate_fingerprint(&key_two.fingerprint(HashAlg::Sha256)), AuthenticationType::User ); assert_eq!( - validator - .authenticate_fingerprint(&unknown_key.fingerprint(HashAlg::Sha256)) - .await, + validator.authenticate_fingerprint(&unknown_key.fingerprint(HashAlg::Sha256)), AuthenticationType::None ); } diff --git a/src/lib.rs b/src/lib.rs index 4da16bd..560829b 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -3,10 +3,10 @@ //! use std::{ - collections::BTreeMap, + collections::{BTreeMap, HashMap}, marker::PhantomData, net::{IpAddr, SocketAddr}, - sync::{Arc, RwLock}, + sync::{atomic::AtomicUsize, Arc, Mutex, RwLock}, time::Duration, }; @@ -23,6 +23,7 @@ use russh::server::Config; use russh_keys::decode_secret_key; use rustls::ServerConfig; use rustls_acme::is_tls_alpn_challenge; +use ssh_key::Fingerprint; use sysinfo::{CpuRefreshKind, MemoryRefreshKind, Networks, RefreshKind, System}; use tcp::TcpHandler; use tcp_alias::TcpAlias; @@ -32,7 +33,7 @@ use tokio::{ io::AsyncWriteExt, net::{TcpListener, TcpStream}, pin, - sync::oneshot, + sync::watch, time::sleep, }; use tokio_rustls::LazyConfigAcceptor; @@ -70,8 +71,6 @@ mod tcp; mod tcp_alias; mod telemetry; -type DataTable = Arc>>; - struct HttpReactor { certificates: Arc, telemetry: Arc, @@ -93,7 +92,13 @@ struct SystemData { cpu_usage: f32, } +type SessionMap = HashMap>; +type DataTable = Arc>>; + pub(crate) struct SandholeServer { + pub(crate) session_id: AtomicUsize, + pub(crate) sessions_password: Mutex>, + pub(crate) sessions_publickey: Mutex>, pub(crate) http: Arc, HttpReactor>>, pub(crate) ssh: Arc>>, pub(crate) tcp: Arc, Arc>>, @@ -326,6 +331,9 @@ pub async fn entrypoint(config: ApplicationConfig) -> anyhow::Result<()> { ..Default::default() }); let mut sandhole = Arc::new(SandholeServer { + session_id: AtomicUsize::new(0), + sessions_password: Mutex::default(), + sessions_publickey: Mutex::default(), http: Arc::clone(&http_connections), ssh: ssh_connections, tcp: tcp_connections, @@ -515,7 +523,7 @@ async fn handle_ssh_connection( server: &mut Arc, ) { let config = Arc::clone(config); - let (tx, mut rx) = oneshot::channel::<()>(); + let (tx, mut rx) = watch::channel(()); let handler = server.new_client(address, tx); tokio::spawn(async move { let mut session = match russh::server::run_stream(config, stream, handler).await { @@ -531,7 +539,8 @@ async fn handle_ssh_connection( warn!("Connection with {} closed with error: {}", address, err); } } - Ok(_) = &mut rx => { + Ok(_) = rx.changed() => { + info!("Disconnecting client {}...", address); let _ = session.handle().disconnect(russh::Disconnect::ByApplication, "".into(), "English".into()).await; }, } diff --git a/src/ssh.rs b/src/ssh.rs index 8f51188..f1bc54c 100644 --- a/src/ssh.rs +++ b/src/ssh.rs @@ -3,7 +3,7 @@ use std::{ collections::{BTreeSet, HashMap, HashSet}, fmt::Display, net::SocketAddr, - sync::Arc, + sync::{atomic::Ordering, Arc}, }; use crate::{ @@ -23,13 +23,13 @@ use async_trait::async_trait; use log::{debug, info, warn}; use russh::{ server::{Auth, Handler, Msg, Session}, - Channel, ChannelId, ChannelStream, Disconnect, MethodSet, + Channel, ChannelId, ChannelStream, MethodSet, }; use russh_keys::PublicKey; use ssh_key::{Fingerprint, HashAlg}; use tokio::{ io::{copy_bidirectional, AsyncWriteExt}, - sync::{mpsc, oneshot, Mutex, RwLock}, + sync::{mpsc, watch, RwLock}, time::{sleep, timeout}, }; @@ -153,9 +153,7 @@ impl AdminData { } enum AuthenticatedData { - None { - cancelation_tx: Arc>>>, - }, + None, Proxy, User { user_data: Box, @@ -178,10 +176,12 @@ impl Display for AuthenticatedData { } pub(crate) struct ServerHandler { - _timeout_handle: Option>, + id: usize, + timeout_handle: Option>, peer: SocketAddr, user: Option, key_fingerprint: Option, + cancelation_tx: watch::Sender<()>, auth_data: AuthenticatedData, tx: mpsc::UnboundedSender>, rx: Option>>, @@ -193,7 +193,7 @@ pub(crate) trait Server { fn new_client( &mut self, peer_address: SocketAddr, - cancelation_tx: oneshot::Sender<()>, + cancelation_tx: watch::Sender<()>, ) -> ServerHandler; } @@ -202,18 +202,19 @@ impl Server for Arc { fn new_client( &mut self, peer_address: SocketAddr, - cancelation_tx: oneshot::Sender<()>, + cancelation_tx: watch::Sender<()>, ) -> ServerHandler { + let id = self.session_id.fetch_add(1, Ordering::AcqRel); info!("{} connected", peer_address); let (tx, rx) = mpsc::unbounded_channel(); ServerHandler { - _timeout_handle: None, + id, + timeout_handle: None, peer: peer_address, user: None, key_fingerprint: None, - auth_data: AuthenticatedData::None { - cancelation_tx: Arc::new(Mutex::new(Some(cancelation_tx))), - }, + cancelation_tx, + auth_data: AuthenticatedData::None, tx, rx: Some(rx), open_session_join_handle: None, @@ -273,6 +274,13 @@ impl Handler for ServerHandler { .await { if is_authenticated { + self.server + .sessions_password + .lock() + .unwrap() + .entry(user.into()) + .or_default() + .insert(self.id, self.cancelation_tx.clone()); self.user = Some(user.into()); self.auth_data = AuthenticatedData::User { user_data: Box::new(UserData::new(TokenHolder::User( @@ -309,28 +317,26 @@ impl Handler for ServerHandler { let authentication = self .server .fingerprints_validator - .authenticate_fingerprint(self.key_fingerprint.as_ref().unwrap()) - .await; + .authenticate_fingerprint(self.key_fingerprint.as_ref().unwrap()); match authentication { AuthenticationType::None => { // Start timer for user to do local port forwarding. // Otherwise, the connection will be canceled upon expiration - let AuthenticatedData::None { ref cancelation_tx } = self.auth_data else { - warn!("{} ({}) is already authenticated", user, self.peer); - return Ok(Auth::Reject { - proceed_with_methods: None, - }); - }; - let cancelation_tx = Arc::clone(cancelation_tx); + let cancelation_tx = self.cancelation_tx.clone(); let timeout = self.server.idle_connection_timeout; - self._timeout_handle = Some(DroppableHandle(tokio::spawn(async move { + self.timeout_handle = Some(DroppableHandle(tokio::spawn(async move { sleep(timeout).await; - if let Some(cancelation_tx) = cancelation_tx.lock().await.take() { - let _ = cancelation_tx.send(()); - } + let _ = cancelation_tx.send(()); }))); } AuthenticationType::User => { + self.server + .sessions_publickey + .lock() + .unwrap() + .entry(fingerprint) + .or_default() + .insert(self.id, self.cancelation_tx.clone()); self.auth_data = AuthenticatedData::User { user_data: Box::new(UserData::new(TokenHolder::User( UserIdentification::PublicKey(fingerprint), @@ -358,11 +364,11 @@ impl Handler for ServerHandler { &mut self, _channel: ChannelId, data: &[u8], - session: &mut Session, + _session: &mut Session, ) -> Result<(), Self::Error> { // Sending Ctrl+C ends the session and disconnects the client if data == [3] { - session.disconnect(Disconnect::ByApplication, "", "English")?; + let _ = self.cancelation_tx.send(()); return Ok(()); } debug!("received data {:?}", data); @@ -382,6 +388,10 @@ impl Handler for ServerHandler { b"\x1b[B" | b"j" => admin_interface.move_down(), // Esc b"\x1b" => admin_interface.cancel(), + // Enter + b"\r" => admin_interface.enter(), + // Delete + b"\x1b[3~" => admin_interface.delete(), _ => (), } } @@ -895,8 +905,7 @@ impl Handler for ServerHandler { ) .await { - if let AuthenticatedData::None { ref cancelation_tx } = self.auth_data { - cancelation_tx.lock().await.take(); + if self.timeout_handle.take().is_some() { self.auth_data = AuthenticatedData::Proxy; } let _ = handler.log_channel().send( @@ -930,8 +939,7 @@ impl Handler for ServerHandler { ) .await { - if let AuthenticatedData::None { ref cancelation_tx } = self.auth_data { - cancelation_tx.lock().await.take(); + if self.timeout_handle.take().is_some() { self.auth_data = AuthenticatedData::Proxy; } let _ = handler.log_channel().send( @@ -968,8 +976,7 @@ impl Handler for ServerHandler { ) .await { - if let AuthenticatedData::None { ref cancelation_tx } = self.auth_data { - cancelation_tx.lock().await.take(); + if self.timeout_handle.take().is_some() { self.auth_data = AuthenticatedData::Proxy; } let _ = handler.log_channel().send( @@ -1008,11 +1015,28 @@ impl Drop for ServerHandler { match self.auth_data { AuthenticatedData::User { .. } | AuthenticatedData::Admin { .. } => { let server = Arc::clone(&self.server); + let id = self.id; let peer = self.peer; tokio::task::spawn_blocking(move || { server.ssh.remove_by_address(&peer); server.http.remove_by_address(&peer); server.tcp.remove_by_address(&peer); + server + .sessions_password + .lock() + .unwrap() + .retain(|_, session| { + session.remove(&id); + !session.is_empty() + }); + server + .sessions_publickey + .lock() + .unwrap() + .retain(|_, session| { + session.remove(&id); + !session.is_empty() + }); }); } AuthenticatedData::Proxy | AuthenticatedData::None { .. } => (), -- 2.51.2