preparing for release of 1.9.18alpha10
[sfrench/samba-autobuild/.git] / docs / textdocs / security_level.txt
1 !==
2 !== security_level.txt for Samba release 1.9.18alpha10 02 Nov 1997
3 !==
4 Contributor:    Andrew Tridgell
5 Updated:        June 27, 1997
6 Status:         Current
7
8 Subject:        Description of SMB security levels.
9 ===========================================================================
10
11 Samba supports the following options to the global smb.conf parameter
12 "security =":
13         share, user, server
14
15 Of the above, "security = server" means that Samba reports to clients that
16 it is running in "user mode" but actually passes off all authentication
17 requests to another "user mode" server. This requires an additional
18 parameter "password server =" that points to the real authentication server.
19 That real authentication server can be another Samba server or can be a
20 Windows NT server, the later natively capable of encrypted password support.
21
22 Below is a more complete description of security levels.
23 ===========================================================================
24
25 A SMB server tells the client at startup what "security level" it is
26 running. There are two options "share level" and "user level". Which
27 of these two the client receives affects the way the client then tries
28 to authenticate itself. It does not directly affect (to any great
29 extent) the way the Samba server does security. I know this is
30 strange, but it fits in with the client/server approach of SMB. In SMB
31 everything is initiated and controlled by the client, and the server
32 can only tell the client what is available and whether an action is
33 allowed. 
34
35 I'll describe user level security first, as its simpler. In user level
36 security the client will send a "session setup" command directly after
37 the protocol negotiation. This contains a username and password. The
38 server can either accept or reject that username/password
39 combination. Note that at this stage the server has no idea what
40 share the client will eventually try to connect to, so it can't base
41 the "accept/reject" on anything other than:
42
43 - the username/password
44 - the machine that the client is coming from
45
46 If the server accepts the username/password then the client expects to
47 be able to mount any share (using a "tree connection") without
48 specifying a password. It expects that all access rights will be as
49 the username/password specified in the "session setup". 
50
51 It is also possible for a client to send multiple "session setup"
52 requests. When the server responds it gives the client a "uid" to use
53 as an authentication tag for that username/password. The client can
54 maintain multiple authentication contexts in this way (WinDD is an
55 example of an application that does this)
56
57
58 Ok, now for share level security. In share level security (the default
59 with samba) the client authenticates itself separately for each
60 share. It will send a password along with each "tree connection"
61 (share mount). It does not explicitly send a username with this
62 operation. The client is expecting a password to be associated with
63 each share, independent of the user. This means that samba has to work
64 out what username the client probably wants to use. It is never
65 explicitly sent the username. Some commercial SMB servers such as NT actually
66 associate passwords directly with shares in share level security, but
67 samba always uses the unix authentication scheme where it is a
68 username/password that is authenticated, not a "share/password".
69
70 Many clients send a "session setup" even if the server is in share
71 level security. They normally send a valid username but no
72 password. Samba records this username in a list of "possible
73 usernames". When the client then does a "tree connection" it also adds
74 to this list the name of the share they try to connect to (useful for
75 home directories) and any users listed in the "user =" smb.conf
76 line. The password is then checked in turn against these "possible
77 usernames". If a match is found then the client is authenticated as
78 that user.
79
80 Finally "server level" security. In server level security the samba
81 server reports to the client that it is in user level security. The
82 client then does a "session setup" as described earlier. The samba
83 server takes the username/password that the client sends and attempts
84 to login to the "password server" by sending exactly the same
85 username/password that it got from the client. If that server is in
86 user level security and accepts the password then samba accepts the
87 clients connection. This allows the samba server to use another SMB
88 server as the "password server". 
89
90 You should also note that at the very start of all this, where the
91 server tells the client what security level it is in, it also tells
92 the client if it supports encryption. If it does then it supplies the
93 client with a random "cryptkey". The client will then send all
94 passwords in encrypted form. You have to compile samba with encryption
95 enabled to support this feature, and you have to maintain a separate
96 smbpasswd file with SMB style encrypted passwords. It is
97 cryptographically impossible to translate from unix style encryption
98 to SMB style encryption, although there are some fairly simple management
99 schemes by which the two could be kept in sync.