1ba11afccSDag-Erling Smørgrav FreeBSD maintainer's guide to OpenSSH-portable 2ba11afccSDag-Erling Smørgrav ============================================== 3ba11afccSDag-Erling Smørgrav 474c59ab7SEd Maste These instructions assume you have a clone of the FreeBSD git repo 574c59ab7SEd Maste main branch in src/freebsd/main, and will store vendor trees under 674c59ab7SEd Maste src/freebsd/vendor/. In addition, this assumes there is a "freebsd" 774c59ab7SEd Maste origin pointing to git(repo).freebsd.org/src.git. 874c59ab7SEd Maste 9cf783db1SDag-Erling Smørgrav00) Make sure your mail spool has plenty of free space. It'll fill up 10ba11afccSDag-Erling Smørgrav pretty fast once you're done with this checklist. 11ba11afccSDag-Erling Smørgrav 12cf783db1SDag-Erling Smørgrav01) Download the latest OpenSSH-portable tarball and signature from 139fcda2f4SEd Maste OpenBSD (https://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/). 14ba11afccSDag-Erling Smørgrav 15cf783db1SDag-Erling Smørgrav02) Verify the signature: 16ba11afccSDag-Erling Smørgrav 17cf783db1SDag-Erling Smørgrav $ gpg --verify openssh-X.YpZ.tar.gz.asc 181c71974bSDag-Erling Smørgrav 19cf783db1SDag-Erling Smørgrav03) Unpack the tarball in a suitable directory: 20ba11afccSDag-Erling Smørgrav 21cf783db1SDag-Erling Smørgrav $ tar xf openssh-X.YpZ.tar.gz 22e2fb0b2aSDag-Erling Smørgrav 2374c59ab7SEd Maste04) Copy to a vendor branch: 24ba11afccSDag-Erling Smørgrav 2574c59ab7SEd Maste $ cd src/freebsd/main 2674c59ab7SEd Maste $ git worktree add ../vendor/openssh freebsd/vendor/openssh 2774c59ab7SEd Maste $ cd ../vendor/openssh 2874c59ab7SEd Maste $ rsync --archive --delete --exclude=.git /path/to/openssh-X.YpZ/ ./ 29ba11afccSDag-Erling Smørgrav 30cf783db1SDag-Erling Smørgrav05) Take care of added / deleted files: 31ba11afccSDag-Erling Smørgrav 3274c59ab7SEd Maste $ git add -A 33ba11afccSDag-Erling Smørgrav 34cf783db1SDag-Erling Smørgrav06) Commit: 35ba11afccSDag-Erling Smørgrav 3674c59ab7SEd Maste $ git commit -m "Vendor import of OpenSSH X.YpZ" 37ba11afccSDag-Erling Smørgrav 38cf783db1SDag-Erling Smørgrav07) Tag: 39ba11afccSDag-Erling Smørgrav 4074c59ab7SEd Maste $ git tag -a -m "Tag OpenSSH X.YpZ" vendor/openssh/X.YpZ 41ba11afccSDag-Erling Smørgrav 420591b689SDag-Erling Smørgrav08) Check out head and run the pre-merge script, which strips our RCS 430591b689SDag-Erling Smørgrav tags from files that have them: 44e66498cdSDag-Erling Smørgrav 4574c59ab7SEd Maste $ cd src/freebsd/main/crypto/openssh 46cf783db1SDag-Erling Smørgrav $ sh freebsd-pre-merge.sh 47ba11afccSDag-Erling Smørgrav 48cf783db1SDag-Erling Smørgrav09) Merge from the vendor branch: 49ba11afccSDag-Erling Smørgrav 5074c59ab7SEd Maste $ git subtree merge -P crypto/openssh vendor/openssh 51cf783db1SDag-Erling Smørgrav 5299b201c3SEd Maste A number of files have been deleted from FreeBSD's copy of ssh, 5399b201c3SEd Maste including rendered man pages (which have a .0 extension). When 5474c59ab7SEd Maste git prompts for these deleted files during the merge, choose 'd' 5599b201c3SEd Maste (leaving them deleted). 5699b201c3SEd Maste 57cf783db1SDag-Erling Smørgrav0A) Resolve conflicts. Remember to bump the version addendum in 58cf783db1SDag-Erling Smørgrav version.h, and update the default value in ssh{,d}_config and 59cf783db1SDag-Erling Smørgrav ssh{,d}_config.5. 60cf783db1SDag-Erling Smørgrav 61cf783db1SDag-Erling Smørgrav0B) Diff against the vendor branch: 62cf783db1SDag-Erling Smørgrav 6374c59ab7SEd Maste $ git diff --diff-filter=M vendor/openssh/X.YpZ HEAD:crypto/openssh 64cf783db1SDag-Erling Smørgrav 65cf783db1SDag-Erling Smørgrav Files that have modifications relative to the vendor code, and 66cf783db1SDag-Erling Smørgrav only those files, must have the svn:keywords property set to 67cf783db1SDag-Erling Smørgrav FreeBSD=%H and be listed in the 'keywords' file created by the 68cf783db1SDag-Erling Smørgrav pre-merge script. 69cf783db1SDag-Erling Smørgrav 700591b689SDag-Erling Smørgrav0C) Run the post-merge script, which re-adds RCS tags to files that 710591b689SDag-Erling Smørgrav need them: 72cf783db1SDag-Erling Smørgrav 73cf783db1SDag-Erling Smørgrav $ sh freebsd-post-merge.sh 74cf783db1SDag-Erling Smørgrav 7574c59ab7SEd Maste These tags are not used with git, but we will leave them in place as 7674c59ab7SEd Maste long as svn-based FreeBSD 11.x and 12.x are supported. 7774c59ab7SEd Maste 78cf783db1SDag-Erling Smørgrav0D) Run the configure script: 79cf783db1SDag-Erling Smørgrav 80cf783db1SDag-Erling Smørgrav $ sh freebsd-configure.sh 81cf783db1SDag-Erling Smørgrav 820591b689SDag-Erling Smørgrav0E) Review changes to config.h very carefully. 83cf783db1SDag-Erling Smørgrav 844c3ccd96SEd Maste Note that libwrap should not be defined in config.h; as of 8574c59ab7SEd Maste r311585 (233932cc2a60) it is conditional on MK_TCP_WRAPPERS. 864c3ccd96SEd Maste 87cf783db1SDag-Erling Smørgrav0F) If source files have been added or removed, update the appropriate 88e66498cdSDag-Erling Smørgrav makefiles to reflect changes in the vendor's Makefile.in. 89ba11afccSDag-Erling Smørgrav 904f52dfbbSDag-Erling Smørgrav10) Update ssh_namespace.h: 91ba11afccSDag-Erling Smørgrav 924f52dfbbSDag-Erling Smørgrav $ sh freebsd-namespace.sh 93e66498cdSDag-Erling Smørgrav 944f52dfbbSDag-Erling Smørgrav11) Build and install world, reboot, test. Pay particular attention 95cf783db1SDag-Erling Smørgrav to pam_ssh(8), which gropes inside libssh and will break if 96cf783db1SDag-Erling Smørgrav something significant changes or if ssh_namespace.h is out of 97cf783db1SDag-Erling Smørgrav whack. 98cf783db1SDag-Erling Smørgrav 994f52dfbbSDag-Erling Smørgrav12) Commit, and hunker down for the inevitable storm of complaints. 100ba11afccSDag-Erling Smørgrav 101ba11afccSDag-Erling Smørgrav 102ba11afccSDag-Erling Smørgrav 103ba11afccSDag-Erling Smørgrav An overview of FreeBSD changes to OpenSSH-portable 104ba11afccSDag-Erling Smørgrav ================================================== 105ba11afccSDag-Erling Smørgrav 106*519496a5SEd Maste* don't free string returned by login_getcapstr(3) 107*519496a5SEd Maste 108*519496a5SEd Maste Committed upstream as f060c2bc85d59d111fa18a12eb3872ee4b9f7e97 109*519496a5SEd Maste 110*519496a5SEd Maste* Use login_getpwclass() instead of login_getclass() 111*519496a5SEd Maste 112*519496a5SEd Maste Committed upstream as 3d05e5881ceb2e48e1948ba14292216b56ed792e 113*519496a5SEd Maste 114ba11afccSDag-Erling Smørgrav0) VersionAddendum 115ba11afccSDag-Erling Smørgrav 116ba11afccSDag-Erling Smørgrav The SSH protocol allows for a human-readable version string of up 117ba11afccSDag-Erling Smørgrav to 40 characters to be appended to the protocol version string. 118ba11afccSDag-Erling Smørgrav FreeBSD takes advantage of this to include a date indicating the 119ba11afccSDag-Erling Smørgrav "patch level", so people can easily determine whether their system 120ba11afccSDag-Erling Smørgrav is vulnerable when an OpenSSH advisory goes out. Some people, 121ba11afccSDag-Erling Smørgrav however, dislike advertising their patch level in the protocol 122ba11afccSDag-Erling Smørgrav handshake, so we've added a VersionAddendum configuration variable 1230591b689SDag-Erling Smørgrav to allow them to change or disable it. Upstream added support for 1240591b689SDag-Erling Smørgrav VersionAddendum on the server side, but we also support it on the 1250591b689SDag-Erling Smørgrav client side. 126ba11afccSDag-Erling Smørgrav 127ba11afccSDag-Erling Smørgrav1) Modified server-side defaults 128ba11afccSDag-Erling Smørgrav 129ba11afccSDag-Erling Smørgrav We've modified some configuration defaults in sshd: 130ba11afccSDag-Erling Smørgrav 1310591b689SDag-Erling Smørgrav - UsePAM defaults to "yes". 132ba11afccSDag-Erling Smørgrav - PermitRootLogin defaults to "no". 1330591b689SDag-Erling Smørgrav - X11Forwarding defaults to "yes". 1340591b689SDag-Erling Smørgrav - PasswordAuthentication defaults to "no". 1350591b689SDag-Erling Smørgrav - VersionAddendum defaults to "FreeBSD-YYYYMMDD". 1360591b689SDag-Erling Smørgrav - PrivilegeSeparation defaults to "sandbox". 137c4cd1fa4SDag-Erling Smørgrav - UseDNS defaults to "yes". 138ba11afccSDag-Erling Smørgrav 139ba11afccSDag-Erling Smørgrav2) Modified client-side defaults 140ba11afccSDag-Erling Smørgrav 141ba11afccSDag-Erling Smørgrav We've modified some configuration defaults in ssh: 142ba11afccSDag-Erling Smørgrav 143ba11afccSDag-Erling Smørgrav - CheckHostIP defaults to "no". 1440591b689SDag-Erling Smørgrav - VerifyHostKeyDNS defaults to "yes" if built with LDNS. 1450591b689SDag-Erling Smørgrav - VersionAddendum defaults to "FreeBSD-YYYYMMDD". 146ba11afccSDag-Erling Smørgrav 147ba11afccSDag-Erling Smørgrav3) Canonic host names 148ba11afccSDag-Erling Smørgrav 149ba11afccSDag-Erling Smørgrav We've added code to ssh.c to canonicize the target host name after 150ba11afccSDag-Erling Smørgrav reading options but before trying to connect. This eliminates the 151ba11afccSDag-Erling Smørgrav usual problem with duplicate known_hosts entries. 152ba11afccSDag-Erling Smørgrav 153cb7b8027SDag-Erling Smørgrav4) setusercontext() environment 154ba11afccSDag-Erling Smørgrav 155ba11afccSDag-Erling Smørgrav Our setusercontext(3) can set environment variables, which we must 156ba11afccSDag-Erling Smørgrav take care to transfer to the child's environment. 157ba11afccSDag-Erling Smørgrav 1580591b689SDag-Erling Smørgrav5) TCP wrappers 1590591b689SDag-Erling Smørgrav 1600591b689SDag-Erling Smørgrav Support for TCP wrappers was removed in upstream 6.7p1. We've 1610591b689SDag-Erling Smørgrav added it back by porting the 6.6p1 code forward. 1620591b689SDag-Erling Smørgrav 163e491358cSEd Maste TCP wrappers support in sshd will be disabled in HEAD and will 164e491358cSEd Maste be removed from FreeBSD in the future. 165e491358cSEd Maste 1669ded3306SDag-Erling Smørgrav6) Agent client reference counting 1670591b689SDag-Erling Smørgrav 1680591b689SDag-Erling Smørgrav We've added code to ssh-agent.c to implement client reference 1690591b689SDag-Erling Smørgrav counting; the agent will automatically exit when the last client 1700591b689SDag-Erling Smørgrav disconnects. 1710591b689SDag-Erling Smørgrav 1729ded3306SDag-Erling Smørgrav7) Class-based login restrictions 1730591b689SDag-Erling Smørgrav 1740591b689SDag-Erling Smørgrav We've added code to auth2.c to enforce the host.allow, host.deny, 1750591b689SDag-Erling Smørgrav times.allow and times.deny login class capabilities. 1760591b689SDag-Erling Smørgrav 1779ded3306SDag-Erling Smørgrav8) HPN 1780591b689SDag-Erling Smørgrav 1790591b689SDag-Erling Smørgrav We no longer have the HPN patches (adaptive buffer size for 1800591b689SDag-Erling Smørgrav increased throughput on high-BxD links), but we recognize and 1810591b689SDag-Erling Smørgrav ignore HPN-related configuration options to avoid breaking existing 1820591b689SDag-Erling Smørgrav configurations. 1830591b689SDag-Erling Smørgrav 184ba11afccSDag-Erling Smørgrav 185ba11afccSDag-Erling Smørgrav 186ba11afccSDag-Erling SmørgravThis port was brought to you by (in no particular order) DARPA, NAI 1870085282bSDag-Erling SmørgravLabs, ThinkSec, Nescafé, the Aberlour Glenlivet Distillery Co., 188ba11afccSDag-Erling SmørgravSuzanne Vega, and a Sanford's #69 Deluxe Marker. 189ba11afccSDag-Erling Smørgrav 190ba11afccSDag-Erling Smørgrav -- des@FreeBSD.org 191ba11afccSDag-Erling Smørgrav 192ba11afccSDag-Erling Smørgrav$FreeBSD$ 193