UNPKG

node-smb-server

Version:

A Pure JavaScript SMB Server Implementation

138 lines (108 loc) 3.36 kB
# SMB Server for Node.js ## Overwiew **node-smb-server** is an open-source JavaScript implementation of the [SMB/CIFS][] file sharing protocol. Some highlights: * pure JavaScript * fully configurable/customizable * extensible: allows to expose non-filesystem based data as a mountable file system via an abstract backend SPI (similar to Samba's VFS) ## Installation ``` npm install node-smb-server ``` or ``` git clone https://github.com/adobe/node-smb-server.git cd node-smb-server npm install ``` ## Getting started Execute the following commands in a terminal: ``` cd <node-smb-server install dir> npm start ``` In Finder, open the 'Connect to Server' dialog (K) and enter the url `smb://localhost:8445/fs` (user: `test`, password: `test`). ## Getting your hands dirty ### User management The following users are pre-configured: `test/test`, `admin/admin`, `guest/<empty password>` Users can be edited in the `config.json` file: ``` ... "users" : { "test" : { "lmHash" : "01fc5a6be7bc6929aad3b435b51404ee", "ntlmHash" : "0cb6948805f797bf2a82807973b89537" }, "admin" : { "lmHash" : "f0d412bd764ffe81aad3b435b51404ee", "ntlmHash" : "209c6174da490caeb422f3fa5a7ae634" }, "guest" : { "lmHash" : "aad3b435b51404eeaad3b435b51404ee", "ntlmHash" : "31d6cfe0d16ae931b73c59d7e0c089c0" } } ... ``` Password hashes can be computed by running: ``` node createhash.js ``` ### Share configuration Share configurations can be edited in the `config.json` file, e.g.: ``` ... "shares": { "FS": { "backend": "fs", "description": "fs-based test share", "path": "./smbroot" }, "JCR": { "backend": "jcr", "description": "AEM-based test share", "host": "localhost", "port": 4502, "protocol": "http:", "auth": { "user": "<user>", "pass": "<pwd>" }, "path": "/", "maxSockets": 64, "contentCacheTTL": 30000, "binCacheTTL": 600000 }, ... ``` ### Developing a custom backend Consider the following example use case: *You would like to enable your desktop applications to access data and documents stored in a RDBMS or a Cloud-based service.* You could write a custom backend by implementing the `Share`, `Tree` and `File` interfaces of the virtual backend SPI (`lib/spi`). Check out the existing implementations (`lib/backends`) to get an idea. ## Current Status * Implements CIFS and MS-SMB 1.0. * Support for SMB2 is currently work in progress. * Supports LM, LMv2, NTLM, NTLMSSP authentication protocols * Supported backends: * local file system (`lib/backends/fs`) * JCR (`lib/backends/jcr`) * AEM Assets (`lib/backends/dam`) * Tested with Finder on OS X (Yosemite, El Capitan, Sierra). ## ToDo's * Test with other clients on other platforms (Windows, Linux). * Test cases/suite CIFS/SMB: * missing NT_TRANSACT subcommands * missing TRANSACTION subcommands * missing TRANSACTION2 subcommand information levels * missing CIFS commands: * TRANSACTION_SECONDARY * TRANSACTION2_SECONDARY * NT_TRANSACT_SECONDARY * OPEN_PRINT_FILE * support for named streams? * SMB Signing? * proper implementation of LOCKING_ANDX? Check/Implement the following protocol extensions/versions: * SMB2/3 [SMB/CIFS]: http://en.wikipedia.org/wiki/Server_Message_Block