freedombone-adduser 8.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. #!/bin/bash
  2. MY_USERNAME=$1
  3. SSH_PUBLIC_KEY="$2"
  4. GPG_KEYSERVER='hkp://keys.gnupg.net'
  5. SSH_PORT=2222
  6. COMPLETION_FILE=$HOME/freedombone-completed.txt
  7. if [ ! $MY_USERNAME ]; then
  8. echo 'No username was given'
  9. exit 1
  10. fi
  11. if [ -d /home/$MY_USERNAME ]; then
  12. echo "The user $MY_USERNAME already exists"
  13. exit 2
  14. fi
  15. if [ ! -f $COMPLETION_FILE ]; then
  16. echo "$COMPLETION_FILE not found"
  17. userdel -r $MY_USERNAME
  18. exit 3
  19. fi
  20. NEW_USER_PASSWORD="$(openssl rand -base64 10 | cut -c1-8)"
  21. useradd -m -p "$NEW_USER_PASSWORD" -s /bin/bash $MY_USERNAME
  22. adduser $MY_USERNAME sasl
  23. if [ ! -d /home/$MY_USERNAME ]; then
  24. echo 'Home directory was not created'
  25. exit 4
  26. fi
  27. if [ "$SSH_PUBLIC_KEY" ]; then
  28. if [ ${#SSH_PUBLIC_KEY} -gt 5 ]; then
  29. if [ -f $SSH_PUBLIC_KEY ]; then
  30. mkdir /home/$MY_USERNAME/.ssh
  31. cp $SSH_PUBLIC_KEY /home/$MY_USERNAME/.ssh/authorized_keys
  32. echo 'ssh public key installed'
  33. else
  34. if [[ $SSH_PUBLIC_KEY == "ssh-"* ]]; then
  35. mkdir /home/$MY_USERNAME/.ssh
  36. echo $SSH_PUBLIC_KEY > /home/$MY_USERNAME/.ssh/authorized_keys
  37. echo 'ssh public key installed'
  38. else
  39. echo 'The second parameter does not look like an ssh key'
  40. exit 5
  41. fi
  42. fi
  43. fi
  44. fi
  45. if [ ! -d /home/$MY_USERNAME/Maildir ]; then
  46. echo 'Email directory was not created'
  47. userdel -r $MY_USERNAME
  48. exit 6
  49. fi
  50. if grep -q "set from=" /home/$MY_USERNAME/.muttrc; then
  51. sed -i "s|set from=.*|set from='$MY_USERNAME <$MY_USERNAME@$HOSTNAME>'|g" /home/$MY_USERNAME/.muttrc
  52. else
  53. echo "set from='$MY_USERNAME <$MY_USERNAME@$HOSTNAME>'" >> /home/$MY_USERNAME/.muttrc
  54. fi
  55. USERN='$USER@'
  56. sed -i "s|$USERN|$MY_USERNAME@|g" /home/$MY_USERNAME/.procmailrc
  57. # generate a gpg key
  58. echo "Making a GPG key for $MY_USERNAME@$HOSTNAME"
  59. mkdir /home/$MY_USERNAME/.gnupg
  60. echo "keyserver $GPG_KEYSERVER" >> /home/$MY_USERNAME/.gnupg/gpg.conf
  61. echo 'keyserver-options auto-key-retrieve' >> /home/$MY_USERNAME/.gnupg/gpg.conf
  62. echo '' >> /home/$MY_USERNAME/.gnupg/gpg.conf
  63. echo '# default preferences' >> /home/$MY_USERNAME/.gnupg/gpg.conf
  64. echo 'personal-digest-preferences SHA256' >> /home/$MY_USERNAME/.gnupg/gpg.conf
  65. echo 'cert-digest-algo SHA256' >> /home/$MY_USERNAME/.gnupg/gpg.conf
  66. echo 'default-preference-list SHA512 SHA384 SHA256 SHA224 AES256 AES192 AES CAST5 ZLIB BZIP2 ZIP Uncompressed' >> /home/$MY_USERNAME/.gnupg/gpg.conf
  67. chown -R $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/.gnupg
  68. chmod 700 /home/$MY_USERNAME/.gnupg
  69. chmod 600 /home/$MY_USERNAME/.gnupg/*
  70. # Generate a GPG key
  71. echo 'Key-Type: 1' > /home/$MY_USERNAME/gpg-genkey.conf
  72. echo 'Key-Length: 4096' >> /home/$MY_USERNAME/gpg-genkey.conf
  73. echo 'Subkey-Type: 1' >> /home/$MY_USERNAME/gpg-genkey.conf
  74. echo 'Subkey-Length: 4096' >> /home/$MY_USERNAME/gpg-genkey.conf
  75. echo "Name-Real: $MY_USERNAME" >> /home/$MY_USERNAME/gpg-genkey.conf
  76. echo "Name-Email: $MY_USERNAME@$HOSTNAME" >> /home/$MY_USERNAME/gpg-genkey.conf
  77. echo 'Expire-Date: 0' >> /home/$MY_USERNAME/gpg-genkey.conf
  78. chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/gpg-genkey.conf
  79. su -c "gpg --batch --gen-key /home/$MY_USERNAME/gpg-genkey.conf" - $MY_USERNAME
  80. shred -zu /home/$MY_USERNAME/gpg-genkey.conf
  81. 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}')
  82. MY_GPG_PUBLIC_KEY=/home/$MY_USERNAME/public_key.gpg
  83. su -c "gpg --output $MY_GPG_PUBLIC_KEY --armor --export $MY_GPG_PUBLIC_KEY_ID" - $MY_USERNAME
  84. if [ ! -f $MY_GPG_PUBLIC_KEY ]; then
  85. echo "GPG public key was not generated for $MY_USERNAME@$HOSTNAME $MY_GPG_PUBLIC_KEY_ID"
  86. userdel -r $MY_USERNAME
  87. exit 7
  88. fi
  89. # encrypt outgoing mail to the "sent" folder
  90. if ! grep -q "pgp_encrypt_only_command" /home/$MY_USERNAME/.muttrc; then
  91. echo '' >> /home/$MY_USERNAME/.muttrc
  92. echo '# Encrypt items in the Sent folder' >> /home/$MY_USERNAME/.muttrc
  93. 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
  94. else
  95. 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
  96. fi
  97. if ! grep -q "pgp_encrypt_sign_command" /home/$MY_USERNAME/.muttrc; then
  98. 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
  99. else
  100. 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
  101. fi
  102. if ! grep -q "Change your GPG password" /home/$MY_USERNAME/README; then
  103. echo '' >> /home/$MY_USERNAME/README
  104. echo '' >> /home/$MY_USERNAME/README
  105. echo 'Change your GPG password' >> /home/$MY_USERNAME/README
  106. echo '========================' >> /home/$MY_USERNAME/README
  107. echo "It's very important to add a password to your GPG key so that" >> /home/$MY_USERNAME/README
  108. echo "if anyone does get access to your email they still won't be able" >> /home/$MY_USERNAME/README
  109. echo 'to read them without knowning the GPG password.' >> /home/$MY_USERNAME/README
  110. echo 'You can change the it with:' >> /home/$MY_USERNAME/README
  111. echo '' >> /home/$MY_USERNAME/README
  112. echo " gpg --edit-key $MY_GPG_PUBLIC_KEY_ID" >> /home/$MY_USERNAME/README
  113. echo ' passwd' >> /home/$MY_USERNAME/README
  114. echo ' save' >> /home/$MY_USERNAME/README
  115. echo ' quit' >> /home/$MY_USERNAME/README
  116. fi
  117. if ! grep -q "Publish your GPG public key" /home/$MY_USERNAME/README; then
  118. echo '' >> /home/$MY_USERNAME/README
  119. echo '' >> /home/$MY_USERNAME/README
  120. echo 'Publish your GPG public key' >> /home/$MY_USERNAME/README
  121. echo '===========================' >> /home/$MY_USERNAME/README
  122. echo 'So that others can send emails to you securely you should' >> /home/$MY_USERNAME/README
  123. echo 'publish your GPG public key with the command:' >> /home/$MY_USERNAME/README
  124. echo '' >> /home/$MY_USERNAME/README
  125. echo " gpg --send-keys $MY_GPG_PUBLIC_KEY_ID" >> /home/$MY_USERNAME/README
  126. fi
  127. chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/README
  128. chown $MY_USERNAME:$MY_USERNAME $MY_GPG_PUBLIC_KEY
  129. chmod 600 /home/$MY_USERNAME/README
  130. echo "Adding an XMPP account for $MY_USERNAME"
  131. freedombone-addxmpp -e "$MY_USERNAME@$HOSTNAME" -p "$NEW_USER_PASSWORD"
  132. if [ ! "$?" = "0" ]; then
  133. echo "XMPP account not created"
  134. userdel -r $MY_USERNAME
  135. exit 8
  136. fi
  137. if grep -q "Blog domain" $COMPLETION_FILE; then
  138. FULLBLOG_DOMAIN_NAME=$(cat $COMPLETION_FILE | grep "Blog domain" | awk -F ':' '{print $2}')
  139. if [ ! -d /var/www/$FULLBLOG_DOMAIN_NAME/htdocs/config/users ]; then
  140. echo 'Blog users directory not found'
  141. userdel -r $MY_USERNAME
  142. exit 9
  143. fi
  144. echo ';Password' > /var/www/$FULLBLOG_DOMAIN_NAME/htdocs/config/users/$MY_USERNAME.ini
  145. echo "password = '$NEW_USER_PASSWORD'" >> /var/www/$FULLBLOG_DOMAIN_NAME/htdocs/config/users/$MY_USERNAME.ini
  146. echo 'encryption = clear' >> /var/www/$FULLBLOG_DOMAIN_NAME/htdocs/config/users/$MY_USERNAME.ini
  147. echo ';Role' >> /var/www/$FULLBLOG_DOMAIN_NAME/htdocs/config/users/$MY_USERNAME.ini
  148. echo 'role = admin' >> /var/www/$FULLBLOG_DOMAIN_NAME/htdocs/config/users/$MY_USERNAME.ini
  149. echo "$MY_USERNAME added as a blog user"
  150. fi
  151. clear
  152. echo "New user $MY_USERNAME was created"
  153. echo "Their login password is $NEW_USER_PASSWORD"
  154. echo ''
  155. echo 'IMPORTANT: Make a note of the password, because it will not be saved'
  156. echo 'anywhere else. Preferably give it to them in person on paper or via'
  157. echo 'a secure channel, not in an unencrypted email.'
  158. echo ''
  159. echo "They can download their GPG keys with:"
  160. echo ''
  161. echo " scp -P $SSH_PORT -r $MY_USERNAME@$HOSTNAME:/home/$MY_USERNAME/.gnupg ~/"
  162. echo ''
  163. echo 'They should also run freedombone-client on their system to ensure'
  164. echo 'the best security.'
  165. exit 0