Cách cài đặt và sử dụng OTPW cho mật khẩu SSH dùng một lần trên Ubuntu 14.04
SSH ra mắt với khá nhiều tính năng bảo mật đảm bảo rằng các kết nối của bạn được an toàn và bạn có thể xác thực với server từ xa mà không cần lo lắng. Đặc biệt, SSH key tạo ra một cách an toàn để kết nối mà không cần truyền password hoặc passphrase (password bảo vệ) của bạn qua internet.Tuy nhiên, có những trường hợp sử dụng SSH key không hợp lý hoặc có thể thực sự không an toàn. Giả sử bạn đang cố gắng sử dụng SSH từ máy tính công cộng hoặc máy tính mà bạn đang cố gắng khắc phục sự cố cho một người bạn. Hệ thống public key thừa nhận rằng máy tính mà bạn đang kết nối từ ít nhất là hơi tin cậy . Đây không phải là luôn luôn như vậy.
Nếu bạn đang sử dụng một cặp khóa trong trường hợp này, ngay cả khi khóa của bạn được bảo vệ bằng password , khóa sẽ được giải mã và đưa vào bộ nhớ của máy local để làm việc, ít nhất là để xác thực. Điều này nghĩa là nó rất dễ bị tấn công nếu bạn không tin tưởng vào máy local .
Một hệ thống được gọi là xác thực password một lần hoặc OTPW đã được tạo ra để hoạt động trong những trường hợp này. Mật khẩu một lần là một hệ thống đã được tích hợp vào các cơ chế ủy quyền khác như xác thực hai yếu tố và các giải pháp đăng nhập một lần.
Trong hướng dẫn này, ta sẽ cài đặt OTPW trên version VPS Ubuntu 14.04. Điều này sẽ cho phép ta đăng nhập bằng password hai thành phần chỉ được sử dụng một lần.
Khái niệm cơ bản
Cách thức hoạt động của OTPW là kết nối với hệ thống xác thực PAM.
Sau khi bạn đã cấu hình hệ thống của bạn để cho phép đăng nhập bằng OTPW, bạn có thể tạo một bộ " group " password bằng cách cung cấp password tiền tố. Sau đó, bạn có thể in chúng ra, giữ chúng trên thiết bị bạn sẽ có quyền truy cập và bạn tin tưởng (như được mã hóa trên điện thoại của bạn) hoặc ở một số định dạng khác mà bạn có thể truy cập mà không cần sử dụng máy tính mà bạn không tin tưởng.
Bây giờ, khi bạn được yêu cầu nhập password , bạn sẽ được cung cấp một số tham chiếu. Bạn sẽ nhập password tiền tố bạn đã tạo, tiếp theo là phần password được liên kết với số tham chiếu đã cho.
Mật khẩu này sẽ chỉ hoạt động một lần. Nếu ai đó đang đăng nhập chính vào máy tính của bạn hoặc có thể nhìn thấy bạn nhập password , điều đó sẽ không thành vấn đề vì nó sẽ không có giá trị sau khi bạn đã đăng nhập.
Cài đặt các thành phần
Để cấu hình hệ thống này, trước tiên ta cần cài đặt các thành phần cần thiết.
Vì quá trình xác thực được xử lý hoàn toàn ở phía server và phía client không khác gì dấu nhắc password thông thường, ta sẽ chỉ cài đặt một vài gói trên server của bạn .
Ta sẽ cập nhật bộ nhớ cache gói của ta và cài đặt chúng từ repository :
sudo apt-get update sudo apt-get install otpw-bin libpam-otpw
Như bạn thấy , cơ chế này được chia thành hai phần. Thành phần đầu tiên được sử dụng để tạo và quản lý password một lần. Thứ hai là plugin được sử dụng với PAM để xác thực các file password này.
Chỉnh sửa PAM để tận dụng OTPW
Trước khi làm bất cứ điều gì với password thực của bạn , ta cần thêm OTPW làm tùy chọn cho PAM.
Ta muốn thực hiện điều này theo cách hạn chế đăng nhập bằng password thông thường, vì ta giả định bạn đã cài đặt SSH key để xác thực trên máy tính mà bạn tin cậy. Cấu hình của ta sẽ sử dụng các SSH key nếu chúng có sẵn, nếu không, nó sẽ hoạt động trở lại theo cơ chế OTPW.
Để làm điều này, ta sẽ chỉ thay đổi file liên quan đến đăng nhập SSH. Điều này sẽ không ảnh hưởng đến thông tin đăng nhập local của ta hoặc với thông tin đăng nhập của ta thông qua console web DigitalOcean.
Mở file cấu hình SSH PAM:
sudo nano /etc/pam.d/sshd
Ở phía trên cùng của file , có một chỉ thị dùng để nhập file common-auth
. Tệp này cho phép xác thực password thông thường mà không cần sử dụng hệ thống OTPW mà ta không muốn cho các phiên SSH của bạn . Hãy comment rằng:
#@include common-auth
Dưới đây, hãy thêm một số dòng cho phép ta sử dụng hệ thống OTPW để xử lý các yêu cầu password :
auth required pam_otpw.so session optional pam_otpw.so
Khi bạn hoàn tất, hãy lưu file .
Cấu hình SSHD
Bây giờ ta đã cấu hình module PAM của SSH daemon để sử dụng OTPW, ta có thể cấu hình chính daemon với các giá trị thích hợp.
Mở file với quyền root để kiểm tra file :
sudo nano /etc/ssh/sshd_config
Ta đang tìm kiếm một vài giá trị riêng biệt. Ta cần kiểm tra xem mỗi tham số này có được đặt thành giá trị bên dưới hay không. Nếu bạn không thể tìm thấy bất kỳ thông số nào, hãy thêm và đặt chúng. Tuy nhiên, hãy đảm bảo không thêm các tham số nhiều lần vì chúng có thể khiến daemon bị lỗi.
UsePrivilegeSeparation yes PubkeyAuthentication yes ChallengeResponseAuthentication yes PasswordAuthentication no UsePAM yes
Khi bạn đã đặt các thông số này, hãy khởi động lại daemon SSH của ta để các thay đổi của ta có thể thực hiện:
sudo service ssh restart
Tạo file password OTPW
Bây giờ hệ thống của ta đã được cấu hình để sử dụng OTPW cho user SSH không có public key , ta có thể tạo hai file password cần thiết để hệ thống này hoạt động.
Một file , sẽ được lưu trữ trong ~/.otpw
, sẽ chứa giá trị băm của các phân đoạn password , một trên mỗi dòng. Tệp thứ hai mà ta sẽ tạo, là các phân đoạn password dùng một lần mà con người có thể đọc được, ta nên sao chép vào một thiết bị an toàn, in chúng ra hoặc đặt chúng vào một vị trí an toàn, di động.
Tất cả những gì ta cần làm để tạo danh sách này là gọi lệnh otpw-gen
. Điều này thường sẽ xuất ra văn bản mà con người có thể đọc được thành tiêu chuẩn, nhưng ta có thể chuyển nó thành một file để lưu giữ an toàn:
cd ~ otpw-gen > nothingtosee.txt
Điều này sẽ tạo ra một hạt giống ngẫu nhiên và yêu cầu một tiền tố password . Bạn nên sử dụng cùng các luật thông thường mà bạn sẽ sử dụng cho bất kỳ password thông thường nào. Đảm bảo bạn sẽ nhớ password .
Sau đó, bạn sẽ có một file ~/.otpw
chứa các giá trị được băm của các hậu tố password , một trên mỗi dòng:
OTPW1 280 3 12 8 253tFMngG2PNYhn 132Kua%SZ+esb6t 237yH7D2FMbQsyW 125rrXfBRwnF+A% 106gJxhJE4jkknj 04135:5:knWIB4: 232/d4kI:n57IcD 244RASe8ka63b8Z 057GmqfFe=pXQqu . . .
Bạn cũng đã gộp các hậu tố chưa băm của bạn với số tham chiếu của chúng vào một file tại ~/nothingtosee.txt
.
OTPW list generated 2014-04-03 18:06 on sshd 000 /rGF h5Hq 056 /zi5 %yTJ 112 J7BT HdM= 168 fdBm X%Tn 224 69bi =9mE 001 GoOG jxYQ 057 E=o3 kuEF 113 zwit p27J 169 nHK9 CXRx 225 IihF =o8g 002 Xm=E PuXc 058 Ok27 ZJ++ 114 On=5 pNYH 170 ZRDa mB5e 226 yYsb CAfn 003 deL+ iHs7 059 /WGS :J4M 115 ZZd/ 8zyU 171 acDd dESV 227 ddjg ipcR 004 KhDn NdfS 060 =tEz ACye 116 FkQ9 8kSu 172 iRSR nZWT 228 9hHd veZ9 005 rGFG K5=7 061 MvUW LRxc 117 2YwY axJJ 173 kEV5 T/Vz 229 wx%n Le6P 006 GWi2 fHjf 062 qOR: WN2x 118 FvD4 oNjT 174 99OT 8KPy 230 /I=Y hicP 007 XPom pEYp 063 8Xvm vZGa 119 UNjF :Kys 175 b95i SU3R 231 keLn aDcK 008 fJI% 3Qs2 064 3I7Q I2xc 120 5Tm9 REQK 176 AVg: 4ijE 232 :aIF op6V 009 P/Sn dSxA 065 A+J6 =4zo 121 LAyj 3m2+ 177 TMuN 9rJZ 233 SWvB %+cL . . .
Cột bên trái là số tham chiếu, theo sau là 8 ký tự cho hậu tố. Khoảng trống giữa 4 ký tự đầu tiên và cuối cùng trong hậu tố là để dễ đọc và có thể tùy chọn bị xóa khi bạn nhập hậu tố.
Theo mặc định, trình tạo tạo ra đủ các hậu tố để vừa trên một tờ giấy tiêu chuẩn, điều này rất tốt cho việc in ấn và một cách thực hiện kết quả .
Bạn sẽ phải hoàn thành quy trình này cho từng user mà bạn muốn cấu hình quyền truy cập password một lần.
Đang dùng thử
Từ một máy tính không được cấu hình bằng SSH key của bạn (bạn cũng có thể tạm thời di chuyển khóa của bạn ra khỏi ~/.ssh
), bạn có thể thử nghiệm hệ thống password dùng một lần mới.
Đăng nhập vào user mà bạn đã cấu hình bằng OTPW như bạn thường làm:
ssh demouser@server1.com
Password 253:
Như bạn thấy , ta đã được cung cấp hậu tố mà OTPW muốn.
Đầu tiên, hãy nhập password tiền tố của bạn, theo sau trực tiếp với hậu tố trên cùng một dòng, không có khoảng cách giữa password tiền tố và hậu tố. Bạn có thể giữ khoảng trống được hiển thị trong file hậu tố nếu bạn muốn.
Vì vậy, giả sử rằng password tiền tố của tôi là “crazyburr! To” và file hậu tố có một cột giống như sau:
249 N4HY RsbH 250 +vAz fawn 251 O4/R ZrhM 252 c6kP jgUT 253 I=aA OKSz 254 aYzA :F64 255 3ezp ZpIq 256 ggIi TD2v
Trong trường hợp này, ta có thể nhập “crazyburr! ToI = aA OKSz” hoặc “crazyburr! ToI = aAOKSz”.
Sau đó, bạn có thể đăng nhập mà không có vấn đề gì. Nếu bạn kiểm tra file ~/.otpw
, bạn sẽ thấy rằng một trong các dòng băm đã được thay thế bằng dấu gạch ngang:
. . . 091icM5kSPVOdcU 274Uf3q/=kTYcu8 229fHfmIsCj7mjQ --------------- 115EzDO6=jM/sOT 143iWCdteSk3kg7 265S+QTGcg+MAZO 174UgXchxsI2g:G . . .
Điều này nghĩa là hậu tố đã được sử dụng và không còn hợp lệ.
Nếu hai người cố gắng đăng nhập vào account cùng một lúc, OTPW sẽ yêu cầu password tiền tố của bạn, theo sau là ba hậu tố. Mỗi hậu tố trong số ba hậu tố được yêu cầu sẽ khác nhau, do đó ai đó đang viết keylogging và cố gắng đánh bại bạn để nhấn phím enter sẽ không thể hoàn thành việc đó thành công.
Dấu nhắc sẽ giống như sau:
Password 161/208/252:
Tệp ~/.otpw.lock
được tạo trong trường hợp này. Sau khi đăng nhập thành công, nó sẽ được gỡ bỏ, nhưng có một lỗi khiến điều này không hoạt động trong một số trường hợp. Trong trường hợp này, chỉ cần tháo khóa theo cách thủ công:
rm ~/.otpw.lock
Lần tới, bạn sẽ được yêu cầu nhập lại một password duy nhất.
Cảnh báo và lỗi
Tôi đã đề cập ở trên cách đôi khi file khóa không bị xóa tự động sau khi bạn đăng nhập thành công. Điều này đặc biệt phổ biến khi user hủy kết nối bằng lệnh CTRL-C trước khi kết thúc dấu nhắc .
Một lỗi khác tương đối quan trọng là báo cáo số lượng mục nhập OTPW hợp lệ còn lại. Điều này thường được xử lý bởi dòng phiên trong cấu hình PAM, nhưng hiện tại nó không hoạt động chính xác.
Để giải quyết vấn đề này, Wolfgang Kroener đã viết một tập lệnh bash rất đơn giản để triển khai chức năng này trong chuỗi danh sách gửi thư Debian này . Ta có thể thực hiện điều này theo nhiều cách khác nhau, nhưng đơn giản nhất là chỉ cần thêm nó vào cuối ~/.bashrc
của ta cho những user đang cài đặt OTPW:
nano ~/.bashrc
Ở phía dưới cùng, dán cái này:
if [ "$SSH_TTY" -a -f $HOME/.otpw ]; then PW_LINES=$(wc -l <$HOME/.otpw) PW_USED=$(grep -- ---- $HOME/.otpw | wc -l) echo "OTPW $PW_USED/`echo $PW_LINES-2 | bc` used" fi
Bạn cũng có thể thêm nó vào một vị trí tập trung hơn. Bằng cách đó, nó sẽ xuất ra tùy thuộc vào việc file ~/.otpw
có tồn tại cho mỗi user hay không.
Bây giờ, khi bạn đăng nhập, bạn sẽ nhận được số liệu thống kê về password còn lại hiện tại của bạn :
OTPW 6/280 used
OTPW khuyên bạn nên tạo lại danh sách password của bạn khi bạn nhận được dưới 50% password hiện có của bạn . Bạn có thể thực hiện việc này bằng cách chạy lại lệnh tạo:
otpw-gen > anotherfile.txt
Điều này sẽ overrides lên các hậu tố password trước đó của bạn, vì vậy chúng sẽ không thể sử dụng được sau quy trình này.
Kết luận
Cài đặt OTPW có thể cung cấp cho bạn một tùy chọn để đăng nhập vào server của bạn từ một vị trí không an toàn. Mặc dù nó mắc phải một số hạn chế của đăng nhập bằng password thông thường, nhưng nó cung cấp nền tảng trung gian giữa đăng nhập dựa trên khóa, không bao giờ được chuyển sang một máy tính không an toàn và đăng nhập bằng password thông thường, có nhiều lỗ hổng và lỗ hổng.
Các tin liên quan
Cách cài đặt và cấu hình Syncthing để đồng bộ hóa các thư mục trên Ubuntu 14.042014-06-16
Cách sử dụng Icinga để giám sát server và dịch vụ của bạn trên Ubuntu 14.04
2014-06-13
Cách sử dụng Logstash và Kibana để tập trung log trên Ubuntu 14.04
2014-06-11
Cách cài đặt Graylog2 và tập trung log trên Ubuntu 14.04
2014-06-06
Cách cài đặt và cấu hình OpenLDAP và phpLDAPadmin trên server Ubuntu 14.04
2014-06-05
Cách cấu hình Collectd để thu thập số liệu hệ thống cho Graphite trên Ubuntu 14.04
2014-06-03
Cách cấu hình StatsD để thu thập số liệu thống kê tùy ý cho Graphite trên Ubuntu 14.04
2014-06-03
Cách cài đặt OctoberCMS trên VPS chạy Ubuntu 14.04
2014-05-28
Cách cài đặt và sử dụng Graphite trên server Ubuntu 14.04
2014-05-27
Cách cài đặt và sử dụng Ack, một sự thay thế Grep cho các nhà phát triển, trên Ubuntu 14.04
2014-05-27