188 lines
4.0 KiB
Bash
188 lines
4.0 KiB
Bash
|
#!/bin/bash
|
||
|
|
||
|
# first we declare all our data
|
||
|
|
||
|
# the shared home for all our files
|
||
|
sharedhome="/home/postproduction/"
|
||
|
|
||
|
# all the groups and users we need
|
||
|
groups="production planning script technical videoeditors audioengineers sftpjailed"
|
||
|
users="marie hugo victor camille dave sarah ester adam eefje alex"
|
||
|
|
||
|
# each user also has to belong to specific groups
|
||
|
marie="production planning script technical videoeditors audioengineers sftpjailed"
|
||
|
hugo="production planning script sftpjailed"
|
||
|
victor="production planning sftpjailed"
|
||
|
camille="production script sftpjailed"
|
||
|
dave="technical videoeditors sftpjailed"
|
||
|
sarah="technical videoeditors sftpjailed"
|
||
|
ester="technical videoeditors sftpjailed"
|
||
|
adam="technical audioengineers sftpjailed"
|
||
|
eefje="technical audioengineers sftpjailed"
|
||
|
alex="production planning script technical videoeditors audioengineers"
|
||
|
|
||
|
# now we create the functions we need
|
||
|
|
||
|
function addusers () {
|
||
|
# adding the home
|
||
|
mkdir -p $sharedhome
|
||
|
|
||
|
# adding the groups
|
||
|
for group in $groups
|
||
|
do
|
||
|
echo "adding group $group"
|
||
|
groupadd $group
|
||
|
done
|
||
|
|
||
|
# adding the users
|
||
|
for user in $users
|
||
|
do
|
||
|
echo "adding user $user"
|
||
|
useradd $user
|
||
|
echo "setting the password for $user"
|
||
|
echo "$user:test" | chpasswd
|
||
|
done
|
||
|
|
||
|
# adding the users to their groups
|
||
|
for user in $users
|
||
|
do
|
||
|
echo "adding groups for $user"
|
||
|
usergroups=$(eval echo \$$user)
|
||
|
for group in $usergroups
|
||
|
do
|
||
|
echo "adding $user to $group"
|
||
|
usermod -a -G $group $user
|
||
|
done
|
||
|
done
|
||
|
}
|
||
|
|
||
|
function delusers () {
|
||
|
# removing the groups
|
||
|
for group in $groups
|
||
|
do
|
||
|
echo "removing group $group"
|
||
|
groupdel $group
|
||
|
done
|
||
|
|
||
|
# removing the users and their primary groups
|
||
|
for user in $users
|
||
|
do
|
||
|
echo "removing user $user"
|
||
|
userdel $user
|
||
|
echo "removing group $user"
|
||
|
groupdel $user
|
||
|
done
|
||
|
|
||
|
# removing the home
|
||
|
rm -r $sharedhome
|
||
|
}
|
||
|
|
||
|
function createtree () {
|
||
|
movie="awesome_movie_project"
|
||
|
|
||
|
# we'll make a folder to house all the movie data
|
||
|
mkdir -p $sharedhome$movie
|
||
|
|
||
|
# we cd into that directory to make our life easier
|
||
|
cd $sharedhome$movie
|
||
|
echo "we'll create all files here: $(pwd)"
|
||
|
|
||
|
# planning
|
||
|
touch planning.ics
|
||
|
chown marie:planning planning.ics
|
||
|
chmod 664 planning.ics
|
||
|
|
||
|
# scenario
|
||
|
touch scenario.md
|
||
|
chown marie:script scenario.md
|
||
|
chmod 664 scenario.md
|
||
|
|
||
|
# audiofiles
|
||
|
mkdir audiofiles
|
||
|
chown marie:audioengineers audiofiles
|
||
|
chmod 2770 audiofiles
|
||
|
mkdir -p audiofiles/day{01..14}
|
||
|
|
||
|
touch audiofiles/day{01..14}/recording_{00..99}.wav
|
||
|
chown marie:audioengineers -R audiofiles
|
||
|
chmod 2770 audiofiles
|
||
|
chmod 2770 audiofiles/day{01..14}
|
||
|
chmod 0660 audiofiles/day{01..14}/*.wav
|
||
|
|
||
|
# videofiles
|
||
|
mkdir videofiles
|
||
|
chown marie:videoeditors videofiles
|
||
|
chmod 2770 videofiles
|
||
|
mkdir -p videofiles/day{01..14}
|
||
|
|
||
|
touch videofiles/day{01..14}/clip_{00..99}.mp4
|
||
|
chown marie:videoeditors -R videofiles
|
||
|
chmod 2770 videofiles
|
||
|
chmod 2770 videofiles/day{01..14}
|
||
|
chmod 0660 videofiles/day{01..14}/*.mp4
|
||
|
|
||
|
# renders
|
||
|
mkdir -p renders
|
||
|
touch renders/final_render.{wav,mp4}
|
||
|
chmod 664 renders/final_render.{wav,mp4}
|
||
|
chown marie:technical renders
|
||
|
chown marie:audioengineers renders/final_render.wav
|
||
|
chown marie:videoeditors renders/final_render.mp4
|
||
|
}
|
||
|
|
||
|
function setupsftp () {
|
||
|
local configfile="/etc/ssh/sshd_config"
|
||
|
sed -i '/@movie/,+4d' $configfile
|
||
|
cat << EOF >> $configfile
|
||
|
# @movie
|
||
|
Match Group sftpjailed
|
||
|
ForceCommand internal-sftp -u 0002
|
||
|
ChrootDirectory $sharedhome
|
||
|
EOF
|
||
|
systemctl restart sshd.service
|
||
|
}
|
||
|
|
||
|
function showhelp () {
|
||
|
# shows a help message on the command line
|
||
|
echo "use add to add the users"
|
||
|
echo "use del to delete the users"
|
||
|
echo "use tree to create the tree layout"
|
||
|
}
|
||
|
|
||
|
# from here on out the actual program runs
|
||
|
|
||
|
if [ "$UID" -ne 0 ]
|
||
|
then
|
||
|
echo "you need to be root to execute this script"
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
case $1 in
|
||
|
add)
|
||
|
addusers
|
||
|
;;
|
||
|
del)
|
||
|
delusers
|
||
|
;;
|
||
|
tree)
|
||
|
createtree
|
||
|
;;
|
||
|
all)
|
||
|
echo "first we delete all previous users, groups, files and folders"
|
||
|
delusers
|
||
|
echo "now we add all users and groups"
|
||
|
addusers
|
||
|
echo "next we create the directory structure"
|
||
|
createtree
|
||
|
echo "and we set the sftp access limitations and umask"
|
||
|
setupsftp
|
||
|
echo "done"
|
||
|
;;
|
||
|
sftp)
|
||
|
setupsftp
|
||
|
;;
|
||
|
*)
|
||
|
showhelp
|
||
|
;;
|
||
|
esac
|