likewise-cifs...8 // client ipc calls defined in // internal iomgr calls defined in lw_ntstatus....

35
Storage Developer Conference 2009 © 2009 Gerald Carter, Likewise Software. All rights reserved. Likewise-CIFS Technical Deep Dive into the Likewise SMB Server

Upload: others

Post on 23-Jul-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Likewise-CIFS...8 // Client IPC calls defined in  // Internal iomgr calls defined in  LW_NTSTATUS. LwNtCreateFile(LW_OUT PIO_FILE_HANDLE FileHandle,

Storage Developer Conference 2009 © 2009 Gerald Carter, Likewise Software. All rights reserved.

Likewise-CIFS

Technical Deep Dive into the

Likewise SMB Server

Page 2: Likewise-CIFS...8 // Client IPC calls defined in  // Internal iomgr calls defined in  LW_NTSTATUS. LwNtCreateFile(LW_OUT PIO_FILE_HANDLE FileHandle,

Storage Developer Conference 2009 © 2009 Gerald Carter, Likewise Software. All rights reserved.

Likewise Open – Background

Goal – Likewise Open is the umbrella project sponsored by Likewise Software designed to provide an interoperability platform for non-Microsoft clients existing in Microsoft OS dominated networks.

Project officially launched Nov. ’07L-CIFS development began in Jan. ‘09

License – Combination of GPLv2+ and LGPLv2.1+Non-Likewise components (e.g. OpenLDAP and MIT Kerberos) remain under their original license.

2

http://www.likewiseopen.org/

Page 3: Likewise-CIFS...8 // Client IPC calls defined in  // Internal iomgr calls defined in  LW_NTSTATUS. LwNtCreateFile(LW_OUT PIO_FILE_HANDLE FileHandle,

Storage Developer Conference 2009 © 2009 Gerald Carter, Likewise Software. All rights reserved.

Likewise Open Components

All are single process, threaded services

lwiod – Likewise I/O Managerlsassd – Likewise Security Authoritysrvsvcd – Server and Workstation RPC Servicesnetlogond – Domain Control locatordcerpcd – DCE/RPC endpoint-mappereventlogd – Local/Remote logging service

3

Page 4: Likewise-CIFS...8 // Client IPC calls defined in  // Internal iomgr calls defined in  LW_NTSTATUS. LwNtCreateFile(LW_OUT PIO_FILE_HANDLE FileHandle,

Storage Developer Conference 2009 © 2009 Gerald Carter, Likewise Software. All rights reserved.

Architectural Overview

NetlogondSrvsvcd

Client File API

Core API

Driver API

NPFS PVFS RDR SRV

Lwiod

Active Directory Forest

LwDsGetDcName

LsassdClient Lsa API

Provider Routing

Local AD

AcctDb

DNSCLDAP

DCE/RPCLDAP

LwMsg IPC

CreateFileCreateNamedPipe

IoFsControlDeviceIoControl

Page 5: Likewise-CIFS...8 // Client IPC calls defined in  // Internal iomgr calls defined in  LW_NTSTATUS. LwNtCreateFile(LW_OUT PIO_FILE_HANDLE FileHandle,

Storage Developer Conference 2009 © 2009 Gerald Carter, Likewise Software. All rights reserved.

Likewise I/O Manager

Page 6: Likewise-CIFS...8 // Client IPC calls defined in  // Internal iomgr calls defined in  LW_NTSTATUS. LwNtCreateFile(LW_OUT PIO_FILE_HANDLE FileHandle,

Storage Developer Conference 2009 © 2009 Gerald Carter, Likewise Software. All rights reserved.

Likewise I/O Manager

Provides an API inspired by the Windows ZwCreateFile(), et. al. interfaceMakes use of I/O request packets (IRPs) to communicate with driversDrivers are loaded at run time by the I/O Mgr core

rdr.sys.so – SMB client file systemnpfs.sys.so – Named pipe file systempvfs.sys.so – POSIX compatible file systemsrv.sys.so – SMBv1 & v2 server protocol head

6

Page 7: Likewise-CIFS...8 // Client IPC calls defined in  // Internal iomgr calls defined in  LW_NTSTATUS. LwNtCreateFile(LW_OUT PIO_FILE_HANDLE FileHandle,

Storage Developer Conference 2009 © 2009 Gerald Carter, Likewise Software. All rights reserved.

I/O Mgr API

IoCreateFile, IoCloseFileIoReadFile, IoWriteFileIoDeviceIoControlFile, IoFsControlFileIoQueryXXXInformation, IoSetXXXInformation

