Update scripts and deploy with gnu stow
This commit is contained in:
59
scripts/script-files-permissions-set
Executable file
59
scripts/script-files-permissions-set
Executable file
@@ -0,0 +1,59 @@
|
||||
#!/usr/bin/env bash
|
||||
# Intelligently change permissions on selected directories
|
||||
# Copyright 2021-2025 Bryan C. Roessler
|
||||
# Licensed under the Apache License, Version 2.0
|
||||
p="${BASH_SOURCE[0]%/*}"; [[ -r $p/script-functions ]] && . "$p"/script-functions || exit 1
|
||||
|
||||
is_root
|
||||
|
||||
if [[ $# -eq 0 ]]; then
|
||||
echo "No arguments provided, using autodetection"
|
||||
paths=("$PWD")
|
||||
user=$(stat -c "%U" "$PWD")
|
||||
group=$(stat -c "%G" "$PWD")
|
||||
elif [[ $# -eq 1 ]]; then
|
||||
user="$1"
|
||||
group="$1"
|
||||
paths=("$PWD")
|
||||
elif [[ $# -eq 2 ]]; then
|
||||
user="$1"
|
||||
group="$2"
|
||||
paths=("$PWD")
|
||||
elif [[ $# -gt 2 ]]; then
|
||||
user="$1"
|
||||
group="$2"
|
||||
paths=("${@:3}")
|
||||
fi
|
||||
|
||||
for path in "${paths[@]}"; do
|
||||
if [[ "$path" == "/" ]]; then
|
||||
echo "You are trying to operate on the root partition!"
|
||||
echo "This seems highly unusual!"
|
||||
ask_ok "Continue?" || exit $?
|
||||
fi
|
||||
og_user=$(stat -c "%U" "$path")
|
||||
og_group=$(stat -c "%G" "$path")
|
||||
printf "%-20s %-10s %-10s\n" "PATH" "USER" "GROUP"
|
||||
echo -e "$path\t$og_user\t$og_group"
|
||||
if [[ "$group" != "smbgrp" || "$og_group" != "smbgrp" ]]; then
|
||||
echo "$path is not world accessible by the smbgrp group"
|
||||
ask_ok "Change $path group $og_group to smbgrp?" && group="smbgrp"
|
||||
fi
|
||||
done
|
||||
|
||||
ask_ok "Apply user: $user and group: $group to ${paths[*]} and all subdirs?" && \
|
||||
chown -R "$user":"$group" "${paths[@]}"
|
||||
|
||||
# Set mode based on group:
|
||||
# - 6775: Enables read/write/execute for owner and group, with setgid bit for group inheritance.
|
||||
# - 755: Enables read/write/execute for owner, and read/execute for group and others.
|
||||
[[ "$group" == "smbgrp" ]] && mode=6775 || mode=755
|
||||
|
||||
ask_ok "Apply chmod $mode to ${paths[*]} and all subdirs?" && \
|
||||
chmod -R "$mode" "${paths[@]}"
|
||||
|
||||
# Let's do it in less steps (see above) for now unless it becomes a problem
|
||||
# TODO: Implement setuid/setgid functionality to ensure files and directories inherit user/group permissions.
|
||||
# echo "Apply setuid/setgid bits to ${paths[*]} and all subdirs?"
|
||||
# ask_ok "Files/dirs will inherit their " && \
|
||||
# chmod -R g+s,u+s "${paths[@]}"
|
||||
Reference in New Issue
Block a user