Bạn có thể cung cấp cho một tài khoản người dùng nhiều mật khẩu?


21

Tôi muốn gán 2 mật khẩu cho một tài khoản. Điều tôi muốn biết là 1) điều này là có thể, và 2) ý nghĩa bảo mật của việc này là gì?

Lý do tôi muốn làm điều này là vì tôi hiện đang bận rộn với một số thử nghiệm cục bộ và tôi nghĩ rằng nó sẽ thuận tiện trong một số tình huống cụ thể. Sau một số nghiên cứu, tôi đã tìm thấy một thứ gọi là PAM , nhưng tôi đang loay hoay tìm thông tin về cách cài đặt / cấu hình hoạt động.

Tôi đang chạy Ubuntu 12.04.


1
Tôi có lẽ chỉ cần thiết lập sudođể cho phép user1 chạy các lệnh như user2. ( sudokhô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.)
cjm

Câu trả lời:


16

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/shadowphươ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 , userPasswordthuộ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ả pass1pass2dưới dạng userPasswordgiá 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.

1
Bạn có thể vui lòng giải thích tại sao điều này không có ý nghĩa bảo mật? Ấn tượng đầu tiên của tôi là nó sẽ làm tăng khả năng tài khoản bị xâm phạm, đặc biệt là nếu một mật khẩu yếu hơn đáng kể so với mật khẩu khác.
Joseph R.

1
@JosephR. Bạn nói đúng. Tôi chỉ cập nhật trả lời của mình sau khi thực hiện những gì tôi đề xuất và trải nghiệm với nó.
jlliagre

Câu trả lời tuyệt vời, hoạt động như một nét duyên dáng bây giờ. Cảm ơn :)
tổng

7

Tôi chỉ cố gắng tạo 2 mục nhập cho người dùng trong /etc/shadowtệp và nó không hoạt động. Mục nhập đầu tiên là mục nhập mật khẩu đã được sử dụng.

Thí dụ

Tạo một người dùng thử nghiệm.

$ useradd -d /home/newuser newuser

Đặt mật khẩu thành "super123":

$ passwd newuser

Chỉnh sửa thủ công /etc/shadowtệp và thực hiện một mục thứ hai:

newuser:$6$....password #1...:15963:0:99999:7:::
newuser:$6$....password #2...:15963:0:99999:7:::

Sau đó thử đăng nhập bằng tài khoản bằng 2 mật khẩu.

su - newuser

Mục nhập đầu tiên /etc/shadowlà những gì được sử dụng, mục nhập ở vị trí thứ hai không bao giờ hoạt động, nếu bạn lật chúng như vậy:

newuser:$6$....password #2...:15963:0:99999:7:::
newuser:$6$....password #1...:15963:0:99999:7:::

Sau đó, mật khẩu thứ hai hoạt động và mật khẩu thứ nhất thì không.

Sử dụng sudo

Cách tiếp cận này là một hack hoàn toàn, tôi sẽ chỉ sử dụng sudo, đó là một phần lý do tại sao sudotồn tại.

Bạn có thể thêm mục này vào tệp sudoers ( /etc/sudoers) sẽ cho phép người dùng cho phép joe làm bất cứ điều gì như bạn:

joe ALL=(yourusername) ALL

Tôi thực sự đã quên rằng sudocó thể làm điều đó .. +1
tổng

4

Nếu bạn có thể làm điều này, có lẽ bạn không nên.

Cấu hình PAM hơi phức tạp và có một sự thật về các cơ chế xác thực: có một tập hợp hữu hạn các cấu hình đúng nhưng một tập hợp vô hạn các cấu hình không an toàn. Điều này gần như chắc chắn rằng nếu bạn cố gắng thay đổi mọi thứ và không biết chính xác những gì bạn đang làm, bạn sẽ làm hỏng mọi thứ.

Nếu lựa chọn là giữa bảo mật và "thuận tiện trong một số tình huống cụ thể", hãy chọn phương án trước.


+1 cho "bảo mật trên sự tiện lợi" (mà tôi hoàn toàn đồng ý), nhưng tôi là kiểu người muốn kiểm tra mọi thứ ngay cả khi chỉ để trải nghiệm, vì vậy không phải là 100% câu trả lời tôi đang tìm kiếm.
tổng

2

Bạn có thể đặt hai tên người dùng khác nhau, mỗi tên có mật khẩu của họ cho cùng một tài khoản. Chạy vipwđể chỉnh sửa /etc/passwdthủ công, sao chép dòng hiện có cho tài khoản bạn quan tâm và thay đổi tên người dùng (và nếu bạn thích trường Gecos , thư mục chính và vỏ). Chạy vipw -svà nhân đôi dòng cho người dùng đó /etc/shadow. Đăng nhập dưới tên người dùng mới và chạy passwdđể thay đổi mật khẩu cho tên người dùng mới. Bây giờ bạn có hai tên người dùng khác nhau, với các mật khẩu khác nhau, cho cùng một tài khoản (ID người dùng là yếu tố quyết định tài khoản).

Đây có lẽ không phải là một ý tưởng tốt. Tùy thuộc vào những gì bạn đang cố gắng thực hiện, các phương pháp khác có thể phù hợp hơn:

  • Tạo một tài khoản khác và chia sẻ tệp bằng cách cam kết và kiểm tra từ kiểm soát phiên bản.
  • Tạo một tài khoản khác, tạo một nhóm mà cả hai tài khoản người dùng thuộc về và cấp cho nhóm quyền truy cập vào các tệp mà bạn muốn chia sẻ.
  • Tạo một tài khoản khác và cung cấp cho tài khoản đầu tiên quyền chạy các lệnh như tài khoản đó với sudo:

    user1 ALL = (user2) ALL
    
  • Tạo khóa SSH cho tài khoản chỉ cho phép chạy một lệnh cụ thể .

bạn có phiền khi sao chép cái này sang đâyhttp: //askubfox.com/questions/567139/2-password-1-account-login không?
Rinzwind
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.