File, Directory, VolumeIoLockFile, IoUnlockFileIoQuerySecurityFile, IoSetSecurityFile

7

Page 8: Likewise-CIFS...8 // Client IPC calls defined in  // Internal iomgr calls defined in  LW_NTSTATUS. LwNtCreateFile(LW_OUT PIO_FILE_HANDLE FileHandle,

Storage Developer Conference 2009 © 2009 Gerald Carter, Likewise Software. All rights reserved.

I/O Mgr Client API

8

// Client IPC calls defined in <lwio/ntfileapi.h>// Internal iomgr calls defined in <ioapi.h>

LW_NTSTATUSLwNtCreateFile(

LW_OUT PIO_FILE_HANDLE FileHandle,LW_IN LW_OUT LW_OPTIONAL PIO_ASYNC_CONTROL_BLOCK AsyncControlBlock,LW_OUT PIO_STATUS_BLOCK IoStatusBlock,LW_IN PIO_FILE_NAME FileName,LW_IN LW_OPTIONAL LW_PVOID SecurityDescriptor, LW_IN LW_OPTIONAL LW_PVOID SecurityQualityOfService,LW_IN ACCESS_MASK DesiredAccess,LW_IN LW_OPTIONAL LONG64 AllocationSize,LW_IN FILE_ATTRIBUTES FileAttributes,LW_IN FILE_SHARE_FLAGS ShareAccess,LW_IN FILE_CREATE_DISPOSITION CreateDisposition,LW_IN FILE_CREATE_OPTIONS CreateOptions,LW_IN LW_OPTIONAL LW_PVOID EaBuffer,LW_IN LW_ULONG EaLength,LW_IN LW_OPTIONAL PIO_ECP_LIST EcpList);

Page 9: Likewise-CIFS...8 // Client IPC calls defined in  // Internal iomgr calls defined in  LW_NTSTATUS. LwNtCreateFile(LW_OUT PIO_FILE_HANDLE FileHandle,

Storage Developer Conference 2009 © 2009 Gerald Carter, Likewise Software. All rights reserved.

IRP_TYPE_CREATE

9

typedef struct _IRP_ARGS_CREATE {IN PIO_CREATE_SECURITY_CONTEXT SecurityContext;IN IO_FILE_NAME FileName;IN ACCESS_MASK DesiredAccess;IN OPTIONAL LONG64 AllocationSize;IN FILE_ATTRIBUTES FileAttributes;IN FILE_SHARE_FLAGS ShareAccess;IN FILE_CREATE_DISPOSITION CreateDisposition;IN FILE_CREATE_OPTIONS CreateOptions;...

} IRP_ARGS_CREATE, *PIRP_ARGS_CREATE;

typedef struct _IRP {IN IRP_TYPE Type;OUT IO_STATUS_BLOCK IoStatusBlock;IN IO_DRIVER_HANDLE DriverHandle;IN IO_DEVICE_HANDLE DeviceHandle;IN IO_FILE_HANDLE FileHandle;IN union {

IRP_ARGS_CREATE Create;. . .

} Args;} IRP, *PIRP;

Page 10: Likewise-CIFS...8 // Client IPC calls defined in  // Internal iomgr calls defined in  LW_NTSTATUS. LwNtCreateFile(LW_OUT PIO_FILE_HANDLE FileHandle,

Storage Developer Conference 2009 © 2009 Gerald Carter, Likewise Software. All rights reserved.

Driver Namespace

All drivers register a supported namespaceFor example, “\pvfs” and “\npfs”

The LwNtCreateFile() Client API call must include the driver namespace prefix in the filename.

Prefix is stripped by the I/O Mgr before sending the IRP to the correct driver

A Win32 compatibility layer can be provided to insulate end-user applications

E.g. CreateFile(“\\server\share\file.txt”)

10

Page 11: Likewise-CIFS...8 // Client IPC calls defined in  // Internal iomgr calls defined in  LW_NTSTATUS. LwNtCreateFile(LW_OUT PIO_FILE_HANDLE FileHandle,

Storage Developer Conference 2009 © 2009 Gerald Carter, Likewise Software. All rights reserved.

LwNtCreateFile Example

$> test_pvfs --cat /pvfs/etc/hosts## /etc/hosts127.0.0.1 localhost127.0.1.1 sequoia.ad.plainjoe.org sequoia

IopIpcCreateFile

IoCreateFile

IopIrpDispatch

IopDeviceCallDriver

PvfsDriverDispatch

PvfsCreateFile

LwNtCreateFile

LwMsg

