mirror of
https://github.com/samba-team/samba.git
synced 2025-01-20 14:03:59 +03:00
37a6f03f35
(This used to be commit 8dfbaafb843d17b865855ba1fef1e62cd38d3964)
295 lines
12 KiB
XML
295 lines
12 KiB
XML
<chapter id="IntroSMB">
|
|
<chapterinfo>
|
|
&author.dlechnyr;
|
|
<pubdate>April 14, 2003</pubdate>
|
|
</chapterinfo>
|
|
|
|
<title>Introduction to Samba</title>
|
|
|
|
<para><quote>
|
|
"If you understand what you're doing, you're not learning anything."
|
|
-- Anonymous
|
|
</quote></para>
|
|
|
|
<para>
|
|
Samba is a file and print server for Windows-based clients using TCP/IP as the underlying
|
|
transport protocol. In fact, it can support any SMB/CIFS-enabled client. One of Samba's big
|
|
strengths is that you can use it to blend your mix of Windows and Linux machines together
|
|
without requiring a separate Windows NT/2000/2003 Server. Samba is actively being developed
|
|
by a global team of about 30 active programmers and was originally developed by Andrew Tridgell.
|
|
</para>
|
|
|
|
<sect1>
|
|
<title>Background</title>
|
|
|
|
<para>
|
|
Once long ago, there was a buzzword referred to as DCE/RPC. This stood for Distributed
|
|
Computing Environment/Remote Procedure Calls and conceptually was a good idea. It was
|
|
originally developed by Apollo/HP as NCA 1.0 (Network Computing Architecture) and only
|
|
ran over UDP. When there was a need to run it over TCP so that it would be compatible
|
|
with DECnet 3.0, it was redesigned, submitted to The Open Group, and officially became
|
|
known as DCE/RPC. Microsoft came along and decided, rather than pay $20 per seat to
|
|
license this technology, to reimplement DCE/RPC themselves as MSRPC. From this, the
|
|
concept continued in the form of SMB (Server Message Block, or the "what") using the
|
|
NetBIOS (Network Basic Input/Output System, or the "how") compatibility layer. You can
|
|
run SMB (i.e., transport) over several different protocols; many different implementations
|
|
arose as a result, including NBIPX (NetBIOS over IPX, NwLnkNb, or NWNBLink) and NBT
|
|
(NetBIOS over TCP/IP, or NetBT). As the years passed, NBT became the most common form
|
|
of implementation until the advance of "Direct-Hosted TCP" -- the Microsoft marketing
|
|
term for eliminating NetBIOS entirely and running SMB by itself across TCP port 445
|
|
only. As of yet, direct-hosted TCP has yet to catch on.
|
|
</para>
|
|
|
|
<para>
|
|
Perhaps the best summary of the origins of SMB are voiced in the 1997 article titled, CIFS:
|
|
Common Insecurities Fail Scrutiny:
|
|
</para>
|
|
|
|
<para><emphasis>
|
|
Several megabytes of NT-security archives, random whitepapers, RFCs, the CIFS spec, the Samba
|
|
stuff, a few MS knowledge-base articles, strings extracted from binaries, and packet dumps have
|
|
been dutifully waded through during the information-gathering stages of this project, and there
|
|
are *still* many missing pieces... While often tedious, at least the way has been generously
|
|
littered with occurrences of clapping hand to forehead and muttering 'crikey, what are they
|
|
thinking?
|
|
</emphasis></para>
|
|
|
|
</sect1>
|
|
|
|
<sect1>
|
|
<title>Terminology</title>
|
|
|
|
<itemizedlist>
|
|
|
|
<listitem><para>
|
|
SMB: Acronym for "Server Message Block". This is Microsoft's file and printer sharing protocol.
|
|
</para></listitem>
|
|
|
|
<listitem><para>
|
|
CIFS: Acronym for "Common Internet File System". Around 1996, Microsoft apparently
|
|
decided that SMB needed the word "Internet" in it, so they changed it to CIFS.
|
|
</para></listitem>
|
|
|
|
<listitem><para>
|
|
Direct-Hosted: A method of providing file/printer sharing services over port 445/tcp
|
|
only using DNS for name resolution instead of WINS.
|
|
</para></listitem>
|
|
|
|
<listitem><para>
|
|
IPC: Acronym for "Inter-Process Communication". A method to communicate specific
|
|
information between programs.
|
|
</para></listitem>
|
|
|
|
<listitem><para>
|
|
Marshalling: - A method of serializing (i.e., sequential ordering of) variable data
|
|
suitable for transmission via a network connection or storing in a file. The source
|
|
data can be re-created using a similar process called unmarshalling.
|
|
</para></listitem>
|
|
|
|
<listitem><para>
|
|
NetBIOS: Acronym for "Network Basic Input/Output System". This is not a protocol;
|
|
it is a method of communication across an existing protocol. This is a standard which
|
|
was originally developed for IBM by Sytek in 1983. To exaggerate the analogy a bit,
|
|
it can help to think of this in comparison your computer's BIOS -- it controls the
|
|
essential functions of your input/output hardware -- whereas NetBIOS controls the
|
|
essential functions of your input/output traffic via the network. Again, this is a bit
|
|
of an exaggeration but it should help that paradigm shift. What is important to realize
|
|
is that NetBIOS is a transport standard, not a protocol. Unfortunately, even technically
|
|
brilliant people tend to interchange NetBIOS with terms like NetBEUI without a second
|
|
thought; this will cause no end (and no doubt) of confusion.
|
|
</para></listitem>
|
|
|
|
<listitem><para>
|
|
NetBEUI: Acronym for the "NetBIOS Extended User Interface". Unlike NetBIOS, NetBEUI
|
|
is a protocol, not a standard. It is also not routable, so traffic on one side of a
|
|
router will be unable to communicate with the other side. Understanding NetBEUI is
|
|
not essential to deciphering SMB; however it helps to point out that it is not the
|
|
same as NetBIOS and to improve your score in trivia at parties. NetBEUI was originally
|
|
referred to by Microsoft as "NBF", or "The Windows NT NetBEUI Frame protocol driver".
|
|
It is not often heard from these days.
|
|
</para></listitem>
|
|
|
|
<listitem><para>
|
|
NBT: Acronym for "NetBIOS over TCP"; also known as "NetBT". Allows the continued use
|
|
of NetBIOS traffic proxied over TCP/IP. As a result, NetBIOS names are made
|
|
to IP addresses and NetBIOS name types are conceptually equivalent to TCP/IP ports.
|
|
This is how file and printer sharing are accomplished in Windows 95/98/ME. They
|
|
traditionally rely on three ports: NetBIOS Name Service (nbname) via UDP port 137,
|
|
NetBIOS Datagram Service (nbdatagram) via UDP port 138, and NetBIOS Session Service
|
|
(nbsession) via TCP port 139. All name resolution is done via WINS, NetBIOS broadcasts,
|
|
and DNS. NetBIOS over TCP is documented in RFC 1001 (Concepts and methods) and RFC 1002
|
|
(Detailed specifications).
|
|
</para></listitem>
|
|
|
|
<listitem><para>
|
|
W2K: Acronym for Windows 2000 Professional or Server
|
|
</para></listitem>
|
|
|
|
<listitem><para>
|
|
W3K: Acronym for Windows 2003 Server
|
|
</para></listitem>
|
|
|
|
</itemizedlist>
|
|
|
|
<para>If you plan on getting help, make sure to subscribe to the Samba Mailing List (available at
|
|
<ulink url="http://www.samba.org/">http://www.samba.org</ulink>).
|
|
</para>
|
|
|
|
</sect1>
|
|
|
|
<sect1>
|
|
<title>Related Projects</title>
|
|
|
|
<para>
|
|
There are currently two network filesystem client projects for Linux that are directly
|
|
related to Samba: SMBFS and CIFS VFS. These are both available in the Linux kernel itself.
|
|
</para>
|
|
|
|
<itemizedlist>
|
|
|
|
<listitem><para>
|
|
SMBFS (Server Message Block File System) allows you to mount SMB shares (the protocol
|
|
that Microsoft Windows and OS/2 Lan Manager use to share files and printers
|
|
over local networks) and access them just like any other Unix directory. This is useful
|
|
if you just want to mount such filesystems without being a SMBFS server.
|
|
</para></listitem>
|
|
|
|
<listitem><para>
|
|
CIFS VFS (Common Internet File System Virtual File System) is the successor to SMBFS, and
|
|
is being actively developed for the upcoming version of the Linux kernel. The intent of this module
|
|
is to provide advanced network file system functionality including support for dfs (heirarchical
|
|
name space), secure per-user session establishment, safe distributed caching (oplock),
|
|
optional packet signing, Unicode and other internationalization improvements, and optional
|
|
Winbind (nsswitch) integration.
|
|
</para></listitem>
|
|
|
|
</itemizedlist>
|
|
|
|
<para>
|
|
Again, it's important to note that these are implementations for client filesystems, and have
|
|
nothing to do with acting as a file and print server for SMB/CIFS clients.
|
|
</para>
|
|
|
|
<para>
|
|
There are other Open Source CIFS client implementations, such as the
|
|
<ulink url="http://jcifs.samba.org/">jCIFS project</ulink>
|
|
which provides an SMB client toolkit written in Java.
|
|
</para>
|
|
|
|
|
|
</sect1>
|
|
|
|
|
|
<sect1>
|
|
<title>SMB Methodology</title>
|
|
|
|
<para>
|
|
Traditionally, SMB uses UDP port 137 (NetBIOS name service, or netbios-ns),
|
|
UDP port 138 (NetBIOS datagram service, or netbios-dgm), and TCP port 139 (NetBIOS
|
|
session service, or netbios-ssn). Anyone looking at their network with a good
|
|
packet sniffer will be amazed at the amount of traffic generated by just opening
|
|
up a single file. In general, SMB sessions are established in the following order:
|
|
</para>
|
|
|
|
<itemizedlist>
|
|
<listitem><para>
|
|
"TCP Connection" - establish 3-way handshake (connection) to port 139/tcp
|
|
or 445/tcp.
|
|
</para></listitem>
|
|
|
|
<listitem><para>
|
|
"NetBIOS Session Request" - using the following "Calling Names": The local
|
|
machine's NetBIOS name plus the 16th character 0x00; The server's NetBIOS
|
|
name plus the 16th character 0x20
|
|
</para></listitem>
|
|
|
|
<listitem><para>
|
|
"SMB Negotiate Protocol" - determine the protocol dialect to use, which will
|
|
be one of the following: PC Network Program 1.0 (Core) - share level security
|
|
mode only; Microsoft Networks 1.03 (Core Plus) - share level security
|
|
mode only; Lanman1.0 (LAN Manager 1.0) - uses Challenge/Response
|
|
Authentication; Lanman2.1 (LAN Manager 2.1) - uses Challenge/Response
|
|
Authentication; NT LM 0.12 (NT LM 0.12) - uses Challenge/Response
|
|
Authentication
|
|
</para></listitem>
|
|
|
|
<listitem><para>
|
|
SMB Session Startup. Passwords are encrypted (or not) according to one of
|
|
the following methods: Null (no encryption); Cleartext (no encryption); LM
|
|
and NTLM; NTLM; NTLMv2
|
|
</para></listitem>
|
|
|
|
<listitem><para>
|
|
SMB Tree Connect: Connect to a share name (e.g., \\servername\share); Connect
|
|
to a service type (e.g., IPC$ named pipe)
|
|
</para></listitem>
|
|
|
|
</itemizedlist>
|
|
|
|
<para>
|
|
A good way to examine this process in depth is to try out
|
|
<ulink url="http://www.securityfriday.com/ToolDownload/SWB/swb_doc.html">SecurityFriday's SWB program</ulink>.
|
|
It allows you to walk through the establishment of a SMB/CIFS session step by step.
|
|
</para>
|
|
|
|
</sect1>
|
|
|
|
<sect1>
|
|
<title>Epilogue</title>
|
|
|
|
<para><quote>
|
|
What's fundamentally wrong is that nobody ever had any taste when they
|
|
did it. Microsoft has been very much into making the user interface look good,
|
|
but internally it's just a complete mess. And even people who program for Microsoft
|
|
and who have had years of experience, just don't know how it works internally.
|
|
Worse, nobody dares change it. Nobody dares to fix bugs because it's such a
|
|
mess that fixing one bug might just break a hundred programs that depend on
|
|
that bug. And Microsoft isn't interested in anyone fixing bugs -- they're interested
|
|
in making money. They don't have anybody who takes pride in Windows 95 as an
|
|
operating system.
|
|
</quote></para>
|
|
|
|
<para><quote>
|
|
People inside Microsoft know it's a bad operating system and they still
|
|
continue obviously working on it because they want to get the next version out
|
|
because they want to have all these new features to sell more copies of the
|
|
system.
|
|
</quote></para>
|
|
|
|
<para><quote>
|
|
The problem with that is that over time, when you have this kind of approach,
|
|
and because nobody understands it, because nobody REALLY fixes bugs (other than
|
|
when they're really obvious), the end result is really messy. You can't trust
|
|
it because under certain circumstances it just spontaneously reboots or just
|
|
halts in the middle of something that shouldn't be strange. Normally it works
|
|
fine and then once in a blue moon for some completely unknown reason, it's dead,
|
|
and nobody knows why. Not Microsoft, not the experienced user and certainly
|
|
not the completely clueless user who probably sits there shivering thinking
|
|
"What did I do wrong?" when they didn't do anything wrong at all.
|
|
</quote></para>
|
|
|
|
<para><quote>
|
|
That's what's really irritating to me."
|
|
</quote></para>
|
|
|
|
<para>--
|
|
<ulink url="http://hr.uoregon.edu/davidrl/boot.txt">Linus Torvalds, from an interview with BOOT Magazine, Sept 1998</ulink>
|
|
</para>
|
|
|
|
</sect1>
|
|
|
|
<sect1>
|
|
<title>Miscellaneous</title>
|
|
|
|
<!--FIXME: This really needs to go... -->
|
|
|
|
<para>
|
|
This chapter is Copyright 2003 David Lechnyr (david at lechnyr dot com).
|
|
Permission is granted to copy, distribute and/or modify this document under the terms
|
|
of the GNU Free Documentation License, Version 1.2 or any later version published by the Free
|
|
Software Foundation. A copy of the license is available at http://www.gnu.org/licenses/fdl.txt.
|
|
</para>
|
|
|
|
</sect1>
|
|
</chapter>
|