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 42576b477bSEd Maste At this point the vendor branch can be pushed to the FreeBSD repo via: 43576b477bSEd Maste 44576b477bSEd Maste $ git push freebsd vendor/openssh 45576b477bSEd Maste 46576b477bSEd Maste (It could also be pushed later on, along with the merge to main, but 47576b477bSEd Maste pushing now allows others to collaborate.) 48576b477bSEd Maste 490591b689SDag-Erling Smørgrav08) Check out head and run the pre-merge script, which strips our RCS 500591b689SDag-Erling Smørgrav tags from files that have them: 51e66498cdSDag-Erling Smørgrav 5274c59ab7SEd Maste $ cd src/freebsd/main/crypto/openssh 53cf783db1SDag-Erling Smørgrav $ sh freebsd-pre-merge.sh 54ba11afccSDag-Erling Smørgrav 55cf783db1SDag-Erling Smørgrav09) Merge from the vendor branch: 56ba11afccSDag-Erling Smørgrav 5774c59ab7SEd Maste $ git subtree merge -P crypto/openssh vendor/openssh 58cf783db1SDag-Erling Smørgrav 5999b201c3SEd Maste A number of files have been deleted from FreeBSD's copy of ssh, 6099b201c3SEd Maste including rendered man pages (which have a .0 extension). When 6174c59ab7SEd Maste git prompts for these deleted files during the merge, choose 'd' 6299b201c3SEd Maste (leaving them deleted). 6399b201c3SEd Maste 64cf783db1SDag-Erling Smørgrav0A) Resolve conflicts. Remember to bump the version addendum in 65cf783db1SDag-Erling Smørgrav version.h, and update the default value in ssh{,d}_config and 66cf783db1SDag-Erling Smørgrav ssh{,d}_config.5. 67cf783db1SDag-Erling Smørgrav 68cf783db1SDag-Erling Smørgrav0B) Diff against the vendor branch: 69cf783db1SDag-Erling Smørgrav 7074c59ab7SEd Maste $ git diff --diff-filter=M vendor/openssh/X.YpZ HEAD:crypto/openssh 71cf783db1SDag-Erling Smørgrav 72cf783db1SDag-Erling Smørgrav Files that have modifications relative to the vendor code, and 73cf783db1SDag-Erling Smørgrav only those files, must have the svn:keywords property set to 74cf783db1SDag-Erling Smørgrav FreeBSD=%H and be listed in the 'keywords' file created by the 75cf783db1SDag-Erling Smørgrav pre-merge script. 76cf783db1SDag-Erling Smørgrav 770591b689SDag-Erling Smørgrav0C) Run the post-merge script, which re-adds RCS tags to files that 780591b689SDag-Erling Smørgrav need them: 79cf783db1SDag-Erling Smørgrav 80cf783db1SDag-Erling Smørgrav $ sh freebsd-post-merge.sh 81cf783db1SDag-Erling Smørgrav 8274c59ab7SEd Maste These tags are not used with git, but we will leave them in place as 8374c59ab7SEd Maste long as svn-based FreeBSD 11.x and 12.x are supported. 8474c59ab7SEd Maste 85cf783db1SDag-Erling Smørgrav0D) Run the configure script: 86cf783db1SDag-Erling Smørgrav 87cf783db1SDag-Erling Smørgrav $ sh freebsd-configure.sh 88cf783db1SDag-Erling Smørgrav 890591b689SDag-Erling Smørgrav0E) Review changes to config.h very carefully. 90cf783db1SDag-Erling Smørgrav 914c3ccd96SEd Maste Note that libwrap should not be defined in config.h; as of 9274c59ab7SEd Maste r311585 (233932cc2a60) it is conditional on MK_TCP_WRAPPERS. 934c3ccd96SEd Maste 94cf783db1SDag-Erling Smørgrav0F) If source files have been added or removed, update the appropriate 95e66498cdSDag-Erling Smørgrav makefiles to reflect changes in the vendor's Makefile.in. 96ba11afccSDag-Erling Smørgrav 974f52dfbbSDag-Erling Smørgrav10) Update ssh_namespace.h: 98ba11afccSDag-Erling Smørgrav 994f52dfbbSDag-Erling Smørgrav $ sh freebsd-namespace.sh 100e66498cdSDag-Erling Smørgrav 1014f52dfbbSDag-Erling Smørgrav11) Build and install world, reboot, test. Pay particular attention 102cf783db1SDag-Erling Smørgrav to pam_ssh(8), which gropes inside libssh and will break if 103cf783db1SDag-Erling Smørgrav something significant changes or if ssh_namespace.h is out of 104cf783db1SDag-Erling Smørgrav whack. 105cf783db1SDag-Erling Smørgrav 106*438fd19dSEd Maste12) Update nanobsd's copies of the ssh config files: 107*438fd19dSEd Maste 108*438fd19dSEd Maste tools/tools/nanobsd/rescue/Files/etc/ssh/ssh_config 109*438fd19dSEd Maste tools/tools/nanobsd/rescue/Files/etc/ssh/sshd_config 110*438fd19dSEd Maste 111*438fd19dSEd Maste13) Commit, and hunker down for the inevitable storm of complaints. 112ba11afccSDag-Erling Smørgrav 113ba11afccSDag-Erling Smørgrav 114ba11afccSDag-Erling Smørgrav 115ba11afccSDag-Erling Smørgrav An overview of FreeBSD changes to OpenSSH-portable 116ba11afccSDag-Erling Smørgrav ================================================== 117ba11afccSDag-Erling Smørgrav 118ba11afccSDag-Erling Smørgrav0) VersionAddendum 119ba11afccSDag-Erling Smørgrav 120ba11afccSDag-Erling Smørgrav The SSH protocol allows for a human-readable version string of up 121ba11afccSDag-Erling Smørgrav to 40 characters to be appended to the protocol version string. 122ba11afccSDag-Erling Smørgrav FreeBSD takes advantage of this to include a date indicating the 123ba11afccSDag-Erling Smørgrav "patch level", so people can easily determine whether their system 124ba11afccSDag-Erling Smørgrav is vulnerable when an OpenSSH advisory goes out. Some people, 125ba11afccSDag-Erling Smørgrav however, dislike advertising their patch level in the protocol 126ba11afccSDag-Erling Smørgrav handshake, so we've added a VersionAddendum configuration variable 1270591b689SDag-Erling Smørgrav to allow them to change or disable it. Upstream added support for 1280591b689SDag-Erling Smørgrav VersionAddendum on the server side, but we also support it on the 1290591b689SDag-Erling Smørgrav client side. 130ba11afccSDag-Erling Smørgrav 131ba11afccSDag-Erling Smørgrav1) Modified server-side defaults 132ba11afccSDag-Erling Smørgrav 133ba11afccSDag-Erling Smørgrav We've modified some configuration defaults in sshd: 134ba11afccSDag-Erling Smørgrav 1350591b689SDag-Erling Smørgrav - UsePAM defaults to "yes". 136ba11afccSDag-Erling Smørgrav - PermitRootLogin defaults to "no". 1370591b689SDag-Erling Smørgrav - X11Forwarding defaults to "yes". 1380591b689SDag-Erling Smørgrav - PasswordAuthentication defaults to "no". 1390591b689SDag-Erling Smørgrav - VersionAddendum defaults to "FreeBSD-YYYYMMDD". 1400591b689SDag-Erling Smørgrav - PrivilegeSeparation defaults to "sandbox". 141c4cd1fa4SDag-Erling Smørgrav - UseDNS defaults to "yes". 142ba11afccSDag-Erling Smørgrav 143ba11afccSDag-Erling Smørgrav2) Modified client-side defaults 144ba11afccSDag-Erling Smørgrav 145ba11afccSDag-Erling Smørgrav We've modified some configuration defaults in ssh: 146ba11afccSDag-Erling Smørgrav 147ba11afccSDag-Erling Smørgrav - CheckHostIP defaults to "no". 1480591b689SDag-Erling Smørgrav - VerifyHostKeyDNS defaults to "yes" if built with LDNS. 1490591b689SDag-Erling Smørgrav - VersionAddendum defaults to "FreeBSD-YYYYMMDD". 150ba11afccSDag-Erling Smørgrav 151ba11afccSDag-Erling Smørgrav3) Canonic host names 152ba11afccSDag-Erling Smørgrav 153ba11afccSDag-Erling Smørgrav We've added code to ssh.c to canonicize the target host name after 154ba11afccSDag-Erling Smørgrav reading options but before trying to connect. This eliminates the 155ba11afccSDag-Erling Smørgrav usual problem with duplicate known_hosts entries. 156ba11afccSDag-Erling Smørgrav 157cb7b8027SDag-Erling Smørgrav4) setusercontext() environment 158ba11afccSDag-Erling Smørgrav 159ba11afccSDag-Erling Smørgrav Our setusercontext(3) can set environment variables, which we must 160ba11afccSDag-Erling Smørgrav take care to transfer to the child's environment. 161ba11afccSDag-Erling Smørgrav 1620591b689SDag-Erling Smørgrav5) TCP wrappers 1630591b689SDag-Erling Smørgrav 1640591b689SDag-Erling Smørgrav Support for TCP wrappers was removed in upstream 6.7p1. We've 1650591b689SDag-Erling Smørgrav added it back by porting the 6.6p1 code forward. 1660591b689SDag-Erling Smørgrav 167e491358cSEd Maste TCP wrappers support in sshd will be disabled in HEAD and will 168e491358cSEd Maste be removed from FreeBSD in the future. 169e491358cSEd Maste 1709ded3306SDag-Erling Smørgrav6) Agent client reference counting 1710591b689SDag-Erling Smørgrav 1720591b689SDag-Erling Smørgrav We've added code to ssh-agent.c to implement client reference 1730591b689SDag-Erling Smørgrav counting; the agent will automatically exit when the last client 1740591b689SDag-Erling Smørgrav disconnects. 1750591b689SDag-Erling Smørgrav 176f3fd8850SEd Maste7) Class-based login restrictions (27ceebbc2402) 1770591b689SDag-Erling Smørgrav 178f3fd8850SEd Maste We've added code to auth.c to enforce the host.allow, host.deny, 179f3fd8850SEd Maste times.allow and times.deny login class capabilities, based on an 180f3fd8850SEd Maste upstream submission from 181f3fd8850SEd Maste https://github.com/openssh/openssh-portable/pull/262. 18235a03425SEd Maste 1839ded3306SDag-Erling Smørgrav8) HPN 1840591b689SDag-Erling Smørgrav 1850591b689SDag-Erling Smørgrav We no longer have the HPN patches (adaptive buffer size for 1860591b689SDag-Erling Smørgrav increased throughput on high-BxD links), but we recognize and 1870591b689SDag-Erling Smørgrav ignore HPN-related configuration options to avoid breaking existing 1880591b689SDag-Erling Smørgrav configurations. 1890591b689SDag-Erling Smørgrav 190ba11afccSDag-Erling Smørgrav 191ba11afccSDag-Erling Smørgrav 192ba11afccSDag-Erling SmørgravThis port was brought to you by (in no particular order) DARPA, NAI 1930085282bSDag-Erling SmørgravLabs, ThinkSec, Nescafé, the Aberlour Glenlivet Distillery Co., 194ba11afccSDag-Erling SmørgravSuzanne Vega, and a Sanford's #69 Deluxe Marker. 195ba11afccSDag-Erling Smørgrav 196ba11afccSDag-Erling Smørgrav -- des@FreeBSD.org 197ba11afccSDag-Erling Smørgrav 198ba11afccSDag-Erling Smørgrav$FreeBSD$ 199