Page 12: Likewise-CIFS...8 // Client IPC calls defined in  // Internal iomgr calls defined in  LW_NTSTATUS. LwNtCreateFile(LW_OUT PIO_FILE_HANDLE FileHandle,

Storage Developer Conference 2009 © 2009 Gerald Carter, Likewise Software. All rights reserved.

I/O Manager Async Calls

Only the internal API support async calls currentlyIoXX() calls accept an async control block

Driver can return PENDING to any requestThe I/O Mgr simply blocks the caller thread on synchronous requests

ACB->AsyncCancelContextCan be used to cancel the pending request

12

typedef struct _IO_ASYNC_CONTROL_BLOCK {IN PIO_ASYNC_COMPLETE_CALLBACK Callback;IN PVOID CallbackContext;OUT PIO_ASYNC_CANCEL_CONTEXT AsyncCancelContext;

} IO_ASYNC_CONTROL_BLOCK, *PIO_ASYNC_CONTROL_BLOCK;

Page 13: Likewise-CIFS...8 // Client IPC calls defined in  // Internal iomgr calls defined in  LW_NTSTATUS. LwNtCreateFile(LW_OUT PIO_FILE_HANDLE FileHandle,

Storage Developer Conference 2009 © 2009 Gerald Carter, Likewise Software. All rights reserved.

I/O Manager Async Calls (cont)

13

Core API

PVFS

Lwiod

Dispatch(IRP)

IoMarkPending() IoIrpComplete()

STATUS_PENDING STATUS_XXX

Page 14: Likewise-CIFS...8 // Client IPC calls defined in  // Internal iomgr calls defined in  LW_NTSTATUS. LwNtCreateFile(LW_OUT PIO_FILE_HANDLE FileHandle,

Storage Developer Conference 2009 © 2009 Gerald Carter, Likewise Software. All rights reserved.

SRV & NPFS Drivers

Page 15: Likewise-CIFS...8 // Client IPC calls defined in  // Internal iomgr calls defined in  LW_NTSTATUS. LwNtCreateFile(LW_OUT PIO_FILE_HANDLE FileHandle,

Storage Developer Conference 2009 © 2009 Gerald Carter, Likewise Software. All rights reserved.

SRV.sys.so – SMB Protocol Head

Support for SMBv1 and SMBv2No NetBIOS support (only tcp/445)NTLM 0.12 dialect or later

Supported ClientsWindows XP/2003 and laterOS X and Linux clients forthcoming

User mode securityDomain member and local authentication

15

Page 16: Likewise-CIFS...8 // Client IPC calls defined in  // Internal iomgr calls defined in  LW_NTSTATUS. LwNtCreateFile(LW_OUT PIO_FILE_HANDLE FileHandle,

Storage Developer Conference 2009 © 2009 Gerald Carter, Likewise Software. All rights reserved.

SRV.sys.so - Architecture

16

SRV

Driver

SMBv1 SMBv2

Protocol

Transport (select, epoll, etc.)

Listener

Reader

Worker

SMB/CIFStcp/445

ResponseShares

Page 17: Likewise-CIFS...8 // Client IPC calls defined in  // Internal iomgr calls defined in  LW_NTSTATUS. LwNtCreateFile(LW_OUT PIO_FILE_HANDLE FileHandle,

Storage Developer Conference 2009 © 2009 Gerald Carter, Likewise Software. All rights reserved.

Lwiod

SMBntcreate&X Example

SrvProtocolExecute

SrvProtocolExec_v1

IoCreateFile

IopIrpDispatch

IopDeviceCallDriver

PvfsDriverDispatch

SMBntcreate&X

PvfsCreateFile

PVFS

IoMgr

SRV

Page 18: Likewise-CIFS...8 // Client IPC calls defined in  // Internal iomgr calls defined in  LW_NTSTATUS. LwNtCreateFile(LW_OUT PIO_FILE_HANDLE FileHandle,

Storage Developer Conference 2009 © 2009 Gerald Carter, Likewise Software. All rights reserved.

DCE/RPC & Named Pipes

NPFS driver implements an in-memory named pipe file systemDCE/RPC runtime supports clients and servers using the NPFS driver in lwiod

Registers an ncacn_np endpoint for server applications using LwNtCreateNamedPipeFile()The client runtime calls LwNtCreateFile() to open a pipe on a remote host

18

Page 19: Likewise-CIFS...8 // Client IPC calls defined in  // Internal iomgr calls defined in  LW_NTSTATUS. LwNtCreateFile(LW_OUT PIO_FILE_HANDLE FileHandle,

Storage Developer Conference 2009 © 2009 Gerald Carter, Likewise Software. All rights reserved.

DCE/RPC Clients & Servers

