Implement role-aware HTTPS and SSH authentication
This commit is contained in:
+19
-14
@@ -14,7 +14,7 @@
|
||||
#include "secure_random.h"
|
||||
#include "ssh_security.h"
|
||||
#include "ssh_transport.h"
|
||||
#include "web_security.h"
|
||||
#include "user_database.h"
|
||||
|
||||
static void print_usage(void)
|
||||
{
|
||||
@@ -43,6 +43,13 @@ static const char *state_name(ssh_transport_session_state_t state)
|
||||
}
|
||||
}
|
||||
|
||||
static const char *auth_method_name(user_auth_method_t method)
|
||||
{
|
||||
return method == USER_AUTH_METHOD_PASSWORD
|
||||
? "password"
|
||||
: method == USER_AUTH_METHOD_SSH_PUBLIC_KEY ? "public-key" : "unknown";
|
||||
}
|
||||
|
||||
static int print_sessions(const ssh_transport_snapshot_t *snapshot)
|
||||
{
|
||||
printf("SSH sessions: active=%" PRIu32 "/%u\n",
|
||||
@@ -52,10 +59,18 @@ static int print_sessions(const ssh_transport_snapshot_t *snapshot)
|
||||
if (!session->active) {
|
||||
continue;
|
||||
}
|
||||
printf(" id=%" PRIu32 " slot=%u peer=%s state=%s auth=%s broker=%" PRIu32
|
||||
" role=%s rx-pending=%s tx-pending=%s closing=%s\n",
|
||||
printf(" id=%" PRIu32 " slot=%u peer=%s state=%s auth=%s account=%s"
|
||||
" user-role=%s method=%s broker=%" PRIu32
|
||||
" broker-role=%s rx-pending=%s tx-pending=%s closing=%s\n",
|
||||
session->session_id, (unsigned int)index, session->peer,
|
||||
state_name(session->state), session->authenticated ? "yes" : "no",
|
||||
session->principal_valid ? session->username : "-",
|
||||
session->principal_valid
|
||||
? user_role_to_string(session->user_role)
|
||||
: "-",
|
||||
session->principal_valid
|
||||
? auth_method_name(session->auth_method)
|
||||
: "-",
|
||||
session->broker_client_id,
|
||||
session->broker_client_id == SESSION_BROKER_NO_CLIENT
|
||||
? "unattached"
|
||||
@@ -76,23 +91,13 @@ static int show_status(bool sessions_only)
|
||||
return 1;
|
||||
}
|
||||
if (!sessions_only) {
|
||||
char username[WEB_SECURITY_USERNAME_CAPACITY + 1U] = {0};
|
||||
size_t username_length = 0U;
|
||||
esp_err_t username_error = web_security_copy_username(
|
||||
username, sizeof(username), &username_length);
|
||||
printf("SSH: initialized=%s running=%s transitioning=%s port=%u last-error=%s\n",
|
||||
snapshot.initialized ? "yes" : "no",
|
||||
snapshot.running ? "yes" : "no",
|
||||
snapshot.transitioning ? "yes" : "no",
|
||||
(unsigned int)snapshot.port,
|
||||
esp_err_to_name(snapshot.last_error));
|
||||
if (username_error == ESP_OK) {
|
||||
printf("Authentication: SSH password, username=%.*s, shared with HTTPS\n",
|
||||
(int)username_length, username);
|
||||
} else {
|
||||
printf("Administrative credentials unavailable: %s\n",
|
||||
esp_err_to_name(username_error));
|
||||
}
|
||||
printf("Authentication: role-based password and SSH public key via user database\n");
|
||||
printf("Admission: shell/PTY only; exec, subsystem, forwarding, SCP, and SFTP disabled\n");
|
||||
printf("Owner task: core=%" PRId32 " stack=%" PRIu32
|
||||
" minimum-free=%" PRIu32 " bytes\n",
|
||||
|
||||
Reference in New Issue
Block a user