smb_utilities/create_share.sh
2025-05-18 23:20:48 +00:00

69 lines
1.9 KiB
Bash
Executable File

#!/bin/bash
# Usage check
if [ "$#" -ne 2 ]; then
echo "Usage: $0 <folder_path> <username>"
exit 1
fi
FOLDER_PATH="$1"
USERNAME="$2"
SMBCONF="/etc/samba/smb.conf"
SHARE_CONFIG_DIR="/etc/samba/shares.d"
# 1. Check if user exists
if ! id "$USERNAME" &>/dev/null; then
echo "Error: User '$USERNAME' does not exist."
exit 2
fi
# 2. Create folder if it doesn't exist, set ownership and permissions
if [ ! -d "$FOLDER_PATH" ]; then
echo "Creating directory: $FOLDER_PATH"
mkdir -p "$FOLDER_PATH"
chown "$USERNAME":"$USERNAME" "$FOLDER_PATH"
chmod 770 "$FOLDER_PATH"
else
echo "Directory already exists: $FOLDER_PATH"
fi
# 3. Determine share name from folder name
SHARE_NAME=$(basename "$FOLDER_PATH")
# 4. Ensure shares.d directory exists
if [ ! -d "$SHARE_CONFIG_DIR" ]; then
mkdir -p "$SHARE_CONFIG_DIR"
fi
# 5. Create Samba share config file
SHARE_CONFIG_FILE="$SHARE_CONFIG_DIR/$SHARE_NAME.conf"
if [ -f "$SHARE_CONFIG_FILE" ]; then
echo "Warning: Share config already exists: $SHARE_CONFIG_FILE"
else
cat <<EOF > "$SHARE_CONFIG_FILE"
[$SHARE_NAME]
path = $FOLDER_PATH
valid users = $USERNAME
read only = no
browseable = yes
guest ok = no
create mask = 0660
directory mask = 0770
EOF
echo "Created Samba share config: $SHARE_CONFIG_FILE"
fi
# 6. Append include directive to main smb.conf if not already present
INCLUDE_LINE="include = $SHARE_CONFIG_FILE"
if ! grep -Fxq "$INCLUDE_LINE" "$SMBCONF"; then
echo "Appending include directive to $SMBCONF"
echo "\n# Include share definition for $SHARE_NAME" >> "$SMBCONF"
echo "$INCLUDE_LINE" >> "$SMBCONF"
else
echo "Include directive already present in $SMBCONF"
fi
# 7. Restart Samba service to apply changes
echo "Restarting Samba service..."
systemctl restart smbd && echo "Samba restarted successfully." || echo "Failed to restart Samba. Check logs."