19

Client

DCE/RPC Runtime

NPFS PVFS RDR SRV

Server

DCE/RPC Runtime

IOMgr

NPFS PVFS RDR SRV

Network

IOMgr

Page 20: Likewise-CIFS...8 // Client IPC calls defined in  // Internal iomgr calls defined in  LW_NTSTATUS. LwNtCreateFile(LW_OUT PIO_FILE_HANDLE FileHandle,

Storage Developer Conference 2009 © 2009 Gerald Carter, Likewise Software. All rights reserved.

Likewise Security Authority

20

Page 21: Likewise-CIFS...8 // Client IPC calls defined in  // Internal iomgr calls defined in  LW_NTSTATUS. LwNtCreateFile(LW_OUT PIO_FILE_HANDLE FileHandle,

Storage Developer Conference 2009 © 2009 Gerald Carter, Likewise Software. All rights reserved.

Likewise Security Authority

User & Group Provider RoutingLocal – Standalone account database

Privileged user managementGroup nestingMACHINE and BUILTIN domains

Active Directory – Member server functionalityTrust scenarios, Authentication, etc…

Supplies session security contexts for Lwiod

21

Page 22: Likewise-CIFS...8 // Client IPC calls defined in  // Internal iomgr calls defined in  LW_NTSTATUS. LwNtCreateFile(LW_OUT PIO_FILE_HANDLE FileHandle,

Storage Developer Conference 2009 © 2009 Gerald Carter, Likewise Software. All rights reserved.

Users Tokens and RPC Servers

22

NPFS PVFS RDR SRV

Lwiod

Lsassd

Client API

Provider Routing

Local AD

AcctDb

\Lsarpc\Samr

LwMsg

Client File API

Driver API

CreateNamedPipe

SMBntcreate&X(\lsarpc)LsaLookupName

tcp/445

Core API

CreateSecCtx

Windows Client

Page 23: Likewise-CIFS...8 // Client IPC calls defined in  // Internal iomgr calls defined in  LW_NTSTATUS. LwNtCreateFile(LW_OUT PIO_FILE_HANDLE FileHandle,

Storage Developer Conference 2009 © 2009 Gerald Carter, Likewise Software. All rights reserved.

Local Users & Groups Demo

23

Page 24: Likewise-CIFS...8 // Client IPC calls defined in  // Internal iomgr calls defined in  LW_NTSTATUS. LwNtCreateFile(LW_OUT PIO_FILE_HANDLE FileHandle,

Storage Developer Conference 2009 © 2009 Gerald Carter, Likewise Software. All rights reserved.

PVFS Driver

Page 25: Likewise-CIFS...8 // Client IPC calls defined in  // Internal iomgr calls defined in  LW_NTSTATUS. LwNtCreateFile(LW_OUT PIO_FILE_HANDLE FileHandle,

Storage Developer Conference 2009 © 2009 Gerald Carter, Likewise Software. All rights reserved.

PVFS.sys.so

Integration with POSIX file systemsUses EAs for storing security descriptors, Attributes, etc..Implements security and locking checks in process

Provides a worker thread pool

25

Page 26: Likewise-CIFS...8 // Client IPC calls defined in  // Internal iomgr calls defined in  LW_NTSTATUS. LwNtCreateFile(LW_OUT PIO_FILE_HANDLE FileHandle,

Storage Developer Conference 2009 © 2009 Gerald Carter, Likewise Software. All rights reserved.

PVFS – Data Structures

FCB – File ObjectOplocks

CCB – Open HandlePathnameDev/InodeBRLSharemodeFile Descriptor

26

PVFS

Create Control Block

Create Control Block

File Control Block

File Control Block

FilesI/O

Logical File Object

Disk

Page 27: Likewise-CIFS...8 // Client IPC calls defined in  // Internal iomgr calls defined in  LW_NTSTATUS. LwNtCreateFile(LW_OUT PIO_FILE_HANDLE FileHandle,

Storage Developer Conference 2009 © 2009 Gerald Carter, Likewise Software. All rights reserved.

PVFS – Data Structures (cont)

File Control Block represents the file on diskFCB is removed when last open handle is closed

Create Control Block is open file handleStored in the IO_FILE_HANDLELwIo API is handle based (i.e. All files and directories are processed first through CreateFile)

CCB refers to its FCB; FCB owns a list of its CCBs

27

Page 28: Likewise-CIFS...8 // Client IPC calls defined in  // Internal iomgr calls defined in  LW_NTSTATUS. LwNtCreateFile(LW_OUT PIO_FILE_HANDLE FileHandle,

