Πέμπτη, 9 Φεβρουαρίου 2017

διαδικασια εισοδου ssh με πιστοποιηση google και απενεργοποιηση εισoδου του root


Στον οδηγό αυτόν θα δούμε πως ενεργοποιούμε έναν εναλλακτικό τρόπο εισόδου στον ssh server μας μέσω του google authenticator μιας υπηρεσίας της google που μας προσφέρει τυχαίους κωδικούς ασφαλείας για χρήση εντός των υπηρεσιών της καθώς επίσης και για προσωπικές μας υπηρεσίες και φυσικά τον τρόπο αποτροπής εισόδου ως root στον ssh server μας και την δημιουργία  χρήστη για την επίτευξη της εισόδου μας.

Αρχικά δημιουργούμε νέο χρήστη στον server σε debian ή debian based διανομή:

# adduser mitsos

Ακολούθως εγκαθιστούμε το ακόλουθο module του ssh

# apt install libpam-google-authenticator -y
μετά δίνουμε την ακόλουθη εντολή ως χρήστης mitsos

$ google-authenticator

απαντάμε στις εξής ερωτήσεις:

 Do you want authentication tokens to be time-based (y/n) y


Do you want me to update your "~/.google_authenticator" file (y/n) y
 
Do you want to disallow multiple uses of the same authentication
token? This restricts you to one login about every 30s, but it increases
your chances to notice or even prevent man-in-the-middle attacks (y/n) y
 
By default, tokens are good for 30 seconds and in order to compensate for
possible time-skew between the client and the server, we allow an extra
token before and after the current time. If you experience problems with poor
time synchronization, you can increase the window from its default
size of 1:30min to about 4min. Do you want to do so (y/n) n
 
If the computer that you are logging into isn't hardened against brute-force
login attempts, you can enable rate-limiting for the authentication module.
By default, this limits attackers to no more than 3 login attempts every 30s.
Do you want to enable rate-limiting (y/n) y

μετα απο αυτό εγκαθιστούμε στο κινητό μας android την εξής εφαρμογή:

https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2

αφού εγκατασταθεί στο κινητό μας τότε την ανοίγουμε ακολουθούμε τις οδηγίες της και ακολούθως βρισκόμαστε στην αρχική οθόνη(εδω βλέπετε την δικιά μου)
 πατάμε το κουμπί +

Εδώ αν πατήσουμε Σάρωση γραμμ. κώδικα τότε θα ανοιξει την καμερα του κινητού μας για να σκανάρουμε τον qr code της οθόνης ή εναλλακτικά αν επιλέξουμε να εισάγουμε ένα παρεχόμενο κλειδί τότε δίνουμε το κλειδί που μας δίνει ακριβώς από κάτω από το qr code και μετά από αυτή την διαδικασία μας κάθε φορά που θα ανοίγουμε την εφαρμογή θα μας δίνει ένα εξαψήφιο  κωδικό τυχαίο ο οποίος θα ανανεώνεται συχνά.


Ακολούθως ανοίγουμε το εξής αρχείο για αλλαγές:

# nano vi /etc/pam.d/sshd

και το αρχείο θα πρέπει να μοιάζει κάπως έτσι:

auth required pam_google_authenticator.so
account required pam_nologin.so
@include common-account
session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so close
session required pam_loginuid.so
session optional pam_keyinit.so force revoke
@include common-session
session optional pam_motd.so motd=/run/motd.dynamic
session optional pam_motd.so noupdate
session optional pam_mail.so standard noenv # [1]
session required pam_limits.so
session required pam_env.so # [1]
session required pam_env.so user_readenv=1 envfile=/etc/default/locale
session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so open
@include common-password
Ακολούθως ανοίγουμε το αρχείο για αλλαγές:

# nano /etc/ssh/sshd.conf

και θα πρέπει να μοιάζει ως εξής:


# Port 22
Protocol 2
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
UsePrivilegeSeparation yes
KeyRegenerationInterval 3600
ServerKeyBits 1024
SyslogFacility AUTH
LogLevel INFO
LoginGraceTime 30
PermitRootLogin no
StrictModes yes
RSAAuthentication yes
PubkeyAuthentication yes
IgnoreRhosts yes
RhostsRSAAuthentication no
HostbasedAuthentication no
IgnoreUserKnownHosts yes
PermitEmptyPasswords no
ChallengeResponseAuthentication yes
PasswordAuthentication no
X11Forwarding no
X11DisplayOffset 10
PrintMotd no
PrintLastLog no
TCPKeepAlive yes
# Banner /etc/ssh/issue
# find an Banner-example here
AcceptEnv LANG LC_*
Subsystem sftp /usr/lib/openssh/sftp-server
UsePAM yes
AuthenticationMethods publickey,keyboard-interactive
PermitRootLogin no #(απενεργοποίηση ειδόδου του root)
PermitEmptyPasswords no
AllowUsers mitsos
αφού κάναμε τις αλλαγες επανεκκινούμε την υπηρεσία ssh:

# service ssh restart

δοκιμάζουμε να συνδεθούμε π.χ mitsos@192.168.1.52:

αντί για κωδικό μας ζητάει verification code, τότε εμείς δίνουμε τον εξαψηφιο κωδικό που μας δίνει ο google authenticator στο κινητό μας, εφόσον πήγαν όλα καλά θα σας επιτραπεί η είσοδος στον server σας.