Vâng, mặc dù khá hiếm, điều này chắc chắn là có thể làm được.
Thay vì cố gắng tự thực hiện vì /etc/password
/etc/shadow
phương thức xác thực dựa trên mặc định không có điều khoản nào cho cấu hình như vậy, cách đơn giản hơn là ủy quyền xác thực cho một back-end đã hỗ trợ nhiều mật khẩu cho người dùng.
Một cái được biết đến là LDAP , userPassword
thuộc tính được đa trị hóa theo RFC4519 :
Một ví dụ về nhu cầu nhiều giá trị trong thuộc tính 'userPassword' là một môi trường mà mỗi tháng người dùng sẽ sử dụng một mật khẩu khác nhau được tạo bởi một số hệ thống tự động. Trong các giai đoạn chuyển tiếp, như ngày cuối cùng và ngày đầu tiên của thời kỳ, có thể cần phải cho phép hai mật khẩu cho hai giai đoạn liên tiếp có hiệu lực trong hệ thống.
Mặc dù RFC này, bạn có thể cần phải thay đổi cấu hình chính sách mật khẩu trên hầu hết các cài đặt máy chủ thư mục để cài đặt này thực sự được chấp nhận.
Về phía Linux, không có gì cấm làm điều đó (ở đây một tài khoản có tên testuser
đã được cung cấp cả pass1
và pass2
dưới dạng userPassword
giá trị thuộc tính):
$ uname -a
Linux lx-vb 3.8.0-19-generic #29-Ubuntu SMP Wed Apr 17 18:16:28 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
$ grep VERSION /etc/os-release
VERSION="13.04, Raring Ringtail"
$ grep "^passwd" /etc/nsswitch.conf
passwd: files ldap
$ ldapsearch -LLL -h localhost -p 1389 -D "cn=directory manager" -w xxxxxxxx "uid=testuser" userPassword
dn: uid=testuser,ou=People,dc=example,dc=com
userPassword:: e1NTSEF9b2JWYXFDcjhNQmNJVXZXVHMzbE40SFlReStldC9XNFZ0NU4yRmc9PQ==
userPassword:: e1NTSEF9eDlnRGZ5b0NhKzNROTIzOTFha1NiR2VTMFJabjNKSWYyNkN3cUE9PQ==
$ grep testuser /etc/passwd
$ getent passwd testuser
testuser:*:12345:12345:ldap test user:/home/testuser:/bin/sh
$ sshpass -p pass1 ssh testuser@localhost id
uid=12345(testuser) gid=12345 groups=12345
$ sshpass -p pass2 ssh testuser@localhost id
uid=12345(testuser) gid=12345 groups=12345
$ sshpass -p pass3 ssh testuser@localhost id
Permission denied, please try again.
Dưới đây là một số ý nghĩa liên quan đến kỹ thuật và bảo mật của loại cấu hình đó:
- tài khoản người dùng rõ ràng sẽ dễ bị tấn công hơn mặc dù điều thực sự quan trọng ở đây là chất lượng và bảo vệ mật khẩu nhiều hơn số của họ.
- hầu hết các tiện ích đều cho rằng người dùng có một mật khẩu duy nhất nên sẽ không cho phép người dùng cập nhật riêng một trong các mật khẩu. Thay đổi mật khẩu sau đó sẽ có khả năng dẫn đến một thuộc tính mật khẩu cho người dùng.
- nếu mục tiêu là cho phép nhiều người chia sẻ cùng một tài khoản bằng mật khẩu của riêng họ, thì không có cơ chế xác định ai thực sự đăng nhập dựa trên mật khẩu được sử dụng.
sudo
để cho phép user1 chạy các lệnh như user2. (sudo
không chỉ để chạy các lệnh với quyền root; nó có thể chạy các lệnh như bất kỳ người dùng nào.)