LPIC-System Administrator - Cài đặt nhanh xác thực đăng nhập SSH bằng OTP với Google Authenticator trên Centos 8
Thứ Ba, 18 tháng 2, 2020
Như tiêu đề đã nói là Cài đặt nhanh xác thực đăng nhập SSH bằng OTP với Google Authenticator trên Centos 8 thì cũng bắt đầu nhanh luôn để giải quyết vấn đề, khi viết bài này thì cũng khá là khuya nên sẽ đi rẹt rẹt vài phút.
Google Authenticator là cái quái gì thì đọc bài Giải quyết bài toán Microsoft Authenticator OTP trên Windowns sẽ biết nó là cái quái j.
Vào vấn đề chính luôn là vác con server Centos 8 ra cài Google Authenticator tạo xác thực qua OTP với SSH, có nghĩa là khi đăng nhập bằng SSH và server linux không những phải dùng password đăng nhập và còn phải Verification code bảo mật bằng xác thức mã OTP.
Đầu tiên cần cài repo EPEL(Extra Packages for Enterprise Linux) vào nhé, có một chú ý như thế này, trên Centos 7 yum install epel-release chạy khá ok, nhưng Centos 8 thì nó không work nên install thẳng theo link bên dưới.
Nếu không cài thằng bên dưới này thành công thì google-authenticator vẫn cài về thủ tục vẫn ok nhé, nhưng khi đăng nhập sẽ không vào được.
[root@otp8 ~]#yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
Tiếp theo là cài cái chủ chốt nhất là authenticator như bên dưới, khá là nhanh khoản chưa tới 40s đã xong.
[root@otp8 ~]#yum install google-authenticator
Cài xong thì làm gì tiếp theo, đó là config OTP và vác điện thoại ra scan.
[root@otp8 ~]#google-authenticator
Khi bắt đầu chạy google-authenticator trên Centos 8 nó sẽ tự động tạo 1 link QR code thì ta cứ mở lên và scan vào điện thoại, trên điện thoại cài app google authenticator như đã nói ở trên.
Cái thứ 2 nó cung cấp serect key, vậy nó để làm gì, nếu bạn xem kỹ phần trên thì sẽ biết thêm một mẹo hay từ serect key này.
Your emergency scratch codes are: 37711940 43070844 .... Nó sẽ cung cấp cho bạn 5 mã dự phòng, cất những mà này phòng trường hợp điện thoại hư hay gì hoặc bất đắc dĩ không có OTP general trên điện thoại.
Do you want me to update your "/root/.google_authenticator" file (y/n) : y => cứ chọn yes cho nó update.
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
=> hãy chọn yes đi, vì sao nếu bạn chọn NO thì mã OTP của bạn thấy trên điện thoại sau khi bạn đăng nhập thì thằng khác nó dùng lại sẽ đăng nhập được. Không tin bạn có thể dùng mã OTP đăng nhập rồi đăng nhập lại sẽ rõ.
By default, a new token is generated every 30 seconds by the mobile app. 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. This allows for a time skew of up to 30 seconds between authentication server and client. If you experience problems with poor time synchronization, you can increase the window from its default size of 3 permitted codes (one previous code, the current code, the next code) to 17 permitted codes (the 8 previous codes, the current code, and the 8 next codes). This will permit for a time skew of up to 4 minutes between client and server. Do you want to do so? (y/n) N
=> Có nghĩa là nói liên quan về vấn đề đồng bộ, mặc định điện thoại sẽ 30s cung cấp 1 code, nó sẽ cung cấp 3 code access theo phiên thời gian 3*30, nếu bạn muốn tăng thêm thì chọn Yes, nếu thời gian chọn yes lên đế 4 phút cho, do nhu cầu của bạn, mình mở lên xào liền nên chọn No, tùy vào hệ thống và suy nghĩ logic xíu sẽ chọn phù hợp.
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
=> Hãy chọn yes nó sẽ an toàn hơn, 30s sẽ không quá 3 lần đang nhập, tránh tình trạng bị brute-force.
Tiếp theo là mục đích muốn dùng nó cho cái gì, như bài này là dùng cho SSH thì ta cần sửa 2 file sau :
[root@otp8 ~]# vi /etc/ssh/sshd_config
Tìm dòng ChallengeResponseAuthentication no sửa lại thành ChallengeResponseAuthentication yes
Tiếp theo đi đến file sau
[root@otp8 ~]# vi /etc/pam.d/sshd
và thêm dòng sau vào bên dưới : auth required pam_google_authenticator.so nullok
Xong khởi động lại SSH là xong
[root@otp8 ~]# systemctl restart sshd
Trên điện thoại :
Cuối cùng là xúc thôi
Note :
auth required pam_google_authenticator.so nullok có nullok là gì, tôi bỏ nó được không. OK bạn có thể bỏ nullok. Sau khi bạn bỏ nullok thì khi tạo một user mới cung cấp password cho họ, họ sẽ không đăng nhập được, bạn pải switch user sang user mới và chạy google-authencatior nó sẽ tạo key và profile cho user mới và bạn cung cấp thông tin cho người mới.
Cái này mang tinh bắc buộc của một doanh nghiệp hoặc cá nhân, nếu bạn thêm nullok thì quăng password qua là vào thôi, còn muốn OTP hay không là quyền của họ :)