Storage Developer Conference 2009 © 2009 Gerald Carter, Likewise Software. All rights reserved.

Share Modes and Byte Range Locks

Share modes and byte range locking information is stored with the open handle in the CCBA share mode or BRL check checks all associated CCBs until a conflict is detected or success

PvfsEnforceShareMode(), PvfsCanLock(), PvfsAddLock()

Pending locks are stored on the FCBBacklink to the requesting CCBProcessed on any change to the lock table

28

Page 29: Likewise-CIFS...8 // Client IPC calls defined in  // Internal iomgr calls defined in  LW_NTSTATUS. LwNtCreateFile(LW_OUT PIO_FILE_HANDLE FileHandle,

Storage Developer Conference 2009 © 2009 Gerald Carter, Likewise Software. All rights reserved.

Oplocks

Legacy oplocksRequested using FsIoCtrl on CCBOplock list stored on the FCBDeferred ops stored in a queue on the FCB

29

ntcreate&X

IoCreateFile

SRV

PVFS

IoFsCtrl(Req)

Success Pending

Success(Break)

IoFsCtrl(Ack)

Success orPending

locking&X

Page 30: Likewise-CIFS...8 // Client IPC calls defined in  // Internal iomgr calls defined in  LW_NTSTATUS. LwNtCreateFile(LW_OUT PIO_FILE_HANDLE FileHandle,

Storage Developer Conference 2009 © 2009 Gerald Carter, Likewise Software. All rights reserved.

CREATE_SECURITY_CONTEXT

Obtained from lsassd during SessionSetup processing Passed to IoCreateFile()Contains user’s Access Token

30

SRV

Lsassd

IoSecCreateSecCtx

PVFS

CreateFile(SecCtx, …)

CCB (AccessToken)

Disk

RtlAccessCheck(Token, SD)

LwiodSessionSetup&X

Page 31: Likewise-CIFS...8 // Client IPC calls defined in  // Internal iomgr calls defined in  LW_NTSTATUS. LwNtCreateFile(LW_OUT PIO_FILE_HANDLE FileHandle,

Storage Developer Conference 2009 © 2009 Gerald Carter, Likewise Software. All rights reserved.

Server & Workstation Service

Page 32: Likewise-CIFS...8 // Client IPC calls defined in  // Internal iomgr calls defined in  LW_NTSTATUS. LwNtCreateFile(LW_OUT PIO_FILE_HANDLE FileHandle,

Storage Developer Conference 2009 © 2009 Gerald Carter, Likewise Software. All rights reserved.

Server Service (srvsvcd)

Implements the Srvsvc & Wkssvc RPC interfacesRetrieves information about file shares from Lwiod/SRV LwNtDeviceIoControlFile()

32

Page 33: Likewise-CIFS...8 // Client IPC calls defined in  // Internal iomgr calls defined in  LW_NTSTATUS. LwNtCreateFile(LW_OUT PIO_FILE_HANDLE FileHandle,

Storage Developer Conference 2009 © 2009 Gerald Carter, Likewise Software. All rights reserved.

Server Service (cont)

33

NPFS PVFS RDR SRV

Lwiod

LwMsgCreateNamedPipe

ntcreate&X(\srvsvc)SrvSvcNetShareGetInfo

tcp/445

Lsassd

Srvsvcd

\Wkssvc\SrvsvcDeviceIoControl

Client File API

Driver API

Core API CreateSecCtx

Page 34: Likewise-CIFS...8 // Client IPC calls defined in  // Internal iomgr calls defined in  LW_NTSTATUS. LwNtCreateFile(LW_OUT PIO_FILE_HANDLE FileHandle,

Storage Developer Conference 2009 © 2009 Gerald Carter, Likewise Software. All rights reserved.

Building Likewise CIFS

Simple build system for Linux & FreeBSDStep 1: Download the source code

$ git clone git://git.likewiseopen.org/likewise-openStep 2: Build the likewise-open components

$ build/mkcomp [--noincremental] [--debug] allInstalls all pieces to “staging/install-root/”

Step 3: Generate RPMs/DEBs (Linux only)$ build/mkpkg [--debug] allCreates packages in “staging/packages/”

34

Page 35: Likewise-CIFS...8 // Client IPC calls defined in  // Internal iomgr calls defined in  LW_NTSTATUS. LwNtCreateFile(LW_OUT PIO_FILE_HANDLE FileHandle,

Storage Developer Conference 2009 © 2009 Gerald Carter, Likewise Software. All rights reserved.

Questions?

[email protected]://www.likewiseopen.org/git://git.likewiseopen.org/likewise-open