freedombone-adduser 4.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. #!/bin/bash
  2. MY_USERNAME=$1
  3. GPG_KEYSERVER='hkp://keys.gnupg.net'
  4. SSH_PORT=2222
  5. if [ ! $MY_USERNAME ]; then
  6. echo 'No username was given'
  7. exit 1
  8. fi
  9. if [ -d /home/$MY_USERNAME ]; then
  10. echo "The user $MY_USERNAME already exists"
  11. exit 2
  12. fi
  13. NEW_USER_PASSWORD="$(openssl rand -base64 10 | cut -c1-8)"
  14. useradd -m -p "$NEW_USER_PASSWORD" -s /bin/bash $MY_USERNAME
  15. adduser $MY_USERNAME sasl
  16. if [ ! -d /home/$MY_USERNAME ]; then
  17. echo 'Home directory was not created'
  18. exit 3
  19. fi
  20. if [ ! -d /home/$MY_USERNAME/Maildir ]; then
  21. echo 'Email directory was not created'
  22. userdel -r $MY_USERNAME
  23. exit 4
  24. fi
  25. # generate a gpg key
  26. echo "Making a GPG key for $MY_USERNAME@$HOSTNAME"
  27. mkdir /home/$MY_USERNAME/.gnupg
  28. echo "keyserver $GPG_KEYSERVER" >> /home/$MY_USERNAME/.gnupg/gpg.conf
  29. echo 'keyserver-options auto-key-retrieve' >> /home/$MY_USERNAME/.gnupg/gpg.conf
  30. echo '' >> /home/$MY_USERNAME/.gnupg/gpg.conf
  31. echo '# default preferences' >> /home/$MY_USERNAME/.gnupg/gpg.conf
  32. echo 'personal-digest-preferences SHA256' >> /home/$MY_USERNAME/.gnupg/gpg.conf
  33. echo 'cert-digest-algo SHA256' >> /home/$MY_USERNAME/.gnupg/gpg.conf
  34. echo 'default-preference-list SHA512 SHA384 SHA256 SHA224 AES256 AES192 AES CAST5 ZLIB BZIP2 ZIP Uncompressed' >> /home/$MY_USERNAME/.gnupg/gpg.conf
  35. chown -R $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/.gnupg
  36. chmod 700 /home/$MY_USERNAME/.gnupg
  37. chmod 600 /home/$MY_USERNAME/.gnupg/*
  38. # Generate a GPG key
  39. echo 'Key-Type: 1' > /home/$MY_USERNAME/gpg-genkey.conf
  40. echo 'Key-Length: 4096' >> /home/$MY_USERNAME/gpg-genkey.conf
  41. echo 'Subkey-Type: 1' >> /home/$MY_USERNAME/gpg-genkey.conf
  42. echo 'Subkey-Length: 4096' >> /home/$MY_USERNAME/gpg-genkey.conf
  43. echo "Name-Real: $MY_USERNAME" >> /home/$MY_USERNAME/gpg-genkey.conf
  44. echo "Name-Email: $MY_USERNAME@$HOSTNAME" >> /home/$MY_USERNAME/gpg-genkey.conf
  45. echo 'Expire-Date: 0' >> /home/$MY_USERNAME/gpg-genkey.conf
  46. chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/gpg-genkey.conf
  47. su -c "gpg --batch --gen-key /home/$MY_USERNAME/gpg-genkey.conf" - $MY_USERNAME
  48. shred -zu /home/$MY_USERNAME/gpg-genkey.conf
  49. 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}')
  50. MY_GPG_PUBLIC_KEY=/tmp/public_key.gpg
  51. su -c "gpg --output $MY_GPG_PUBLIC_KEY --armor --export $MY_GPG_PUBLIC_KEY_ID" - $MY_USERNAME
  52. if ! grep -q "Change your GPG password" /home/$MY_USERNAME/README; then
  53. echo '' >> /home/$MY_USERNAME/README
  54. echo '' >> /home/$MY_USERNAME/README
  55. echo 'Change your GPG password' >> /home/$MY_USERNAME/README
  56. echo '========================' >> /home/$MY_USERNAME/README
  57. echo "It's very important to add a password to your GPG key so that" >> /home/$MY_USERNAME/README
  58. echo "if anyone does get access to your email they still won't be able" >> /home/$MY_USERNAME/README
  59. echo 'to read them without knowning the GPG password.' >> /home/$MY_USERNAME/README
  60. echo 'You can change the it with:' >> /home/$MY_USERNAME/README
  61. echo '' >> /home/$MY_USERNAME/README
  62. echo " gpg --edit-key $MY_GPG_PUBLIC_KEY_ID" >> /home/$MY_USERNAME/README
  63. echo ' passwd' >> /home/$MY_USERNAME/README
  64. echo ' save' >> /home/$MY_USERNAME/README
  65. echo ' quit' >> /home/$MY_USERNAME/README
  66. fi
  67. if ! grep -q "Publish your GPG public key" /home/$MY_USERNAME/README; then
  68. echo '' >> /home/$MY_USERNAME/README
  69. echo '' >> /home/$MY_USERNAME/README
  70. echo 'Publish your GPG public key' >> /home/$MY_USERNAME/README
  71. echo '===========================' >> /home/$MY_USERNAME/README
  72. echo 'So that others can send emails to you securely you should' >> /home/$MY_USERNAME/README
  73. echo 'publish your GPG public key with the command:' >> /home/$MY_USERNAME/README
  74. echo '' >> /home/$MY_USERNAME/README
  75. echo " gpg --send-keys $MY_GPG_PUBLIC_KEY_ID" >> /home/$MY_USERNAME/README
  76. fi
  77. chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/README
  78. chmod 600 /home/$MY_USERNAME/README
  79. echo "Adding an XMPP account for $MY_USERNAME"
  80. freedombone-addxmpp -e "$MY_USERNAME@$HOSTNAME" "$NEW_USER_PASSWORD"
  81. clear
  82. echo "New user $MY_USERNAME was created"
  83. echo "Their login password is $NEW_USER_PASSWORD"
  84. echo ''
  85. echo 'IMPORTANT: Make a note of the password, because it will not be saved'
  86. echo 'anywhere else. Preferably give it to them in person on paper or via'
  87. echo 'a secure channel, not in an unencrypted email.'
  88. echo ''
  89. echo "They can download their GPG keys with:"
  90. echo ''
  91. echo " scp -P $SSH_PORT -r $MY_USERNAME@$HOSTNAME:/home/$MY_USERNAME/.gnupg ~/"
  92. echo ''
  93. echo 'They should also run freedombone-client on their system to ensure'
  94. echo 'the best security.'
  95. exit 0