New SMB add-on (#437)

* New SMB add-on

* Update config.json
This commit is contained in:
Pascal Vizeli
2018-11-03 23:03:10 +01:00
committed by GitHub
parent b9075a87cc
commit f425a5b1d9
5 changed files with 90 additions and 92 deletions

View File

@@ -1,5 +1,10 @@
# Changelog # Changelog
## 7
- Remove guest access
- Cleanup structure
- Use hostname for samba device name
## 6 ## 6
- Enable ntlm auth for Windows10 - Enable ntlm auth for Windows10

View File

@@ -5,7 +5,8 @@ FROM $BUILD_FROM
ENV LANG C.UTF-8 ENV LANG C.UTF-8
# Setup base # Setup base
RUN apk add --no-cache jq samba-server samba-common-tools RUN apk add --no-cache \
socat curl samba-server samba-common-tools
# Copy data # Copy data
COPY run.sh / COPY run.sh /

View File

@@ -1,6 +1,6 @@
{ {
"name": "Samba share", "name": "Samba share",
"version": "6", "version": "7",
"slug": "samba", "slug": "samba",
"description": "Expose Hass.io folders with SMB/CIFS", "description": "Expose Hass.io folders with SMB/CIFS",
"url": "https://home-assistant.io/addons/samba/", "url": "https://home-assistant.io/addons/samba/",
@@ -10,17 +10,8 @@
"map": ["config:rw", "ssl:rw", "addons:rw", "share:rw", "backup:rw"], "map": ["config:rw", "ssl:rw", "addons:rw", "share:rw", "backup:rw"],
"options": { "options": {
"workgroup": "WORKGROUP", "workgroup": "WORKGROUP",
"name": "hassio", "username": "hassio",
"guest": true, "password": null,
"map": {
"config": true,
"addons": true,
"ssl": false,
"share": true,
"backup": true
},
"username": "",
"password": "",
"interface": "", "interface": "",
"allow_hosts": [ "allow_hosts": [
"10.0.0.0/8", "10.0.0.0/8",
@@ -30,15 +21,6 @@
}, },
"schema": { "schema": {
"workgroup": "str", "workgroup": "str",
"name": "str",
"guest": "bool",
"map": {
"config": "bool",
"addons": "bool",
"ssl": "bool",
"share": "bool",
"backup": "bool"
},
"username": "str", "username": "str",
"password": "str", "password": "str",
"interface": "str", "interface": "str",

View File

@@ -4,89 +4,56 @@ set -e
CONFIG_PATH=/data/options.json CONFIG_PATH=/data/options.json
WORKGROUP=$(jq --raw-output '.workgroup' $CONFIG_PATH) WORKGROUP=$(jq --raw-output '.workgroup' $CONFIG_PATH)
NAME=$(jq --raw-output '.name' $CONFIG_PATH)
GUEST=$(jq --raw-output '.guest' $CONFIG_PATH)
USERNAME=$(jq --raw-output '.username // empty' $CONFIG_PATH)
PASSWORD=$(jq --raw-output '.password // empty' $CONFIG_PATH)
MAP_CONFIG=$(jq --raw-output '.map.config' $CONFIG_PATH)
MAP_ADDONS=$(jq --raw-output '.map.addons' $CONFIG_PATH)
MAP_SSL=$(jq --raw-output '.map.ssl' $CONFIG_PATH)
MAP_SHARE=$(jq --raw-output '.map.share' $CONFIG_PATH)
MAP_BACKUP=$(jq --raw-output '.map.backup' $CONFIG_PATH)
INTERFACE=$(jq --raw-output '.interface // empty' $CONFIG_PATH) INTERFACE=$(jq --raw-output '.interface // empty' $CONFIG_PATH)
ALLOW_HOSTS=$(jq --raw-output '.allow_hosts | join(" ")' $CONFIG_PATH) ALLOW_HOSTS=$(jq --raw-output '.allow_hosts | join(" ")' $CONFIG_PATH)
USERNAME=$(jq --raw-output '.username // empty' $CONFIG_PATH)
PASSWORD=$(jq --raw-output '.password // empty' $CONFIG_PATH)
function write_config() { WAIT_PIDS=()
echo " NAME=
[$1]
browseable = yes
writeable = yes
path = /$1
#guest ok = yes # Check Login data
#guest only = yes if [ -z "${USERNAME}" ] || [ -z "${PASSWORD}" ]; then
#public = yes echo "[ERROR] No valid login data inside options!"
exit 1
fi
#valid users = $USERNAME # Read hostname from API
#force user = root if ! NAME="$(curl -s -f -H "X-Hassio-Key: ${HASSIO_TOKEN}" http://hassio/info | jq --raw-output '.data.hostname')"; then
#force group = root echo "[WARN] Can't read hostname, use default!"
" >> /etc/smb.conf NAME="hassio"
} else
echo "[INFO] Read hostname: ${NAME}"
fi
# Setup config
sed -i "s|%%WORKGROUP%%|$WORKGROUP|g" /etc/smb.conf sed -i "s|%%WORKGROUP%%|$WORKGROUP|g" /etc/smb.conf
sed -i "s|%%NAME%%|$NAME|g" /etc/smb.conf sed -i "s|%%NAME%%|$NAME|g" /etc/smb.conf
sed -i "s|%%INTERFACE%%|$INTERFACE|g" /etc/smb.conf sed -i "s|%%INTERFACE%%|$INTERFACE|g" /etc/smb.conf
sed -i "s|%%ALLOW_HOSTS%%|$ALLOW_HOSTS|g" /etc/smb.conf sed -i "s|%%ALLOW_HOSTS%%|$ALLOW_HOSTS|g" /etc/smb.conf
sed -i "s|%%USERNAME%%|$USERNAME|g" /etc/smb.conf
## # Init users
# Write shares to config addgroup "${USERNAME}"
if [ "$MAP_CONFIG" == "true" ]; then adduser -D -H -G "${USERNAME}" -s /bin/false "${USERNAME}"
write_config "config" # shellcheck disable=SC1117
fi echo -e "${PASSWORD}\n${PASSWORD}" | smbpasswd -a -s -c /etc/smb.conf "${USERNAME}"
if [ "$MAP_ADDONS" == "true" ]; then
write_config "addons"
fi
if [ "$MAP_SSL" == "true" ]; then
write_config "ssl"
fi
if [ "$MAP_SHARE" == "true" ]; then
write_config "share"
fi
if [ "$MAP_BACKUP" == "true" ]; then
write_config "backup"
fi
##
# Set authentication options
if [ "$GUEST" == "true" ]; then
sed -i "s|#guest ok|guest ok|g" /etc/smb.conf
sed -i "s|#guest only|guest only|g" /etc/smb.conf
sed -i "s|#guest account|guest account|g" /etc/smb.conf
sed -i "s|#map to guest|map to guest|g" /etc/smb.conf
sed -i "s|#public|public|g" /etc/smb.conf
else
sed -i "s|#valid users|valid users|g" /etc/smb.conf
sed -i "s|#force user|force user|g" /etc/smb.conf
sed -i "s|#force group|force group|g" /etc/smb.conf
sed -i "s|#ntlm auth|ntlm auth|g" /etc/smb.conf
addgroup -g 1000 "$USERNAME"
adduser -D -H -G "$USERNAME" -s /bin/false -u 1000 "$USERNAME"
# shellcheck disable=SC1117
echo -e "$PASSWORD\n$PASSWORD" | smbpasswd -a -s -c /etc/smb.conf "$USERNAME"
fi
# Start samba
nmbd -F -S -s /etc/smb.conf & nmbd -F -S -s /etc/smb.conf &
NMBD_PID=$! WAIT_PIDS+=($!)
smbd -F -S -s /etc/smb.conf & smbd -F -S -s /etc/smb.conf &
SMBD_PID=$! WAIT_PIDS+=($!)
# Register stop # Register stop
function stop_samba() { function stop_samba() {
kill -15 "$NMBD_PID" echo "Kill Processes..."
kill -15 "$SMBD_PID" kill -15 "${WAIT_PIDS[@]}"
wait "$SMBD_PID" "$NMBD_PID" wait "${WAIT_PIDS[@]}"
echo "Done."
} }
trap "stop_samba" SIGTERM SIGHUP trap "stop_samba" SIGTERM SIGHUP
wait "$SMBD_PID" "$NMBD_PID" # Wait until all is done
wait "${WAIT_PIDS[@]}"

View File

@@ -2,7 +2,9 @@
netbios name = %%NAME%% netbios name = %%NAME%%
workgroup = %%WORKGROUP%% workgroup = %%WORKGROUP%%
server string = Samba HomeAssistant config share server string = Samba HomeAssistant config share
security: user
security = user
ntlm auth = yes
load printers = no load printers = no
disable spoolss = yes disable spoolss = yes
@@ -13,6 +15,47 @@
interfaces = %%INTERFACE%% interfaces = %%INTERFACE%%
hosts allow = %%ALLOW_HOSTS%% hosts allow = %%ALLOW_HOSTS%%
#guest account = root [config]
#map to guest = Bad Password browseable = yes
#ntlm auth = yes writeable = yes
path = /config
valid users = %%USERNAME%%
force user = root
force group = root
[addons]
browseable = yes
writeable = yes
path = /addons
valid users = %%USERNAME%%
force user = root
force group = root
[ssl]
browseable = yes
writeable = yes
path = /ssl
valid users = %%USERNAME%%
force user = root
force group = root
[share]
browseable = yes
writeable = yes
path = /share
valid users = %%USERNAME%%
force user = root
force group = root
[backup]
browseable = yes
writeable = yes
path = /share
valid users = %%USERNAME%%
force user = root
force group = root