mirror of
https://github.com/aljazceru/addons.git
synced 2025-12-18 21:54:20 +01:00
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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 /
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
99
samba/run.sh
99
samba/run.sh
@@ -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[@]}"
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user