xref: /freebsd/crypto/openssh/FREEBSD-upgrade (revision 519496a5985549d2935cf296a709b1e726b1b5e5)
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