From 0d77a939198ec1ec29f6245ad2e36c9719352c6c Mon Sep 17 00:00:00 2001 From: quackerd Date: Fri, 19 Feb 2021 19:27:46 -0500 Subject: [PATCH] +README --- README.md | 29 ++++++++++++++++++++++++++++- add-user-group.py | 23 ++++++++++++----------- example/docker-compose.yml | 6 +++--- 3 files changed, 43 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index 7b1c9f7..c7f9743 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,30 @@ # docker-samba -Samba in Docker \ No newline at end of file +[![Build Status](https://ci.quacker.org/api/badges/d/docker-samba/status.svg)](https://ci.quacker.org/d/docker-samba) + +## What is this? +This is Samba server in Docker. The image is designed for flexbility and maintainability. You are expected to supply your own smb.conf and user/group configs. You also need to maintain the proper permissions for shared folders, which usually only need to be done correctly once at the beginning. + +TL;DR: if you are familiar with Samba configuration, this image is for you. + +## Usage +### Volumes +- `/samba/smb.conf`: the Samba configuration file that the container uses. +- `/samba/[share]`: please map your Samba share folders to `/samba/` in the container. + +### Environment Variables +- `GROUPS`: group configurations. Format: `[group name],[group id]`. Connect multiple group configs with `;`. +- `USERS`: user configurations. Format: `[username],[user id],[samba password],[additional group names*]`. `*`: this option is optional and you can specify multiple groups using `,` as separator. +- `SMBD_ARGS`: additional parameters for `smbd`. E.g. `-d 2` which enables debug output. + +### docker-compose +Please see the `example` folder. + +## Updating +`docker-compose pull && docker-compose down && docker-compose up -d` + +## Troubleshooting +Add `-d 2` to `SMBD_ARGS` for samba debug output. + +Q: I can't access mounted config file or directories? +A: Are you running SELinux? If so you need to set the correct tag on mounted volumes `chcon -t svirt_sandbox_file_t [your file/folder]` diff --git a/add-user-group.py b/add-user-group.py index e28eb65..8ea31b1 100644 --- a/add-user-group.py +++ b/add-user-group.py @@ -19,8 +19,8 @@ def main(): if (len(elements) != 2): print("Skipping invalid group config string \"" + group + "\"") continue - gid = elements[1] - gname = elements[0] + gid = elements[1].strip() + gname = elements[0].strip() cmd = "addgroup -g" + shlex.quote(gid) + " " + shlex.quote(gname) print(cmd) subprocess.check_call("addgroup -g" + shlex.quote(gid) + " " + shlex.quote(gname), shell=True, stdout=subprocess.DEVNULL) @@ -29,20 +29,21 @@ def main(): # username,uid,password,[group] for user in users: elements = user.split(',') - if (len(elements) != 3 and len(elements) != 4): + if (len(elements) < 3): print("Skipping invalid user config string \"" + user + "\"") continue - uname = elements[0] - uid = elements[1] - passwd = elements[2] + uname = elements[0].strip() + uid = elements[1].strip() + passwd = elements[2].strip() cmd = "adduser -D -H -u " + shlex.quote(uid) + " " + shlex.quote(uname) print(cmd) subprocess.check_call(cmd, shell=True, stdout=subprocess.DEVNULL) - if (len(elements) == 4): - gname = elements[3] - cmd = "addgroup " + shlex.quote(uname) + " " + shlex.quote(gname) - print(cmd) - subprocess.check_call(cmd, shell=True, stdout=subprocess.DEVNULL) + if (len(elements) > 3): + for i in range(3, len(elements)): + gname = elements[i].strip() + cmd = "addgroup " + shlex.quote(uname) + " " + shlex.quote(gname) + print(cmd) + subprocess.check_call(cmd, shell=True, stdout=subprocess.DEVNULL) # set passwd cmd = "echo -ne \"" + shlex.quote(passwd) + "\\n" + shlex.quote(passwd) + "\\n\" | smbpasswd -a -U " + shlex.quote(uname) print(cmd) diff --git a/example/docker-compose.yml b/example/docker-compose.yml index f40bfbe..7d545b6 100644 --- a/example/docker-compose.yml +++ b/example/docker-compose.yml @@ -16,10 +16,10 @@ services: - "445:445/tcp" environment: # create two users: "user1" with uid 1000, smb password password1 and add user1 to group1 - # "user2" with uid 1001, smb password password2 and add user2 to group1 - - "USERS=user1,1000,password1,group1;user2,1001,password2,group1" + # "user2" with uid 1001, smb password password2 and add user2 to group1 and group2 + - "USERS=user1,1000,password1,group1;user2,1001,password2,group1,group2" # create a group with group name "group1" and gid 2000 - - "GROUPS=group1,2000" + - "GROUPS=group1,2000;group2,2001" # launch smbd with extra parameters => -d 2 means log level = 2 - "SMBD_ARGS=-d 2" restart: unless-stopped