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 9fca7ac55SEd Maste01) 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 12fca7ac55SEd Maste02) Download the latest OpenSSH-portable tarball and signature from 139fcda2f4SEd Maste OpenBSD (https://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/). 14ba11afccSDag-Erling Smørgrav 15fca7ac55SEd Maste03) Verify the signature: 16ba11afccSDag-Erling Smørgrav 17cf783db1SDag-Erling Smørgrav $ gpg --verify openssh-X.YpZ.tar.gz.asc 181c71974bSDag-Erling Smørgrav 19fca7ac55SEd Maste04) 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 23fca7ac55SEd Maste05) 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 30fca7ac55SEd Maste06) Take care of added / deleted files: 31ba11afccSDag-Erling Smørgrav 3274c59ab7SEd Maste $ git add -A 33ba11afccSDag-Erling Smørgrav 34fca7ac55SEd Maste07) Commit: 35ba11afccSDag-Erling Smørgrav 3674c59ab7SEd Maste $ git commit -m "Vendor import of OpenSSH X.YpZ" 37ba11afccSDag-Erling Smørgrav 38fca7ac55SEd Maste08) 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 59cf783db1SDag-Erling Smørgrav09) Merge from the vendor branch: 60ba11afccSDag-Erling Smørgrav 6174c59ab7SEd Maste $ git subtree merge -P crypto/openssh vendor/openssh 62cf783db1SDag-Erling Smørgrav 6399b201c3SEd Maste A number of files have been deleted from FreeBSD's copy of ssh, 6499b201c3SEd Maste including rendered man pages (which have a .0 extension). When 6574c59ab7SEd Maste git prompts for these deleted files during the merge, choose 'd' 6699b201c3SEd Maste (leaving them deleted). 6799b201c3SEd Maste 68fca7ac55SEd Maste10) Resolve conflicts. Remember to bump the version addendum in 69cf783db1SDag-Erling Smørgrav version.h, and update the default value in ssh{,d}_config and 70cf783db1SDag-Erling Smørgrav ssh{,d}_config.5. 71cf783db1SDag-Erling Smørgrav 72fca7ac55SEd Maste11) Diff against the vendor branch: 73cf783db1SDag-Erling Smørgrav 7474c59ab7SEd Maste $ git diff --diff-filter=M vendor/openssh/X.YpZ HEAD:crypto/openssh 75cf783db1SDag-Erling Smørgrav 76cf783db1SDag-Erling Smørgrav Files that have modifications relative to the vendor code, and 77cf783db1SDag-Erling Smørgrav only those files, must have the svn:keywords property set to 78cf783db1SDag-Erling Smørgrav FreeBSD=%H and be listed in the 'keywords' file created by the 79cf783db1SDag-Erling Smørgrav pre-merge script. 80cf783db1SDag-Erling Smørgrav 81fca7ac55SEd Maste12) Run the configure script: 82cf783db1SDag-Erling Smørgrav 83cf783db1SDag-Erling Smørgrav $ sh freebsd-configure.sh 84cf783db1SDag-Erling Smørgrav 85fca7ac55SEd Maste13) Review changes to config.h very carefully. 86cf783db1SDag-Erling Smørgrav 874c3ccd96SEd Maste Note that libwrap should not be defined in config.h; as of 8874c59ab7SEd Maste r311585 (233932cc2a60) it is conditional on MK_TCP_WRAPPERS. 894c3ccd96SEd Maste 90fca7ac55SEd Maste14) If source files have been added or removed, update the appropriate 91e66498cdSDag-Erling Smørgrav makefiles to reflect changes in the vendor's Makefile.in. 92ba11afccSDag-Erling Smørgrav 93fca7ac55SEd Maste15) Update ssh_namespace.h: 94ba11afccSDag-Erling Smørgrav 954f52dfbbSDag-Erling Smørgrav $ sh freebsd-namespace.sh 96e66498cdSDag-Erling Smørgrav 97fca7ac55SEd Maste16) Build and install world, reboot, test. Pay particular attention 98cf783db1SDag-Erling Smørgrav to pam_ssh(8), which gropes inside libssh and will break if 99cf783db1SDag-Erling Smørgrav something significant changes or if ssh_namespace.h is out of 100cf783db1SDag-Erling Smørgrav whack. 101cf783db1SDag-Erling Smørgrav 102fca7ac55SEd Maste17) Check for references to obsolete configuration options 1039340d69eSMark Johnston (e.g., ChallengeResponseAuthentication in sshd_config) which 1049340d69eSMark Johnston may exist in release/ scripts. 1059340d69eSMark Johnston 106fca7ac55SEd Maste18) Commit, and hunker down for the inevitable storm of complaints. 107ba11afccSDag-Erling Smørgrav 108ba11afccSDag-Erling Smørgrav 109ba11afccSDag-Erling Smørgrav 110ba11afccSDag-Erling Smørgrav An overview of FreeBSD changes to OpenSSH-portable 111ba11afccSDag-Erling Smørgrav ================================================== 112ba11afccSDag-Erling Smørgrav 113ba11afccSDag-Erling Smørgrav1) Modified server-side defaults 114ba11afccSDag-Erling Smørgrav 115ba11afccSDag-Erling Smørgrav We've modified some configuration defaults in sshd: 116ba11afccSDag-Erling Smørgrav 1170591b689SDag-Erling Smørgrav - UsePAM defaults to "yes". 118ba11afccSDag-Erling Smørgrav - PermitRootLogin defaults to "no". 1190591b689SDag-Erling Smørgrav - X11Forwarding defaults to "yes". 1200591b689SDag-Erling Smørgrav - PasswordAuthentication defaults to "no". 1210591b689SDag-Erling Smørgrav - VersionAddendum defaults to "FreeBSD-YYYYMMDD". 122c4cd1fa4SDag-Erling Smørgrav - UseDNS defaults to "yes". 123ba11afccSDag-Erling Smørgrav 124ba11afccSDag-Erling Smørgrav2) Modified client-side defaults 125ba11afccSDag-Erling Smørgrav 126ba11afccSDag-Erling Smørgrav We've modified some configuration defaults in ssh: 127ba11afccSDag-Erling Smørgrav 128ba11afccSDag-Erling Smørgrav - CheckHostIP defaults to "no". 1290591b689SDag-Erling Smørgrav - VerifyHostKeyDNS defaults to "yes" if built with LDNS. 130ba11afccSDag-Erling Smørgrav 131ba11afccSDag-Erling Smørgrav3) Canonic host names 132ba11afccSDag-Erling Smørgrav 133ba11afccSDag-Erling Smørgrav We've added code to ssh.c to canonicize the target host name after 134ba11afccSDag-Erling Smørgrav reading options but before trying to connect. This eliminates the 135ba11afccSDag-Erling Smørgrav usual problem with duplicate known_hosts entries. 136ba11afccSDag-Erling Smørgrav 137cb7b8027SDag-Erling Smørgrav4) setusercontext() environment 138ba11afccSDag-Erling Smørgrav 139ba11afccSDag-Erling Smørgrav Our setusercontext(3) can set environment variables, which we must 140ba11afccSDag-Erling Smørgrav take care to transfer to the child's environment. 141ba11afccSDag-Erling Smørgrav 1420591b689SDag-Erling Smørgrav5) TCP wrappers 1430591b689SDag-Erling Smørgrav 1440591b689SDag-Erling Smørgrav Support for TCP wrappers was removed in upstream 6.7p1. We've 1450591b689SDag-Erling Smørgrav added it back by porting the 6.6p1 code forward. 1460591b689SDag-Erling Smørgrav 147e491358cSEd Maste TCP wrappers support in sshd will be disabled in HEAD and will 148e491358cSEd Maste be removed from FreeBSD in the future. 149e491358cSEd Maste 1509ded3306SDag-Erling Smørgrav6) Agent client reference counting 1510591b689SDag-Erling Smørgrav 1520591b689SDag-Erling Smørgrav We've added code to ssh-agent.c to implement client reference 1530591b689SDag-Erling Smørgrav counting; the agent will automatically exit when the last client 1540591b689SDag-Erling Smørgrav disconnects. 1550591b689SDag-Erling Smørgrav 156f3fd8850SEd Maste7) Class-based login restrictions (27ceebbc2402) 1570591b689SDag-Erling Smørgrav 158f3fd8850SEd Maste We've added code to auth.c to enforce the host.allow, host.deny, 159f3fd8850SEd Maste times.allow and times.deny login class capabilities, based on an 160f3fd8850SEd Maste upstream submission from 161f3fd8850SEd Maste https://github.com/openssh/openssh-portable/pull/262. 16235a03425SEd Maste 163*8974fa45SEd Maste8) Blocklist integration 164*8974fa45SEd Maste 165*8974fa45SEd Maste We include blocklist (https://github.com/zoulasc/blocklist) in FreeBSD, 166*8974fa45SEd Maste and ssh is patched to report login failures to it. 167*8974fa45SEd Maste 168*8974fa45SEd Maste9) Paths 169*8974fa45SEd Maste 170*8974fa45SEd Maste A number of paths are changed to match FreeBSD's configuration (e.g., 171*8974fa45SEd Maste using /usr/local/ instead of /uxr/X11R6/). 172*8974fa45SEd Maste 173*8974fa45SEd Maste10) Retired patches 1740591b689SDag-Erling Smørgrav 1756f7bc8e7SEd Maste We no longer have HPN patches (adaptive buffer size for increased 1766f7bc8e7SEd Maste throughput on high-BxD links) or client-side VersionAddendum, but we 1776f7bc8e7SEd Maste recognize and ignore the configuration options to avoid breaking 1786f7bc8e7SEd Maste existing configurations. 1790591b689SDag-Erling Smørgrav 180ba11afccSDag-Erling Smørgrav 181ba11afccSDag-Erling Smørgrav 182ba11afccSDag-Erling SmørgravThis port was brought to you by (in no particular order) DARPA, NAI 1830085282bSDag-Erling SmørgravLabs, ThinkSec, Nescafé, the Aberlour Glenlivet Distillery Co., 184ba11afccSDag-Erling SmørgravSuzanne Vega, and a Sanford's #69 Deluxe Marker. 185ba11afccSDag-Erling Smørgrav 186ba11afccSDag-Erling Smørgrav -- des@FreeBSD.org 187