Go to file
Raphael Hertzog 0e042476a0 Add /usr/sbin and /sbin to default root PATH
When dropbear is used in a very restricted environment (such as in a
initrd), the default user shell is often also very restricted
and doesn't take care of setting the PATH so the user ends up
with the PATH set by dropbear. Unfortunately, dropbear always
sets "/usr/bin:/bin" as default PATH even for the root user
which should have /usr/sbin and /sbin too.

For a concrete instance of this problem, see the "Remote Unlocking"
section in this tutorial: https://paxswill.com/blog/2013/11/04/encrypted-raspberry-pi/

It speaks of a bug in the initramfs script because it's written "blkid"
instead of "/sbin/blkid"... this is just because the scripts from the
initramfs do not expect to have a PATH without the sbin directories and
because dropbear is not setting the PATH appropriately for the root user.

I'm thus suggesting to use the attached patch to fix this misbehaviour (I
did not test it, but it's easy enough). It might seem anecdotic but
multiple Kali users have been bitten by this.

From https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=903403
2022-03-30 23:13:34 +08:00
.github Add c89 build test 2022-03-30 14:29:18 +08:00
debian Changelog for 2020.81 2020-10-29 21:35:50 +08:00
fuzz Add -v variable debug levels for server too 2022-03-24 14:44:13 +08:00
libtomcrypt Make SHA1 optional, implement SHA256 fingerprints 2022-03-30 11:44:04 +08:00
libtommath Split CPPFLAGS and CFLAGS more carefully 2022-03-22 16:17:05 +08:00
test Add ecdsa OpenSSH format for dropbearconvert 2022-03-29 23:27:55 +08:00
.gitignore Default options comments, ignore localoptions.h 2022-03-30 13:52:04 +08:00
.hgignore Update .hgignore and .gitignore with tests 2021-10-18 14:26:59 +08:00
.hgsigs Added signature for changeset 5879c5829e85 2020-10-29 21:40:34 +08:00
.hgtags Added tag DROPBEAR_2020.81 for changeset 4b984c42372d 2020-10-29 21:40:27 +08:00
agentfwd.h rsa-sha256 for ssh-agent 2020-05-25 20:23:02 +08:00
algo.h merge rsa-sha256 2020-05-26 00:24:02 +08:00
atomicio.c upgrade atomicio 2016-11-15 14:56:25 +01:00
atomicio.h upgrade atomicio 2016-11-15 14:56:25 +01:00
auth.h add pubkey_info field to authstate structure 2022-03-13 17:37:44 +00:00
bignum.c Use buf_burn_free() instead of two calls 2022-03-29 23:47:30 +08:00
bignum.h add m_mp_free_multi, be more careful freeing when failing to load keys 2017-05-26 21:08:43 +08:00
buffer.c Use buf_burn_free() instead of two calls 2022-03-29 23:47:30 +08:00
buffer.h Use buf_burn_free() instead of two calls 2022-03-29 23:47:30 +08:00
chachapoly.c Fix ChaCha20 on 32-bit platforms (#99) 2020-05-29 21:26:22 +08:00
chachapoly.h Add Chacha20-Poly1305, AES128-GCM and AES256-GCM support (#93) 2020-05-25 23:50:25 +08:00
CHANGES Allow user space file locations (rootless support) 2022-03-30 13:51:57 +08:00
channel.h Leave non-interactive at default QoS class 2022-01-27 14:34:10 +08:00
chansession.h Set SSH_ORIGINAL_COMMAND for "dropbear -c" too, fix build without 2020-03-14 23:28:18 +08:00
circbuffer.c Pointer parameter could be declared as pointing to const 2017-08-19 17:16:13 +02:00
circbuffer.h Pointer parameter could be declared as pointing to const 2017-08-19 17:16:13 +02:00
cli-agentfwd.c Replace ChanType.sepfds with Channel.bidir_fd 2021-10-11 15:42:14 +08:00
cli-auth.c changed TRACE to DEBUG1 for dbclient 2022-03-19 09:02:55 +00:00
cli-authinteract.c Fix declaration after statement 2022-03-30 14:32:49 +08:00
cli-authpasswd.c changed TRACE to DEBUG1 for dbclient 2022-03-19 09:02:55 +00:00
cli-authpubkey.c Use signature type not key type for debug message 2022-03-22 23:28:24 +08:00
cli-channel.c
cli-chansession.c Leave non-interactive at default QoS class 2022-01-27 14:34:10 +08:00
cli-kex.c Add fuzzer-client_nomaths, fix client fuzzer 2020-10-18 15:08:54 +08:00
cli-main.c changed TRACE to DEBUG1 for dbclient 2022-03-19 09:02:55 +00:00
cli-runopts.c increase verboseness by allowing multiple -v 2022-03-19 08:55:31 +00:00
cli-session.c changed TRACE to DEBUG1 for dbclient 2022-03-19 09:02:55 +00:00
cli-tcpfwd.c Leave non-interactive at default QoS class 2022-01-27 14:34:10 +08:00
common-algo.c Remove twofish and remnants of blowfish 2022-03-30 10:23:39 +08:00
common-channel.c Leave non-interactive at default QoS class 2022-01-27 14:34:10 +08:00
common-chansession.c
common-kex.c Make SHA1 optional, implement SHA256 fingerprints 2022-03-30 11:44:04 +08:00
common-runopts.c Default options comments, ignore localoptions.h 2022-03-30 13:52:04 +08:00
common-session.c Use buf_burn_free() instead of two calls 2022-03-29 23:47:30 +08:00
compat.c Merge pull request #31 from bengardner/PATH_DEVNULL 2017-06-02 22:57:09 +08:00
compat.h fix empty C prototypes 2016-03-16 22:41:20 +08:00
config.guess Update to latest config.guess and config.sub 2022-03-30 21:42:23 +08:00
config.h.in Add re-exec for server 2022-01-30 10:14:56 +08:00
config.sub Update to latest config.guess and config.sub 2022-03-30 21:42:23 +08:00
configure Add re-exec for server 2022-01-30 10:14:56 +08:00
configure.ac Add re-exec for server 2022-01-30 10:14:56 +08:00
crypto_desc.c Make SHA1 optional, implement SHA256 fingerprints 2022-03-30 11:44:04 +08:00
crypto_desc.h fix empty C prototypes 2016-03-16 22:41:20 +08:00
curve25519.c void return types for curve25519 2020-05-30 00:05:49 +08:00
curve25519.h void return types for curve25519 2020-05-30 00:05:49 +08:00
dbclient.1 Some minor manpage improvements 2020-12-05 14:56:53 +08:00
dbhelpers.c some linting after fuzz merge (#60) 2018-03-03 11:06:45 +08:00
dbhelpers.h include config.h for options.h. don't need to include options.h when 2018-02-18 11:22:13 +08:00
dbmalloc.c Update LibTomMath to 1.2.0 (#84) 2020-05-26 23:36:47 +08:00
dbmalloc.h Define _GNU_SOURCE properly, other header fixes 2021-03-04 21:03:02 +08:00
dbmulti.c Fix regression in non-symlink dropbearmulti 2022-02-01 23:15:53 +08:00
dbrandom.c Make SHA1 optional, implement SHA256 fingerprints 2022-03-30 11:44:04 +08:00
dbrandom.h Pointer parameter could be declared as pointing to const 2017-08-19 17:16:13 +02:00
dbutil.c Fix C99 comment 2022-03-30 14:28:59 +08:00
dbutil.h Added DEBUG1,DEBUG2,DEBUG3 to separate functions while keeping TRACE and TRACE2. 2022-03-19 09:01:05 +00:00
debug.h Add -v variable debug levels for server too 2022-03-24 14:44:13 +08:00
default_options.h Add /usr/sbin and /sbin to default root PATH 2022-03-30 23:13:34 +08:00
DEVELOPING.md Some notes on style 2020-06-26 20:41:34 +08:00
dh_groups.c Fix typo DROPBEAR_NORMAL_DH 2020-05-28 23:23:54 +08:00
dh_groups.h Fix typo DROPBEAR_NORMAL_DH 2020-05-28 23:23:54 +08:00
dropbear_lint.sh Add linter for #ifdef 2020-05-24 13:15:24 +08:00
dropbear.8 Clarify help text for dropbear -e environment option 2021-08-19 23:17:34 +08:00
dropbearconvert.1 Document supported formats for dropbearconvert 2022-03-30 12:03:50 +08:00
dropbearconvert.c Add -v variable debug levels for server too 2022-03-24 14:44:13 +08:00
dropbearkey.1 Mention Ed25519 in dropbearkey man (#94) 2020-05-25 21:28:27 +08:00
dropbearkey.c Make SHA1 optional, implement SHA256 fingerprints 2022-03-30 11:44:04 +08:00
dss.c Update LibTomMath to 1.2.0 (#84) 2020-05-26 23:36:47 +08:00
dss.h use sigtype where appropriate 2020-04-06 23:18:26 +08:00
ecc.c Update LibTomMath to 1.2.0 (#84) 2020-05-26 23:36:47 +08:00
ecc.h include config.h for options.h. don't need to include options.h when 2018-02-18 11:22:13 +08:00
ecdsa.c Implement server-side support for sk-ecdsa U2F-backed keys (#142) 2022-01-22 21:53:04 +08:00
ecdsa.h It turns out you can't have a single-quote in an #error 2018-03-08 22:37:54 +08:00
ed25519.c Implement server-side support for sk-ecdsa U2F-backed keys (#142) 2022-01-22 21:53:04 +08:00
ed25519.h Implement server-side support for sk-ecdsa U2F-backed keys (#142) 2022-01-22 21:53:04 +08:00
fake-rfc2553.c
fake-rfc2553.h
filelist.txt Add Ed25519 support (#91) 2020-03-12 00:09:45 +08:00
fuzz-wrapfd.h fuzz: wrap kill() 2021-01-29 21:47:56 +08:00
fuzz.h fuzz: fix crash in newtcpdirect(), don't close the channel too early 2021-03-05 22:51:11 +08:00
FUZZER-NOTES.md Add Ed25519 support (#91) 2020-03-12 00:09:45 +08:00
fuzzers_test.sh fuzz: add -q quiet argument for standalone fuzzers. 2021-03-07 21:26:34 +08:00
gcm.c Fix ChaCha20 on 32-bit platforms (#99) 2020-05-29 21:26:22 +08:00
gcm.h Add Chacha20-Poly1305, AES128-GCM and AES256-GCM support (#93) 2020-05-25 23:50:25 +08:00
gendss.c update ltm to 1.1.0 and enable FIPS 186.4 compliant key-generation (#79) 2019-09-16 21:50:38 +08:00
gendss.h Convert #ifdef to #if, other build changes 2016-05-04 15:33:40 +02:00
gened25519.c Add Ed25519 support (#91) 2020-03-12 00:09:45 +08:00
gened25519.h Add Ed25519 support (#91) 2020-03-12 00:09:45 +08:00
genrsa.c Update LibTomMath to 1.2.0 (#84) 2020-05-26 23:36:47 +08:00
genrsa.h Convert #ifdef to #if, other build changes 2016-05-04 15:33:40 +02:00
gensignkey.c Use buf_burn_free() instead of two calls 2022-03-29 23:47:30 +08:00
gensignkey.h add configuration option for default RSA size. 2017-06-24 23:32:25 +08:00
ifndef_wrapper.sh avoid extended regex features to avoid caring about sed -r vs -E 2018-07-24 20:19:05 +08:00
includes.h Add re-exec for server 2022-01-30 10:14:56 +08:00
INSTALL Add configure script to version control. Set timezone for release tarball 2021-03-31 23:23:14 +08:00
install-sh
kex.h Allow DH to be completely disabled (#97) 2020-05-28 23:01:48 +08:00
keyimport.c Remove commented ssh.com code from keyimport 2022-03-30 10:10:15 +08:00
keyimport.h Pointer parameter could be declared as pointing to const 2017-08-19 17:16:13 +02:00
LICENSE Refer to libtom license files 2020-06-25 23:18:16 +08:00
list.c include config.h for options.h. don't need to include options.h when 2018-02-18 11:22:13 +08:00
list.h fix empty C prototypes 2016-03-16 22:41:20 +08:00
listener.c Fix null pointer dereference removing listeners 2020-12-07 20:03:24 +08:00
listener.h Pointer parameter could be declared as pointing to const (callback) 2017-08-19 22:39:53 +02:00
loginrec.c loginrec close fd on error path 2018-02-17 12:16:18 +08:00
loginrec.h
ltc_prng.c include config.h for options.h. don't need to include options.h when 2018-02-18 11:22:13 +08:00
ltc_prng.h include config.h for options.h. don't need to include options.h when 2018-02-18 11:22:13 +08:00
Makefile.in Support RSA OpenSSH new format in dropbearconvert 2022-03-29 22:27:55 +08:00
MULTI
netio.c Merge netio changes 2022-01-27 15:09:29 +08:00
netio.h Leave non-interactive at default QoS class 2022-01-27 14:34:10 +08:00
options.h mention localoptions.h being build directory, fix underscore in CHANGES 2018-03-01 22:12:30 +08:00
packet.c Load password and key for client fuzzer. 2020-10-20 23:34:38 +08:00
packet.h get rid of unused packet_type in encrypted write queue 2018-03-04 14:57:18 +08:00
process-packet.c merge rsa-sha256 2020-05-26 00:24:02 +08:00
progressmeter.c
progressmeter.h
pubkeyapi.h Rename EPKA -> Plugin 2019-05-15 21:59:45 +08:00
queue.c Pointer parameter could be declared as pointing to const 2017-08-19 17:16:13 +02:00
queue.h Pointer parameter could be declared as pointing to const 2017-08-19 17:16:13 +02:00
README Add Ed25519 support (#91) 2020-03-12 00:09:45 +08:00
release.sh Add release.sh --testrel, github action 2022-03-24 12:22:07 +08:00
rsa.c Update LibTomMath to 1.2.0 (#84) 2020-05-26 23:36:47 +08:00
rsa.h split signkey_type and signature_type for RSA sha1 vs sha256 2020-05-17 23:58:31 +08:00
runopts.h added quiet variable in cli_opts 2022-03-14 09:50:07 +08:00
scp.c Remove unused argument of do_cmd() in scp.c (#125) 2021-08-19 23:40:58 +08:00
scpmisc.c use strlcpy & strlcat (#74) 2019-03-20 22:09:19 +08:00
scpmisc.h fix some gcc warnings (#73) 2019-03-20 22:25:15 +08:00
service.h fix empty C prototypes 2016-03-16 22:41:20 +08:00
session.h added option to disable trivial auth methods (#128) 2021-08-19 23:37:14 +08:00
signkey_ossh.c Add ecdsa OpenSSH format for dropbearconvert 2022-03-29 23:27:55 +08:00
signkey_ossh.h Add ecdsa OpenSSH format for dropbearconvert 2022-03-29 23:27:55 +08:00
signkey.c Make SHA1 optional, implement SHA256 fingerprints 2022-03-30 11:44:04 +08:00
signkey.h Implement server-side support for sk-ecdsa U2F-backed keys (#142) 2022-01-22 21:53:04 +08:00
sk-ecdsa.c Handle ecdsa-sk flags, reject no-touch 2022-03-30 21:06:15 +08:00
sk-ecdsa.h Implement server-side support for sk-ecdsa U2F-backed keys (#142) 2022-01-22 21:53:04 +08:00
sk-ed25519.c Handle ecdsa-sk flags, reject no-touch 2022-03-30 21:06:15 +08:00
sk-ed25519.h Implement server-side support for sk-ecdsa U2F-backed keys (#142) 2022-01-22 21:53:04 +08:00
SMALL Remove twofish and remnants of blowfish 2022-03-30 10:23:39 +08:00
ssh.h Handle ecdsa-sk flags, reject no-touch 2022-03-30 21:06:15 +08:00
sshpty.c
sshpty.h
svr-agentfwd.c Replace ChanType.sepfds with Channel.bidir_fd 2021-10-11 15:42:14 +08:00
svr-auth.c Define _GNU_SOURCE properly, other header fixes 2021-03-04 21:03:02 +08:00
svr-authpam.c Fix for issue successfull login of disabled user (#78) 2019-03-20 22:03:40 +08:00
svr-authpasswd.c limit password length to 100 2019-03-21 00:09:07 +08:00
svr-authpubkey.c Check authorized_keys permissions as the user 2022-03-30 12:56:09 +08:00
svr-authpubkeyoptions.c extract pubkey_info when seuccesfully auth with a key and free it in the cleanup function 2022-03-13 17:38:13 +00:00
svr-chansession.c Add /usr/sbin and /sbin to default root PATH 2022-03-30 23:13:34 +08:00
svr-kex.c Allow user space file locations (rootless support) 2022-03-30 13:51:57 +08:00
svr-main.c Avoid unused argument warning when reexec is unused 2022-02-03 22:12:11 +08:00
svr-runopts.c Allow user space file locations (rootless support) 2022-03-30 13:51:57 +08:00
svr-service.c more linting (#58) 2018-02-26 21:31:15 +08:00
svr-session.c Fix some outdated comments 2021-10-11 15:14:46 +08:00
svr-tcpfwd.c Leave non-interactive at default QoS class 2022-01-27 14:34:10 +08:00
svr-x11fwd.c Replace ChanType.sepfds with Channel.bidir_fd 2021-10-11 15:42:14 +08:00
sysoptions.h Make SHA1 optional, implement SHA256 fingerprints 2022-03-30 11:44:04 +08:00
tcp-accept.c Leave non-interactive at default QoS class 2022-01-27 14:34:10 +08:00
tcpfwd.h Leave non-interactive at default QoS class 2022-01-27 14:34:10 +08:00
termcodes.c termcodes: make VEOL2, VWERASE, VLNEXT, ECHOCTL, and ECHOKE optional 2016-05-25 10:03:53 -05:00
termcodes.h
x11fwd.h Pointer parameter could be declared as pointing to const 2017-08-19 17:16:13 +02:00

This is Dropbear, a smallish SSH server and client.
https://matt.ucc.asn.au/dropbear/dropbear.html

INSTALL has compilation instructions.

MULTI has instructions on making a multi-purpose binary (ie a single binary
which performs multiple tasks, to save disk space)

SMALL has some tips on creating small binaries.

Please contact me if you have any questions/bugs found/features/ideas/comments etc :)
There is also a mailing list http://lists.ucc.gu.uwa.edu.au/mailman/listinfo/dropbear

Matt Johnston
matt@ucc.asn.au


In the absence of detailed documentation, some notes follow:
============================================================================

Server public key auth:

You can use ~/.ssh/authorized_keys in the same way as with OpenSSH, just put
the key entries in that file. They should be of the form:

ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEAwVa6M6cGVmUcLl2cFzkxEoJd06Ub4bVDsYrWvXhvUV+ZAM9uGuewZBDoAqNKJxoIn0Hyd0Nk/yU99UVv6NWV/5YSHtnf35LKds56j7cuzoQpFIdjNwdxAN0PCET/MG8qyskG/2IE2DPNIaJ3Wy+Ws4IZEgdJgPlTYUBWWtCWOGc= someone@hostname

You must make sure that ~/.ssh, and the key file, are only writable by the
user. Beware of editors that split the key into multiple lines.

Dropbear supports some options for authorized_keys entries, see the manpage.

============================================================================

Client public key auth:

Dropbear can do public key auth as a client, but you will have to convert
OpenSSH style keys to Dropbear format, or use dropbearkey to create them.

If you have an OpenSSH-style private key ~/.ssh/id_rsa, you need to do:

dropbearconvert openssh dropbear ~/.ssh/id_rsa  ~/.ssh/id_rsa.db
dbclient -i ~/.ssh/id_rsa.db <hostname>

Dropbear does not support encrypted hostkeys though can connect to ssh-agent.

============================================================================

If you want to get the public-key portion of a Dropbear private key, look at
dropbearkey's '-y' option.

============================================================================

To run the server, you need to generate server keys, this is one-off:
./dropbearkey -t rsa -f dropbear_rsa_host_key
./dropbearkey -t dss -f dropbear_dss_host_key
./dropbearkey -t ecdsa -f dropbear_ecdsa_host_key
./dropbearkey -t ed25519 -f dropbear_ed25519_host_key

or alternatively convert OpenSSH keys to Dropbear:
./dropbearconvert openssh dropbear /etc/ssh/ssh_host_dsa_key dropbear_dss_host_key

You can also get Dropbear to create keys when the first connection is made -
this is preferable to generating keys when the system boots. Make sure 
/etc/dropbear/ exists and then pass '-R' to the dropbear server.

============================================================================

If the server is run as non-root, you most likely won't be able to allocate a
pty, and you cannot login as any user other than that running the daemon
(obviously). Shadow passwords will also be unusable as non-root.

============================================================================

The Dropbear distribution includes a standalone version of OpenSSH's scp
program. You can compile it with "make scp", you may want to change the path
of the ssh binary, specified by _PATH_SSH_PROGRAM in options.h . By default
the progress meter isn't compiled in to save space, you can enable it by 
adding 'SCPPROGRESS=1' to the make commandline.