mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-09-21 18:37:58 +03:00
c377e6af29
This is very basic and doesn't support many features. Instead of describing what it *doesn't* support, I'll describe what I have tested: 1. Public key authentication (password is not supported) 2. Single command execution 3. PTY-less interactive bash shell (/bin/sh doesn't work) 4. Multi-user (i.e you can ssh as 'anon' as well as root)
96 lines
2.3 KiB
Diff
96 lines
2.3 KiB
Diff
Dropbear temporarily drops privilliges to make sure the user has access
|
|
to do various actions (e.g access its authorized_keys file).
|
|
Serenity doesn't implement seteuid/setegid, so we can't drop privilliges and
|
|
regain them this way (at least, not that I know it's possible).
|
|
--- a/svr-authpubkey.c.orig
|
|
+++ b/svr-authpubkey.c
|
|
@@ -347,25 +347,8 @@
|
|
snprintf(filename, len + 22, "%s/.ssh/authorized_keys",
|
|
ses.authstate.pw_dir);
|
|
|
|
-#if DROPBEAR_SVR_MULTIUSER
|
|
- /* open the file as the authenticating user. */
|
|
- origuid = getuid();
|
|
- origgid = getgid();
|
|
- if ((setegid(ses.authstate.pw_gid)) < 0 ||
|
|
- (seteuid(ses.authstate.pw_uid)) < 0) {
|
|
- dropbear_exit("Failed to set euid");
|
|
- }
|
|
-#endif
|
|
-
|
|
authfile = fopen(filename, "r");
|
|
|
|
-#if DROPBEAR_SVR_MULTIUSER
|
|
- if ((seteuid(origuid)) < 0 ||
|
|
- (setegid(origgid)) < 0) {
|
|
- dropbear_exit("Failed to revert euid");
|
|
- }
|
|
-#endif
|
|
-
|
|
if (authfile == NULL) {
|
|
goto out;
|
|
}
|
|
--- a/svr-agentfwd.c.orig
|
|
+++ b/svr-agentfwd.c
|
|
@@ -151,17 +151,6 @@
|
|
|
|
if (chansess->agentfile != NULL && chansess->agentdir != NULL) {
|
|
|
|
-#if DROPBEAR_SVR_MULTIUSER
|
|
- /* Remove the dir as the user. That way they can't cause problems except
|
|
- * for themselves */
|
|
- uid = getuid();
|
|
- gid = getgid();
|
|
- if ((setegid(ses.authstate.pw_gid)) < 0 ||
|
|
- (seteuid(ses.authstate.pw_uid)) < 0) {
|
|
- dropbear_exit("Failed to set euid");
|
|
- }
|
|
-#endif
|
|
-
|
|
/* 2 for "/" and "\0" */
|
|
len = strlen(chansess->agentdir) + strlen(chansess->agentfile) + 2;
|
|
|
|
@@ -172,13 +161,6 @@
|
|
|
|
rmdir(chansess->agentdir);
|
|
|
|
-#if DROPBEAR_SVR_MULTIUSER
|
|
- if ((seteuid(uid)) < 0 ||
|
|
- (setegid(gid)) < 0) {
|
|
- dropbear_exit("Failed to revert euid");
|
|
- }
|
|
-#endif
|
|
-
|
|
m_free(chansess->agentfile);
|
|
m_free(chansess->agentdir);
|
|
}
|
|
@@ -220,16 +202,6 @@
|
|
gid_t gid;
|
|
int ret = DROPBEAR_FAILURE;
|
|
|
|
-#if DROPBEAR_SVR_MULTIUSER
|
|
- /* drop to user privs to make the dir/file */
|
|
- uid = getuid();
|
|
- gid = getgid();
|
|
- if ((setegid(ses.authstate.pw_gid)) < 0 ||
|
|
- (seteuid(ses.authstate.pw_uid)) < 0) {
|
|
- dropbear_exit("Failed to set euid");
|
|
- }
|
|
-#endif
|
|
-
|
|
memset((void*)&addr, 0x0, sizeof(addr));
|
|
addr.sun_family = AF_UNIX;
|
|
|
|
@@ -268,12 +240,6 @@
|
|
|
|
|
|
out:
|
|
-#if DROPBEAR_SVR_MULTIUSER
|
|
- if ((seteuid(uid)) < 0 ||
|
|
- (setegid(gid)) < 0) {
|
|
- dropbear_exit("Failed to revert euid");
|
|
- }
|
|
-#endif
|
|
return ret;
|
|
}
|
|
|