freedombone-adduser 11KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270
  1. #!/bin/bash
  2. #
  3. # .---. . .
  4. # | | |
  5. # |--- .--. .-. .-. .-.| .-. .--.--. |.-. .-. .--. .-.
  6. # | | (.-' (.-' ( | ( )| | | | )( )| | (.-'
  7. # ' ' --' --' -' - -' ' ' -' -' -' ' - --'
  8. #
  9. # Freedom in the Cloud
  10. #
  11. # Adds an user to the system
  12. # License
  13. # =======
  14. #
  15. # Copyright (C) 2015 Bob Mottram <bob@robotics.uk.to>
  16. #
  17. # This program is free software: you can redistribute it and/or modify
  18. # it under the terms of the GNU General Public License as published by
  19. # the Free Software Foundation, either version 3 of the License, or
  20. # (at your option) any later version.
  21. #
  22. # This program is distributed in the hope that it will be useful,
  23. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  24. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  25. # GNU General Public License for more details.
  26. #
  27. # You should have received a copy of the GNU General Public License
  28. # along with this program. If not, see <http://www.gnu.org/licenses/>.
  29. MY_USERNAME=$1
  30. SSH_PUBLIC_KEY="$2"
  31. GPG_KEYSERVER='hkp://keys.gnupg.net'
  32. SSH_PORT=2222
  33. COMPLETION_FILE=$HOME/freedombone-completed.txt
  34. SIP_EXTENSION=
  35. FULLBLOG_DOMAIN_NAME=
  36. if [ ! $MY_USERNAME ]; then
  37. echo 'No username was given'
  38. exit 1
  39. fi
  40. if [ -d /home/$MY_USERNAME ]; then
  41. echo "The user $MY_USERNAME already exists"
  42. exit 2
  43. fi
  44. if [ ! -f $COMPLETION_FILE ]; then
  45. echo "$COMPLETION_FILE not found"
  46. userdel -r $MY_USERNAME
  47. exit 3
  48. fi
  49. NEW_USER_PASSWORD="$(openssl rand -base64 10 | cut -c1-8)"
  50. useradd -m -p "$NEW_USER_PASSWORD" -s /bin/bash $MY_USERNAME
  51. adduser $MY_USERNAME sasl
  52. if [ ! -d /home/$MY_USERNAME ]; then
  53. echo 'Home directory was not created'
  54. exit 4
  55. fi
  56. if [ "$SSH_PUBLIC_KEY" ]; then
  57. if [ ${#SSH_PUBLIC_KEY} -gt 5 ]; then
  58. if [ -f "$SSH_PUBLIC_KEY" ]; then
  59. mkdir /home/$MY_USERNAME/.ssh
  60. cp $SSH_PUBLIC_KEY /home/$MY_USERNAME/.ssh/authorized_keys
  61. chown -R $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/.ssh
  62. echo 'ssh public key installed'
  63. else
  64. if [[ "$SSH_PUBLIC_KEY" == "ssh-"* ]]; then
  65. mkdir /home/$MY_USERNAME/.ssh
  66. echo "$SSH_PUBLIC_KEY" > /home/$MY_USERNAME/.ssh/authorized_keys
  67. chown -R $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/.ssh
  68. echo 'ssh public key installed'
  69. else
  70. echo 'The second parameter does not look like an ssh key'
  71. exit 5
  72. fi
  73. fi
  74. fi
  75. fi
  76. if [ ! -d /home/$MY_USERNAME/Maildir ]; then
  77. echo 'Email directory was not created'
  78. userdel -r $MY_USERNAME
  79. exit 6
  80. fi
  81. if grep -q "set from=" /home/$MY_USERNAME/.muttrc; then
  82. sed -i "s|set from=.*|set from='$MY_USERNAME <$MY_USERNAME@$HOSTNAME>'|g" /home/$MY_USERNAME/.muttrc
  83. else
  84. echo "set from='$MY_USERNAME <$MY_USERNAME@$HOSTNAME>'" >> /home/$MY_USERNAME/.muttrc
  85. fi
  86. USERN='$USER@'
  87. sed -i "s|$USERN|$MY_USERNAME@|g" /home/$MY_USERNAME/.procmailrc
  88. # generate a gpg key
  89. echo "Making a GPG key for $MY_USERNAME@$HOSTNAME"
  90. mkdir /home/$MY_USERNAME/.gnupg
  91. echo "keyserver $GPG_KEYSERVER" >> /home/$MY_USERNAME/.gnupg/gpg.conf
  92. echo 'keyserver-options auto-key-retrieve' >> /home/$MY_USERNAME/.gnupg/gpg.conf
  93. echo '' >> /home/$MY_USERNAME/.gnupg/gpg.conf
  94. echo '# default preferences' >> /home/$MY_USERNAME/.gnupg/gpg.conf
  95. echo 'personal-digest-preferences SHA256' >> /home/$MY_USERNAME/.gnupg/gpg.conf
  96. echo 'cert-digest-algo SHA256' >> /home/$MY_USERNAME/.gnupg/gpg.conf
  97. echo 'default-preference-list SHA512 SHA384 SHA256 SHA224 AES256 AES192 AES CAST5 ZLIB BZIP2 ZIP Uncompressed' >> /home/$MY_USERNAME/.gnupg/gpg.conf
  98. chown -R $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/.gnupg
  99. chmod 700 /home/$MY_USERNAME/.gnupg
  100. chmod 600 /home/$MY_USERNAME/.gnupg/*
  101. # Generate a GPG key
  102. echo 'Key-Type: 1' > /home/$MY_USERNAME/gpg-genkey.conf
  103. echo 'Key-Length: 4096' >> /home/$MY_USERNAME/gpg-genkey.conf
  104. echo 'Subkey-Type: 1' >> /home/$MY_USERNAME/gpg-genkey.conf
  105. echo 'Subkey-Length: 4096' >> /home/$MY_USERNAME/gpg-genkey.conf
  106. echo "Name-Real: $MY_USERNAME" >> /home/$MY_USERNAME/gpg-genkey.conf
  107. echo "Name-Email: $MY_USERNAME@$HOSTNAME" >> /home/$MY_USERNAME/gpg-genkey.conf
  108. echo 'Expire-Date: 0' >> /home/$MY_USERNAME/gpg-genkey.conf
  109. chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/gpg-genkey.conf
  110. su -c "gpg --batch --gen-key /home/$MY_USERNAME/gpg-genkey.conf" - $MY_USERNAME
  111. shred -zu /home/$MY_USERNAME/gpg-genkey.conf
  112. MY_GPG_PUBLIC_KEY_ID=$(su -c "gpg --list-keys $MY_USERNAME@$HOSTNAME | grep 'pub '" - $MY_USERNAME | awk -F ' ' '{print $2}' | awk -F '/' '{print $2}')
  113. MY_GPG_PUBLIC_KEY=/home/$MY_USERNAME/public_key.gpg
  114. su -c "gpg --output $MY_GPG_PUBLIC_KEY --armor --export $MY_GPG_PUBLIC_KEY_ID" - $MY_USERNAME
  115. if [ ! -f $MY_GPG_PUBLIC_KEY ]; then
  116. echo "GPG public key was not generated for $MY_USERNAME@$HOSTNAME $MY_GPG_PUBLIC_KEY_ID"
  117. userdel -r $MY_USERNAME
  118. exit 7
  119. fi
  120. # encrypt outgoing mail to the "sent" folder
  121. if ! grep -q "pgp_encrypt_only_command" /home/$MY_USERNAME/.muttrc; then
  122. echo '' >> /home/$MY_USERNAME/.muttrc
  123. echo '# Encrypt items in the Sent folder' >> /home/$MY_USERNAME/.muttrc
  124. echo "set pgp_encrypt_only_command=\"/usr/lib/mutt/pgpewrap gpg --batch --quiet --no-verbose --output - --encrypt --textmode --armor --always-trust --encrypt-to 0x$MY_GPG_PUBLIC_KEY_ID -- -r %r -- %f\"" >> /home/$MY_USERNAME/.muttrc
  125. else
  126. sed -i "s|set pgp_encrypt_only_command.*|set pgp_encrypt_only_command=\"/usr/lib/mutt/pgpewrap gpg --batch --quiet --no-verbose --output - --encrypt --textmode --armor --always-trust --encrypt-to 0x$MY_GPG_PUBLIC_KEY_ID -- -r %r -- %f\"|g" /home/$MY_USERNAME/.muttrc
  127. fi
  128. if ! grep -q "pgp_encrypt_sign_command" /home/$MY_USERNAME/.muttrc; then
  129. echo "set pgp_encrypt_sign_command=\"/usr/lib/mutt/pgpewrap gpg %?p?--passphrase-fd 0? --batch --quiet --no-verbose --textmode --output - --encrypt --sign %?a?-u %a? --armor --always-trust --encrypt-to 0x$MY_GPG_PUBLIC_KEY_ID -- -r %r -- %f\"" >> /home/$MY_USERNAME/.muttrc
  130. else
  131. sed -i "s|set pgp_encrypt_sign_command.*|set pgp_encrypt_sign_command=\"/usr/lib/mutt/pgpewrap gpg %?p?--passphrase-fd 0? --batch --quiet --no-verbose --textmode --output - --encrypt --sign %?a?-u %a? --armor --always-trust --encrypt-to 0x$MY_GPG_PUBLIC_KEY_ID -- -r %r -- %f\"|g" /home/$MY_USERNAME/.muttrc
  132. fi
  133. if ! grep -q "Change your GPG password" /home/$MY_USERNAME/README; then
  134. echo '' >> /home/$MY_USERNAME/README
  135. echo '' >> /home/$MY_USERNAME/README
  136. echo 'Change your GPG password' >> /home/$MY_USERNAME/README
  137. echo '========================' >> /home/$MY_USERNAME/README
  138. echo "It's very important to add a password to your GPG key so that" >> /home/$MY_USERNAME/README
  139. echo "if anyone does get access to your email they still won't be able" >> /home/$MY_USERNAME/README
  140. echo 'to read them without knowning the GPG password.' >> /home/$MY_USERNAME/README
  141. echo 'You can change the it with:' >> /home/$MY_USERNAME/README
  142. echo '' >> /home/$MY_USERNAME/README
  143. echo " gpg --edit-key $MY_GPG_PUBLIC_KEY_ID" >> /home/$MY_USERNAME/README
  144. echo ' passwd' >> /home/$MY_USERNAME/README
  145. echo ' save' >> /home/$MY_USERNAME/README
  146. echo ' quit' >> /home/$MY_USERNAME/README
  147. fi
  148. if ! grep -q "Publish your GPG public key" /home/$MY_USERNAME/README; then
  149. echo '' >> /home/$MY_USERNAME/README
  150. echo '' >> /home/$MY_USERNAME/README
  151. echo 'Publish your GPG public key' >> /home/$MY_USERNAME/README
  152. echo '===========================' >> /home/$MY_USERNAME/README
  153. echo 'So that others can send emails to you securely you should' >> /home/$MY_USERNAME/README
  154. echo 'publish your GPG public key with the command:' >> /home/$MY_USERNAME/README
  155. echo '' >> /home/$MY_USERNAME/README
  156. echo " gpg --send-keys $MY_GPG_PUBLIC_KEY_ID" >> /home/$MY_USERNAME/README
  157. fi
  158. chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/README
  159. chown $MY_USERNAME:$MY_USERNAME $MY_GPG_PUBLIC_KEY
  160. chmod 600 /home/$MY_USERNAME/README
  161. if grep -q "install_xmpp" $COMPLETION_FILE; then
  162. echo "Adding an XMPP account for $MY_USERNAME"
  163. freedombone-addxmpp -e "$MY_USERNAME@$HOSTNAME" -p "$NEW_USER_PASSWORD"
  164. if [ ! "$?" = "0" ]; then
  165. echo "XMPP account not created"
  166. userdel -r $MY_USERNAME
  167. exit 8
  168. fi
  169. fi
  170. if grep -q "Blog domain" $COMPLETION_FILE; then
  171. FULLBLOG_DOMAIN_NAME=$(cat $COMPLETION_FILE | grep "Blog domain" | awk -F ':' '{print $2}')
  172. if [ ! -d /var/www/$FULLBLOG_DOMAIN_NAME/htdocs/config/users ]; then
  173. echo 'Blog users directory not found'
  174. if grep -q "install_xmpp" $COMPLETION_FILE; then
  175. freedombone-rmxmpp -e "$MY_USERNAME@$HOSTNAME"
  176. fi
  177. userdel -r $MY_USERNAME
  178. exit 9
  179. fi
  180. echo ';Password' > /var/www/$FULLBLOG_DOMAIN_NAME/htdocs/config/users/$MY_USERNAME.ini
  181. echo "password = '$NEW_USER_PASSWORD'" >> /var/www/$FULLBLOG_DOMAIN_NAME/htdocs/config/users/$MY_USERNAME.ini
  182. echo 'encryption = clear' >> /var/www/$FULLBLOG_DOMAIN_NAME/htdocs/config/users/$MY_USERNAME.ini
  183. echo ';Role' >> /var/www/$FULLBLOG_DOMAIN_NAME/htdocs/config/users/$MY_USERNAME.ini
  184. echo 'role = admin' >> /var/www/$FULLBLOG_DOMAIN_NAME/htdocs/config/users/$MY_USERNAME.ini
  185. echo "$MY_USERNAME added as a blog user"
  186. fi
  187. if grep -q "install_sip" $COMPLETION_FILE; then
  188. SIP_EXTENSION=$(freedombone-sipfreeext)
  189. freedombone-addsipuser -u $MY_USERNAME -e $SIP_EXTENSION -p "$NEW_USER_PASSWORD"
  190. if [ ! "$?" = "0" ]; then
  191. echo 'SIP user could not be added. Ensure that extension numbers are in order and do no exceed 299'
  192. if grep -q "install_xmpp" $COMPLETION_FILE; then
  193. freedombone-rmxmpp -e "$MY_USERNAME@$HOSTNAME"
  194. fi
  195. if grep -q "Blog domain" $COMPLETION_FILE; then
  196. if [ -f /var/www/$FULLBLOG_DOMAIN_NAME/htdocs/config/users/$MY_USERNAME.ini ]; then
  197. rm /var/www/$FULLBLOG_DOMAIN_NAME/htdocs/config/users/$MY_USERNAME.ini
  198. fi
  199. fi
  200. userdel -r $MY_USERNAME
  201. exit 10
  202. fi
  203. fi
  204. #if grep -q "install_owncloud" $COMPLETION_FILE; then
  205. # export OC_PASS="$NEW_USER_PASSWORD"
  206. # occ user:add --password-from-env --display-name="$MY_USERNAME" --group="users" $MY_USERNAME
  207. # if [ ! "$?" = "0" ]; then
  208. # echo 'Owncloud user could not be added'
  209. # if grep -q "install_xmpp" $COMPLETION_FILE; then
  210. # freedombone-rmxmpp -e "$MY_USERNAME@$HOSTNAME"
  211. # fi
  212. # if grep -q "Blog domain" $COMPLETION_FILE; then
  213. # if [ -f /var/www/$FULLBLOG_DOMAIN_NAME/htdocs/config/users/$MY_USERNAME.ini ]; then
  214. # rm /var/www/$FULLBLOG_DOMAIN_NAME/htdocs/config/users/$MY_USERNAME.ini
  215. # fi
  216. # fi
  217. # if grep -q "install_sip" $COMPLETION_FILE; then
  218. # freedombone-rmsipuser $MY_USERNAME
  219. # fi
  220. # userdel -r $MY_USERNAME
  221. # export OC_PASS=""
  222. # exit 11
  223. # fi
  224. # export OC_PASS=""
  225. #fi
  226. clear
  227. echo "New user $MY_USERNAME was created"
  228. if [ $SIP_EXTENSION ]; then
  229. echo "Their SIP phone extension is $SIP_EXTENSION"
  230. fi
  231. echo "Their login password is $NEW_USER_PASSWORD"
  232. echo ''
  233. echo 'IMPORTANT: Make a note of the password, because it will not be saved'
  234. echo 'anywhere else. Preferably give it to them in person on paper or via'
  235. echo 'a secure channel, not in an unencrypted email.'
  236. echo ''
  237. echo "They can download their GPG keys with:"
  238. echo ''
  239. echo " scp -P $SSH_PORT -r $MY_USERNAME@$HOSTNAME:/home/$MY_USERNAME/.gnupg ~/"
  240. echo ''
  241. echo 'They should also run freedombone-client on their system to ensure'
  242. echo 'the best security.'
  243. exit 0