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