adds postproduction solution
This commit is contained in:
		
							parent
							
								
									7b12c7c326
								
							
						
					
					
						commit
						15297f5376
					
				| 
						 | 
					@ -64,4 +64,4 @@ To get you going here are a few links.
 | 
				
			||||||
* general vim configuration [tutorial](https://linuxhint.com/vimrc_tutorial/)
 | 
					* general vim configuration [tutorial](https://linuxhint.com/vimrc_tutorial/)
 | 
				
			||||||
* [powerline](https://powerline.readthedocs.io/en/master/overview.html#screenshots)
 | 
					* [powerline](https://powerline.readthedocs.io/en/master/overview.html#screenshots)
 | 
				
			||||||
* quick options for your [bashrc](https://www.ivanglinkin.com/useful-bashrc-configuration-file/)
 | 
					* quick options for your [bashrc](https://www.ivanglinkin.com/useful-bashrc-configuration-file/)
 | 
				
			||||||
* why not try [zsh](https://www.howtogeek.com/362409/what-is-zsh-and-why-should-you-use-it-instead-of-bash/)?
 | 
					* why not try [zsh](https://linuxhint.com/differences_between_bash_zsh/)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,420 @@
 | 
				
			||||||
 | 
					# Post production SFTP solution
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Mapping out the users
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					From the information given in the text I would create the following users and groups:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					We could write a script that takes a CSV file as input but I decided to go the oldschool way and just write a full script.
 | 
				
			||||||
 | 
					First we add the groups we think we'll need.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```bash
 | 
				
			||||||
 | 
					#!/bin/bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					groupadd production
 | 
				
			||||||
 | 
					groupadd planning
 | 
				
			||||||
 | 
					groupadd script
 | 
				
			||||||
 | 
					groupadd technical
 | 
				
			||||||
 | 
					groupadd videoeditors
 | 
				
			||||||
 | 
					groupadd audioengineers
 | 
				
			||||||
 | 
					groupadd sftpjailed
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Most of these are self explanitory, but the `production`, `technical` and `sftpjailed` require a bit more explanitation.
 | 
				
			||||||
 | 
					They are *overarching* groups, meaning they group other groups.
 | 
				
			||||||
 | 
					From a Linux standpoint they are no different from the normal groups, but we'll use the to group together the technical department and all users that don't need ssh.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Next we'll add the users and we'll set their passwords to a *test* password.
 | 
				
			||||||
 | 
					In order for them to share a `$HOME` directory we'll need to create one as well.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```bash
 | 
				
			||||||
 | 
					#!/bin/bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# adding the groups
 | 
				
			||||||
 | 
					groupadd production
 | 
				
			||||||
 | 
					groupadd planning
 | 
				
			||||||
 | 
					groupadd script
 | 
				
			||||||
 | 
					groupadd technical
 | 
				
			||||||
 | 
					groupadd videoeditors
 | 
				
			||||||
 | 
					groupadd audioengineers
 | 
				
			||||||
 | 
					groupadd sftpjailed
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# creating the shared home directory
 | 
				
			||||||
 | 
					mkdir -p /home/postproduction
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# adding the users
 | 
				
			||||||
 | 
					useradd marie
 | 
				
			||||||
 | 
					echo "marie:test" | chpasswd
 | 
				
			||||||
 | 
					usermod -d /home/postproduction marie
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					useradd hugo
 | 
				
			||||||
 | 
					echo "hugo:test" | chpasswd
 | 
				
			||||||
 | 
					usermod -d /home/postproduction hugo
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					useradd victor
 | 
				
			||||||
 | 
					echo "victor:test" | chpasswd
 | 
				
			||||||
 | 
					usermod -d /home/postproduction victor
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					useradd camille
 | 
				
			||||||
 | 
					echo "camille:test" | chpasswd
 | 
				
			||||||
 | 
					usermod -d /home/postproduction camille
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					useradd dave
 | 
				
			||||||
 | 
					echo "dave:test" | chpasswd
 | 
				
			||||||
 | 
					usermod -d /home/postproduction dave
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					useradd sarah
 | 
				
			||||||
 | 
					echo "sarah:test" | chpasswd
 | 
				
			||||||
 | 
					usermod -d /home/postproduction sarah
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					useradd ester
 | 
				
			||||||
 | 
					echo "ester:test" | chpasswd
 | 
				
			||||||
 | 
					usermod -d /home/postproduction ester
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					useradd adam
 | 
				
			||||||
 | 
					echo "adam:test" | chpasswd
 | 
				
			||||||
 | 
					usermod -d /home/postproduction adam
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					useradd eefje
 | 
				
			||||||
 | 
					echo "eefje:test" | chpasswd
 | 
				
			||||||
 | 
					usermod -d /home/postproduction eefje
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					useradd alex
 | 
				
			||||||
 | 
					echo "alex:test" | chpasswd
 | 
				
			||||||
 | 
					usermod -d /home/postproduction alex
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The quick ones among you probably see there is quite a lot of room for error here when typing the same names over and over again.
 | 
				
			||||||
 | 
					We can optimise this with some easy variables.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```bash
 | 
				
			||||||
 | 
					#!/bin/bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# the shared home for all users
 | 
				
			||||||
 | 
					sharedhome="/home/postproduction"
 | 
				
			||||||
 | 
					mkdir -p $sharedhome
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# adding the groups
 | 
				
			||||||
 | 
					groupadd production
 | 
				
			||||||
 | 
					groupadd planning
 | 
				
			||||||
 | 
					groupadd script
 | 
				
			||||||
 | 
					groupadd technical
 | 
				
			||||||
 | 
					groupadd videoeditors
 | 
				
			||||||
 | 
					groupadd audioengineers
 | 
				
			||||||
 | 
					groupadd sftpjailed
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# adding the users
 | 
				
			||||||
 | 
					username="marie"
 | 
				
			||||||
 | 
					useradd $username
 | 
				
			||||||
 | 
					echo "$username:test" | chpasswd
 | 
				
			||||||
 | 
					usermod -d $sharedhome $username
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					username="victor"
 | 
				
			||||||
 | 
					useradd $username
 | 
				
			||||||
 | 
					echo "$username:test" | chpasswd
 | 
				
			||||||
 | 
					usermod -d $sharedhome $username
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					username="camille"
 | 
				
			||||||
 | 
					useradd $username
 | 
				
			||||||
 | 
					echo "$username:test" | chpasswd
 | 
				
			||||||
 | 
					usermod -d $sharedhome $username
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					username="dave"
 | 
				
			||||||
 | 
					useradd $username
 | 
				
			||||||
 | 
					echo "$username:test" | chpasswd
 | 
				
			||||||
 | 
					usermod -d $sharedhome $username
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					username="sarah"
 | 
				
			||||||
 | 
					useradd $username
 | 
				
			||||||
 | 
					echo "$username:test" | chpasswd
 | 
				
			||||||
 | 
					usermod -d $sharedhome $username
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					username="ester"
 | 
				
			||||||
 | 
					useradd $username
 | 
				
			||||||
 | 
					echo "$username:test" | chpasswd
 | 
				
			||||||
 | 
					usermod -d $sharedhome $username
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					username="adam"
 | 
				
			||||||
 | 
					useradd $username
 | 
				
			||||||
 | 
					echo "$username:test" | chpasswd
 | 
				
			||||||
 | 
					usermod -d $sharedhome $username
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					username="eefje"
 | 
				
			||||||
 | 
					useradd $username
 | 
				
			||||||
 | 
					echo "$username:test" | chpasswd
 | 
				
			||||||
 | 
					usermod -d $sharedhome $username
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					username="alex"
 | 
				
			||||||
 | 
					useradd $username
 | 
				
			||||||
 | 
					echo "$username:test" | chpasswd
 | 
				
			||||||
 | 
					usermod -d $sharedhome $username
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Those who already did programming before see this is an ideal situation to create our own [functions](https://ryanstutorials.net/bash-scripting-tutorial/bash-functions.php).
 | 
				
			||||||
 | 
					Try to optimise the script if you can with your own function!
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Next we need to add all the users to their groups.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```bash
 | 
				
			||||||
 | 
					#!/bin/bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# the shared home for all users
 | 
				
			||||||
 | 
					sharedhome="/home/postproduction"
 | 
				
			||||||
 | 
					mkdir -p $sharedhome
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# adding the groups
 | 
				
			||||||
 | 
					groupadd production
 | 
				
			||||||
 | 
					groupadd planning
 | 
				
			||||||
 | 
					groupadd script
 | 
				
			||||||
 | 
					groupadd technical
 | 
				
			||||||
 | 
					groupadd videoeditors
 | 
				
			||||||
 | 
					groupadd audioengineers
 | 
				
			||||||
 | 
					groupadd sftpjailed
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# adding the users
 | 
				
			||||||
 | 
					username="marie"
 | 
				
			||||||
 | 
					useradd $username
 | 
				
			||||||
 | 
					echo "$username:test" | chpasswd
 | 
				
			||||||
 | 
					usermod -d $sharedhome $username
 | 
				
			||||||
 | 
					usermod -a -G production $username
 | 
				
			||||||
 | 
					usermod -a -G planning $username
 | 
				
			||||||
 | 
					usermod -a -G script $username
 | 
				
			||||||
 | 
					usermod -a -G technical $username
 | 
				
			||||||
 | 
					usermod -a -G videoeditors $username
 | 
				
			||||||
 | 
					usermod -a -G audioengineers $username
 | 
				
			||||||
 | 
					usermod -a -G sftpjailed $username
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					username="hugo"
 | 
				
			||||||
 | 
					useradd $username
 | 
				
			||||||
 | 
					echo "$username:test" | chpasswd
 | 
				
			||||||
 | 
					usermod -d $sharedhome $username
 | 
				
			||||||
 | 
					usermod -a -G production $username
 | 
				
			||||||
 | 
					usermod -a -G planning $username
 | 
				
			||||||
 | 
					usermod -a -G script $username
 | 
				
			||||||
 | 
					usermod -a -G sftpjailed $username
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					username="victor"
 | 
				
			||||||
 | 
					useradd $username
 | 
				
			||||||
 | 
					echo "$username:test" | chpasswd
 | 
				
			||||||
 | 
					usermod -d $sharedhome $username
 | 
				
			||||||
 | 
					usermod -a -G production $username
 | 
				
			||||||
 | 
					usermod -a -G planning $username
 | 
				
			||||||
 | 
					usermod -a -G sftpjailed $username
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					username="camille"
 | 
				
			||||||
 | 
					useradd $username
 | 
				
			||||||
 | 
					echo "$username:test" | chpasswd
 | 
				
			||||||
 | 
					usermod -d $sharedhome $username
 | 
				
			||||||
 | 
					usermod -a -G production $username
 | 
				
			||||||
 | 
					usermod -a -G planning $username
 | 
				
			||||||
 | 
					usermod -a -G sftpjailed $username
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					username="dave"
 | 
				
			||||||
 | 
					useradd $username
 | 
				
			||||||
 | 
					echo "$username:test" | chpasswd
 | 
				
			||||||
 | 
					usermod -d $sharedhome $username
 | 
				
			||||||
 | 
					usermod -a -G videoeditors $username
 | 
				
			||||||
 | 
					usermod -a -G technical $username
 | 
				
			||||||
 | 
					usermod -a -G sftpjailed $username
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					username="sarah"
 | 
				
			||||||
 | 
					useradd $username
 | 
				
			||||||
 | 
					echo "$username:test" | chpasswd
 | 
				
			||||||
 | 
					usermod -d $sharedhome $username
 | 
				
			||||||
 | 
					usermod -a -G videoeditors $username
 | 
				
			||||||
 | 
					usermod -a -G technical $username
 | 
				
			||||||
 | 
					usermod -a -G sftpjailed $username
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					username="ester"
 | 
				
			||||||
 | 
					useradd $username
 | 
				
			||||||
 | 
					echo "$username:test" | chpasswd
 | 
				
			||||||
 | 
					usermod -d $sharedhome $username
 | 
				
			||||||
 | 
					usermod -a -G videoeditors $username
 | 
				
			||||||
 | 
					usermod -a -G technical $username
 | 
				
			||||||
 | 
					usermod -a -G sftpjailed $username
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					username="adam"
 | 
				
			||||||
 | 
					useradd $username
 | 
				
			||||||
 | 
					echo "$username:test" | chpasswd
 | 
				
			||||||
 | 
					usermod -d $sharedhome $username
 | 
				
			||||||
 | 
					usermod -a -G audioengineers $username
 | 
				
			||||||
 | 
					usermod -a -G technical $username
 | 
				
			||||||
 | 
					usermod -a -G sftpjailed $username
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					username="eefje"
 | 
				
			||||||
 | 
					useradd $username
 | 
				
			||||||
 | 
					echo "$username:test" | chpasswd
 | 
				
			||||||
 | 
					usermod -d $sharedhome $username
 | 
				
			||||||
 | 
					usermod -a -G audioengineers $username
 | 
				
			||||||
 | 
					usermod -a -G technical $username
 | 
				
			||||||
 | 
					usermod -a -G sftpjailed $username
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					username="alex"
 | 
				
			||||||
 | 
					useradd $username
 | 
				
			||||||
 | 
					echo "$username:test" | chpasswd
 | 
				
			||||||
 | 
					usermod -d $sharedhome $username
 | 
				
			||||||
 | 
					usermod -a -G production $username
 | 
				
			||||||
 | 
					usermod -a -G planning $username
 | 
				
			||||||
 | 
					usermod -a -G script $username
 | 
				
			||||||
 | 
					usermod -a -G technical $username
 | 
				
			||||||
 | 
					usermod -a -G videoeditors $username
 | 
				
			||||||
 | 
					usermod -a -G audioengineers $username
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					When testing this out you'll quickly discover the need for a second script, one that removes all the users and groups from your system.
 | 
				
			||||||
 | 
					I would advise something along these lines.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```bash
 | 
				
			||||||
 | 
					#!/bin/bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sharedhome="/home/postproduction"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# removing the groups
 | 
				
			||||||
 | 
					groupdel production
 | 
				
			||||||
 | 
					groupdel planning
 | 
				
			||||||
 | 
					groupdel script
 | 
				
			||||||
 | 
					groupdel technical
 | 
				
			||||||
 | 
					groupdel videoeditors
 | 
				
			||||||
 | 
					groupdel audioengineers
 | 
				
			||||||
 | 
					groupdel sftpjailed
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# removing the users
 | 
				
			||||||
 | 
					userdel marie
 | 
				
			||||||
 | 
					userdel hugo
 | 
				
			||||||
 | 
					userdel victor
 | 
				
			||||||
 | 
					userdel camille
 | 
				
			||||||
 | 
					userdel dave
 | 
				
			||||||
 | 
					userdel sarah
 | 
				
			||||||
 | 
					userdel ester
 | 
				
			||||||
 | 
					userdel adam
 | 
				
			||||||
 | 
					userdel eefje
 | 
				
			||||||
 | 
					userdel alex
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# removing the groups created for the users
 | 
				
			||||||
 | 
					groupdel marie
 | 
				
			||||||
 | 
					groupdel hugo
 | 
				
			||||||
 | 
					groupdel victor
 | 
				
			||||||
 | 
					groupdel camille
 | 
				
			||||||
 | 
					groupdel dave
 | 
				
			||||||
 | 
					groupdel sarah
 | 
				
			||||||
 | 
					groupdel ester
 | 
				
			||||||
 | 
					groupdel adam
 | 
				
			||||||
 | 
					groupdel eefje
 | 
				
			||||||
 | 
					groupdel alex
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# removing the home
 | 
				
			||||||
 | 
					rm -r $sharedhome
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Both scripts together now give us a basic toolset to add and remove the users we need.
 | 
				
			||||||
 | 
					They work quite nicely but are not *verbose* at all!
 | 
				
			||||||
 | 
					To add debug messages with `echo` all around will become very prone to errors unless we start adding `for` loops and `functions`.
 | 
				
			||||||
 | 
					Let's start with a for loop in the remove script.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```bash 
 | 
				
			||||||
 | 
					#!/bin/bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sharedhome="/home/postproduction"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					groups="production planning script technical videoeditors audioengineers sftpjailed"
 | 
				
			||||||
 | 
					users="marie hugo victor camille dave sarah ester adam eefje alex"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# 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
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					So much cleaner no?
 | 
				
			||||||
 | 
					This is also a good place to start controlling our `STDERR` output.
 | 
				
			||||||
 | 
					Can you think of a clean way to deal with the error messages?
 | 
				
			||||||
 | 
					Remember what `$?` does?
 | 
				
			||||||
 | 
					And you remember what `2> /dev/null` does?
 | 
				
			||||||
 | 
					A combination of these two concepts can tame the error message output quite nicely.
 | 
				
			||||||
 | 
					Have a test yourself!
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The script to create the users will be a bit more complicated as there are a lot more variables.
 | 
				
			||||||
 | 
					A function would be ideal, but we'll try to deal with the problem without first!
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```bash
 | 
				
			||||||
 | 
					#!/bin/bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sharedhome="/home/postproduction"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					groups="production planning script technical videoeditors audioengineers sftpjailed"
 | 
				
			||||||
 | 
					users="marie hugo victor camille dave sarah ester adam eefje alex"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					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"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# 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
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Two things worth pointing out in the above script are:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					1. the loop in a loop
 | 
				
			||||||
 | 
					2. the `eval` statement
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The loop in a loop might look intimidating at first sight but it's not super exotic.
 | 
				
			||||||
 | 
					For each user is the `$users` list we will look at each group they need to belong to.
 | 
				
			||||||
 | 
					for each of those groups we add them with `usermod`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The `eval` is a bit trickier to explain and I would consider it a bit of a *hack* to make it all work.
 | 
				
			||||||
 | 
					For each user in the `$users` list we also have a variable with their name.
 | 
				
			||||||
 | 
					This variable contains the groups they need to belong to.
 | 
				
			||||||
 | 
					The `eval` statement will *evaluate* the expression following and `\$` will interpretate the $ sign *litterally*.
 | 
				
			||||||
 | 
					All of this serves to make a call to `$camille` and get `"production script sftpjailed"` in return so we can iterate over the groups.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					There are *cleaner* ways of doing this and I would advise you to look into bash [arrays](https://www.gnu.org/software/bash/manual/html_node/Arrays.html).
 | 
				
			||||||
 | 
					If you decide to try this out, you *might* run into compatibility issues when testing in `zsh` but from inside a `bash` script you should be fine.
 | 
				
			||||||
		Loading…
	
		Reference in New Issue