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 45ab7d0959SEd Maste $ git push freebsd vendor/openssh/X.YpZ 46576b477bSEd Maste 47ab7d0959SEd Maste Note the second "git push" command is used to push the tag, which is 48ab7d0959SEd Maste not pushed by default. 49ab7d0959SEd Maste 50ab7d0959SEd Maste It is also possible to push the branch and tag together, but use 51ab7d0959SEd Maste --dry-run first to ensure that no undesired tags will be pushed: 52ab7d0959SEd Maste 53ab7d0959SEd Maste $ git push --dry-run --follow-tags freebsd vendor/openssh 54ab7d0959SEd Maste $ git push --follow-tags freebsd vendor/openssh 55ab7d0959SEd Maste 56ab7d0959SEd Maste The update and tag could instead be pushed later, along with the merge 57ab7d0959SEd Maste to main, but pushing now allows others to collaborate. 58576b477bSEd Maste 590591b689SDag-Erling Smørgrav08) Check out head and run the pre-merge script, which strips our RCS 600591b689SDag-Erling Smørgrav tags from files that have them: 61e66498cdSDag-Erling Smørgrav 6274c59ab7SEd Maste $ cd src/freebsd/main/crypto/openssh 63cf783db1SDag-Erling Smørgrav $ sh freebsd-pre-merge.sh 64ba11afccSDag-Erling Smørgrav 65cf783db1SDag-Erling Smørgrav09) Merge from the vendor branch: 66ba11afccSDag-Erling Smørgrav 6774c59ab7SEd Maste $ git subtree merge -P crypto/openssh vendor/openssh 68cf783db1SDag-Erling Smørgrav 6999b201c3SEd Maste A number of files have been deleted from FreeBSD's copy of ssh, 7099b201c3SEd Maste including rendered man pages (which have a .0 extension). When 7174c59ab7SEd Maste git prompts for these deleted files during the merge, choose 'd' 7299b201c3SEd Maste (leaving them deleted). 7399b201c3SEd Maste 74cf783db1SDag-Erling Smørgrav0A) Resolve conflicts. Remember to bump the version addendum in 75cf783db1SDag-Erling Smørgrav version.h, and update the default value in ssh{,d}_config and 76cf783db1SDag-Erling Smørgrav ssh{,d}_config.5. 77cf783db1SDag-Erling Smørgrav 78cf783db1SDag-Erling Smørgrav0B) Diff against the vendor branch: 79cf783db1SDag-Erling Smørgrav 8074c59ab7SEd Maste $ git diff --diff-filter=M vendor/openssh/X.YpZ HEAD:crypto/openssh 81cf783db1SDag-Erling Smørgrav 82cf783db1SDag-Erling Smørgrav Files that have modifications relative to the vendor code, and 83cf783db1SDag-Erling Smørgrav only those files, must have the svn:keywords property set to 84cf783db1SDag-Erling Smørgrav FreeBSD=%H and be listed in the 'keywords' file created by the 85cf783db1SDag-Erling Smørgrav pre-merge script. 86cf783db1SDag-Erling Smørgrav 870591b689SDag-Erling Smørgrav0C) Run the post-merge script, which re-adds RCS tags to files that 880591b689SDag-Erling Smørgrav need them: 89cf783db1SDag-Erling Smørgrav 90cf783db1SDag-Erling Smørgrav $ sh freebsd-post-merge.sh 91cf783db1SDag-Erling Smørgrav 9274c59ab7SEd Maste These tags are not used with git, but we will leave them in place as 932e6ec1e4SEd Maste long as svn-based FreeBSD 12.x is supported. 9474c59ab7SEd Maste 95cf783db1SDag-Erling Smørgrav0D) Run the configure script: 96cf783db1SDag-Erling Smørgrav 97cf783db1SDag-Erling Smørgrav $ sh freebsd-configure.sh 98cf783db1SDag-Erling Smørgrav 990591b689SDag-Erling Smørgrav0E) Review changes to config.h very carefully. 100cf783db1SDag-Erling Smørgrav 1014c3ccd96SEd Maste Note that libwrap should not be defined in config.h; as of 10274c59ab7SEd Maste r311585 (233932cc2a60) it is conditional on MK_TCP_WRAPPERS. 1034c3ccd96SEd Maste 104cf783db1SDag-Erling Smørgrav0F) If source files have been added or removed, update the appropriate 105e66498cdSDag-Erling Smørgrav makefiles to reflect changes in the vendor's Makefile.in. 106ba11afccSDag-Erling Smørgrav 1074f52dfbbSDag-Erling Smørgrav10) Update ssh_namespace.h: 108ba11afccSDag-Erling Smørgrav 1094f52dfbbSDag-Erling Smørgrav $ sh freebsd-namespace.sh 110e66498cdSDag-Erling Smørgrav 1114f52dfbbSDag-Erling Smørgrav11) Build and install world, reboot, test. Pay particular attention 112cf783db1SDag-Erling Smørgrav to pam_ssh(8), which gropes inside libssh and will break if 113cf783db1SDag-Erling Smørgrav something significant changes or if ssh_namespace.h is out of 114cf783db1SDag-Erling Smørgrav whack. 115cf783db1SDag-Erling Smørgrav 116438fd19dSEd Maste12) Update nanobsd's copies of the ssh config files: 117438fd19dSEd Maste 118438fd19dSEd Maste tools/tools/nanobsd/rescue/Files/etc/ssh/ssh_config 119438fd19dSEd Maste tools/tools/nanobsd/rescue/Files/etc/ssh/sshd_config 120438fd19dSEd Maste 121*9340d69eSMark Johnston13) Check for references to obsolete configuration options 122*9340d69eSMark Johnston (e.g., ChallengeResponseAuthentication in sshd_config) which 123*9340d69eSMark Johnston may exist in release/ scripts. 124*9340d69eSMark Johnston 125*9340d69eSMark Johnston14) Commit, and hunker down for the inevitable storm of complaints. 126ba11afccSDag-Erling Smørgrav 127ba11afccSDag-Erling Smørgrav 128ba11afccSDag-Erling Smørgrav 129ba11afccSDag-Erling Smørgrav An overview of FreeBSD changes to OpenSSH-portable 130ba11afccSDag-Erling Smørgrav ================================================== 131ba11afccSDag-Erling Smørgrav 132ba11afccSDag-Erling Smørgrav0) VersionAddendum 133ba11afccSDag-Erling Smørgrav 134ba11afccSDag-Erling Smørgrav The SSH protocol allows for a human-readable version string of up 135ba11afccSDag-Erling Smørgrav to 40 characters to be appended to the protocol version string. 136ba11afccSDag-Erling Smørgrav FreeBSD takes advantage of this to include a date indicating the 137ba11afccSDag-Erling Smørgrav "patch level", so people can easily determine whether their system 138ba11afccSDag-Erling Smørgrav is vulnerable when an OpenSSH advisory goes out. Some people, 139ba11afccSDag-Erling Smørgrav however, dislike advertising their patch level in the protocol 140ba11afccSDag-Erling Smørgrav handshake, so we've added a VersionAddendum configuration variable 1410591b689SDag-Erling Smørgrav to allow them to change or disable it. Upstream added support for 1420591b689SDag-Erling Smørgrav VersionAddendum on the server side, but we also support it on the 1430591b689SDag-Erling Smørgrav client side. 144ba11afccSDag-Erling Smørgrav 145ba11afccSDag-Erling Smørgrav1) Modified server-side defaults 146ba11afccSDag-Erling Smørgrav 147ba11afccSDag-Erling Smørgrav We've modified some configuration defaults in sshd: 148ba11afccSDag-Erling Smørgrav 1490591b689SDag-Erling Smørgrav - UsePAM defaults to "yes". 150ba11afccSDag-Erling Smørgrav - PermitRootLogin defaults to "no". 1510591b689SDag-Erling Smørgrav - X11Forwarding defaults to "yes". 1520591b689SDag-Erling Smørgrav - PasswordAuthentication defaults to "no". 1530591b689SDag-Erling Smørgrav - VersionAddendum defaults to "FreeBSD-YYYYMMDD". 1540591b689SDag-Erling Smørgrav - PrivilegeSeparation defaults to "sandbox". 155c4cd1fa4SDag-Erling Smørgrav - UseDNS defaults to "yes". 156ba11afccSDag-Erling Smørgrav 157ba11afccSDag-Erling Smørgrav2) Modified client-side defaults 158ba11afccSDag-Erling Smørgrav 159ba11afccSDag-Erling Smørgrav We've modified some configuration defaults in ssh: 160ba11afccSDag-Erling Smørgrav 161ba11afccSDag-Erling Smørgrav - CheckHostIP defaults to "no". 1620591b689SDag-Erling Smørgrav - VerifyHostKeyDNS defaults to "yes" if built with LDNS. 1630591b689SDag-Erling Smørgrav - VersionAddendum defaults to "FreeBSD-YYYYMMDD". 164ba11afccSDag-Erling Smørgrav 165ba11afccSDag-Erling Smørgrav3) Canonic host names 166ba11afccSDag-Erling Smørgrav 167ba11afccSDag-Erling Smørgrav We've added code to ssh.c to canonicize the target host name after 168ba11afccSDag-Erling Smørgrav reading options but before trying to connect. This eliminates the 169ba11afccSDag-Erling Smørgrav usual problem with duplicate known_hosts entries. 170ba11afccSDag-Erling Smørgrav 171cb7b8027SDag-Erling Smørgrav4) setusercontext() environment 172ba11afccSDag-Erling Smørgrav 173ba11afccSDag-Erling Smørgrav Our setusercontext(3) can set environment variables, which we must 174ba11afccSDag-Erling Smørgrav take care to transfer to the child's environment. 175ba11afccSDag-Erling Smørgrav 1760591b689SDag-Erling Smørgrav5) TCP wrappers 1770591b689SDag-Erling Smørgrav 1780591b689SDag-Erling Smørgrav Support for TCP wrappers was removed in upstream 6.7p1. We've 1790591b689SDag-Erling Smørgrav added it back by porting the 6.6p1 code forward. 1800591b689SDag-Erling Smørgrav 181e491358cSEd Maste TCP wrappers support in sshd will be disabled in HEAD and will 182e491358cSEd Maste be removed from FreeBSD in the future. 183e491358cSEd Maste 1849ded3306SDag-Erling Smørgrav6) Agent client reference counting 1850591b689SDag-Erling Smørgrav 1860591b689SDag-Erling Smørgrav We've added code to ssh-agent.c to implement client reference 1870591b689SDag-Erling Smørgrav counting; the agent will automatically exit when the last client 1880591b689SDag-Erling Smørgrav disconnects. 1890591b689SDag-Erling Smørgrav 190f3fd8850SEd Maste7) Class-based login restrictions (27ceebbc2402) 1910591b689SDag-Erling Smørgrav 192f3fd8850SEd Maste We've added code to auth.c to enforce the host.allow, host.deny, 193f3fd8850SEd Maste times.allow and times.deny login class capabilities, based on an 194f3fd8850SEd Maste upstream submission from 195f3fd8850SEd Maste https://github.com/openssh/openssh-portable/pull/262. 19635a03425SEd Maste 1979ded3306SDag-Erling Smørgrav8) HPN 1980591b689SDag-Erling Smørgrav 1990591b689SDag-Erling Smørgrav We no longer have the HPN patches (adaptive buffer size for 2000591b689SDag-Erling Smørgrav increased throughput on high-BxD links), but we recognize and 2010591b689SDag-Erling Smørgrav ignore HPN-related configuration options to avoid breaking existing 2020591b689SDag-Erling Smørgrav configurations. 2030591b689SDag-Erling Smørgrav 204ba11afccSDag-Erling Smørgrav 205ba11afccSDag-Erling Smørgrav 206ba11afccSDag-Erling SmørgravThis port was brought to you by (in no particular order) DARPA, NAI 2070085282bSDag-Erling SmørgravLabs, ThinkSec, Nescafé, the Aberlour Glenlivet Distillery Co., 208ba11afccSDag-Erling SmørgravSuzanne Vega, and a Sanford's #69 Deluxe Marker. 209ba11afccSDag-Erling Smørgrav 210ba11afccSDag-Erling Smørgrav -- des@FreeBSD.org 211ba11afccSDag-Erling Smørgrav 212ba11afccSDag-Erling Smørgrav$FreeBSD$ 213