Przeglądaj źródła

Command to add a new user

Bob Mottram 9 lat temu
rodzic
commit
90a677d514
5 zmienionych plików z 132 dodań i 3 usunięć
  1. 4
    0
      Makefile
  2. BIN
      man/freedombone-adduser.1.gz
  3. 1
    1
      src/freedombone
  4. 109
    0
      src/freedombone-adduser
  5. 18
    2
      src/freedombone-addxmpp

+ 4
- 0
Makefile Wyświetl plik

@@ -21,6 +21,7 @@ install:
21 21
 	install -m 755 src/${APP}-config ${DESTDIR}${PREFIX}/bin
22 22
 	install -m 755 src/${APP}-sec ${DESTDIR}${PREFIX}/bin
23 23
 	install -m 755 src/${APP}-addcert ${DESTDIR}${PREFIX}/bin
24
+	install -m 755 src/${APP}-adduser ${DESTDIR}${PREFIX}/bin
24 25
 	install -m 755 src/${APP}-clientcert ${DESTDIR}${PREFIX}/bin
25 26
 	install -m 755 src/${APP}-addlist ${DESTDIR}${PREFIX}/bin
26 27
 	install -m 755 src/${APP}-addemail ${DESTDIR}${PREFIX}/bin
@@ -47,6 +48,7 @@ install:
47 48
 	install -m 644 man/${APP}-config.1.gz ${DESTDIR}${PREFIX}/share/man/man1
48 49
 	install -m 644 man/${APP}-sec.1.gz ${DESTDIR}${PREFIX}/share/man/man1
49 50
 	install -m 644 man/${APP}-addcert.1.gz ${DESTDIR}${PREFIX}/share/man/man1
51
+	install -m 644 man/${APP}-adduser.1.gz ${DESTDIR}${PREFIX}/share/man/man1
50 52
 	install -m 644 man/${APP}-clientcert.1.gz ${DESTDIR}${PREFIX}/share/man/man1
51 53
 	install -m 644 man/${APP}-addlist.1.gz ${DESTDIR}${PREFIX}/share/man/man1
52 54
 	install -m 644 man/${APP}-addemail.1.gz ${DESTDIR}${PREFIX}/share/man/man1
@@ -71,6 +73,7 @@ uninstall:
71 73
 	rm -f ${PREFIX}/share/man/man1/${APP}-sec.1.gz
72 74
 	rm -f ${PREFIX}/share/man/man1/${APP}-clientcert.1.gz
73 75
 	rm -f ${PREFIX}/share/man/man1/${APP}-addcert.1.gz
76
+	rm -f ${PREFIX}/share/man/man1/${APP}-adduser.1.gz
74 77
 	rm -f ${PREFIX}/share/man/man1/${APP}-addlist.1.gz
75 78
 	rm -f ${PREFIX}/share/man/man1/${APP}-addemail.1.gz
76 79
 	rm -f ${PREFIX}/share/man/man1/${APP}-renew-cert.1.gz
@@ -94,6 +97,7 @@ uninstall:
94 97
 	rm -f ${PREFIX}/bin/${APP}-config
95 98
 	rm -f ${PREFIX}/bin/${APP}-sec
96 99
 	rm -f ${PREFIX}/bin/${APP}-addcert
100
+	rm -f ${PREFIX}/bin/${APP}-adduser
97 101
 	rm -f ${PREFIX}/bin/${APP}-clientcert
98 102
 	rm -f ${PREFIX}/bin/${APP}-addlist
99 103
 	rm -f ${PREFIX}/bin/${APP}-addemail

BIN
man/freedombone-adduser.1.gz Wyświetl plik


+ 1
- 1
src/freedombone Wyświetl plik

@@ -6879,7 +6879,7 @@ function configure_gpg {
6879 6879
 
6880 6880
   if [ ! -d /home/$MY_USERNAME/.gnupg ]; then
6881 6881
       mkdir /home/$MY_USERNAME/.gnupg
6882
-      echo 'keyserver hkp://keys.gnupg.net' >> /home/$MY_USERNAME/.gnupg/gpg.conf
6882
+      echo "keyserver $GPG_KEYSERVER" >> /home/$MY_USERNAME/.gnupg/gpg.conf
6883 6883
       echo 'keyserver-options auto-key-retrieve' >> /home/$MY_USERNAME/.gnupg/gpg.conf
6884 6884
   fi
6885 6885
 

+ 109
- 0
src/freedombone-adduser Wyświetl plik

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

+ 18
- 2
src/freedombone-addxmpp Wyświetl plik

@@ -30,10 +30,11 @@
30 30
 # along with this program. If not, see <http://www.gnu.org/licenses/>.
31 31
 
32 32
 EMAIL_ADDRESS=
33
+NEW_USER_PASSWORD=
33 34
 
34 35
 function show_help {
35 36
     echo ''
36
-    echo 'freedombone-addxmpp -e [email address]'
37
+    echo 'freedombone-addxmpp -e [email address] -p [password]'
37 38
     echo ''
38 39
     exit 0
39 40
 }
@@ -50,6 +51,10 @@ case $key in
50 51
     shift
51 52
     EMAIL_ADDRESS="$1"
52 53
     ;;
54
+    -p|--password|--passphrase)
55
+    shift
56
+    NEW_USER_PASSWORD="$1"
57
+    ;;
53 58
     *)
54 59
     # unknown option
55 60
     ;;
@@ -57,10 +62,21 @@ esac
57 62
 shift
58 63
 done
59 64
 
65
+if [ ! -d /etc/prosody ]; then
66
+    echo 'xmpp server is not installed'
67
+    exit 1
68
+fi
69
+
60 70
 if [ ! $EMAIL_ADDRESS ]; then
61 71
     show_help
62 72
 fi
63 73
 
64
-prosodyctl adduser $EMAIL_ADDRESS
74
+if [ ! $NEW_USER_PASSWORD ]; then
75
+    prosodyctl adduser $EMAIL_ADDRESS
76
+else
77
+    USERNAME=$(echo $EMAIL_ADDRESS | awk -F '@' '{print $1}')
78
+    DOMAIN_NAME=$(echo $EMAIL_ADDRESS | awk -F '@' '{print $2}')
79
+    prosodyctl register $USERNAME $DOMAIN_NAME "$NEW_USER_PASSWORD" 
80
+fi
65 81
 
66 82
 exit 0