Không thể tạo người dùng bằng mật khẩu qua ssh [đã đóng]


13

Tôi đã cố gắng tạo một người dùng bằng mật khẩu thông qua ssh (với quyền root) như thế này:

ssh root@123.45.6.7 useradd -p $(openssl passwd -1 1234) newuser

Bằng cách đó, tôi có thể tạo thành công một tài khoản có tên newuser, nhưng tôi không thể đăng nhập bằng mật khẩu dự kiến ​​(đó là 1234)

Sẽ không có gì khác biệt nếu tôi thêm dấu ngoặc kép:

ssh root@123.45.6.7 "useradd -p $(openssl passwd -1 1234) newuser"

Và sau đó tôi đã tự hỏi nếu tôi có thể tạo mật khẩu băm và lưu nó dưới dạng một biến cục bộ, nhưng vẫn không gặp may.

password=$(openssl passwd -1 1234)
ssh root@123.45.6.7 "useradd -p $password newuser"

Có điều gì tôi nhớ không? Cảm ơn trước!


Truyền mật khẩu trên dòng lệnh là một ý tưởng tồi vì những người dùng khác có thể thấy các đối số dòng lệnh. Xem câu trả lời của heemayl cho điều đó. Ngoài ra, điều này nghe có vẻ như là một vấn đề XY . Bạn thực sự đang cố gắng để đạt được điều gì? Điểm của mật khẩu tài khoản mà không ai biết (hoặc được cho là biết)? Nếu mục đích là tạo một tài khoản không chấp nhận đăng nhập thông qua mật khẩu thì chỉ cần không đặt mật khẩu nào sẽ khiến việc đăng nhập dựa trên mật khẩu bị vô hiệu hóa như chính sách mặc định của Ubuntu.
David Foerster

Câu trả lời:


22

Đây là một vấn đề trích dẫn cổ điển.

Vấn đề: Không có bất kỳ trích dẫn hoặc trích dẫn kép thay thế lệnh ( $()) và mở rộng biến ( $s trong mật khẩu băm được trả về opensslđang được coi là chỉ báo biến) đang được thực hiện trong môi trường cục bộ, không phải trên vỏ từ xa.

Giải pháp: sử dụng các dấu ngoặc đơn xung quanh useraddlệnh được sử dụng sshtrên shell cục bộ để ngăn việc thay thế lệnh và mở rộng biến trên môi trường cục bộ, hãy để việc mở rộng diễn ra trên shell không đăng nhập, không tương tác từ xa:

ssh root@123.45.6.7 'useradd -p "$(openssl passwd -1 1234)" newuser'

Lưu ý các trích dẫn.

Vấn đề an ninh:

  • rootĐăng nhập SSH phải bị vô hiệu hóa, nếu bạn phải kích hoạt nó thì chỉ được phép xác thực dựa trên khóa

  • MD5 đã bị hỏng và không có muối, bạn phải chịu một cuộc tấn công bảng Rainbow đơn giản (thậm chí không cần tấn công từ điển / tấn công từ điển); openssl passwdkhông tạo ra một muối ngẫu nhiên mặc dù. Dù sao, bạn thực sự nên cân nhắc sử dụng SHA-2 với muối

  • Mật khẩu được chuyển dưới dạng đối số cho các lệnh có thể hiển thị cho các quy trình khác trong hệ thống (từ xa); điều này phụ thuộc vào cách bạn procfsđược gắn kết (nhìn vào hidepid) và nếu lệnh tự viết lại (trường hợp này có lẽ là không)


1
Hoạt động như một sự quyến rũ, và cảm ơn bạn cho thông tin bổ sung!
amigcamel 30/03/2017

1
băm mật khẩu md5crypt có muối ...
ilkkachu

@ilkkachu MD5 không phải là hàm băm an toàn. Nếu bạn quan tâm, hãy chạy một tìm kiếm trên Bảo mật thông tin . Thực sự bạn nên sử dụng một thuật toán tổng hợp hoặc thư viện mật mã, nhưng SHA-2 tốt hơn đáng kể so với MD5.
wizzwizz4

1
@ wizzwizz4 vâng, điều đó được biết đến, không thay đổi thực tế là thông tin trong câu trả lời này là không chính xác. :)
hobbs 30/03/2017

2
@ wizzwizz4, hàm băm mật khẩu ( md5crypt ) được crypt(3)Linux hỗ trợ và được đánh dấu bằng mã $1$định danh không giống như thuật toán băm MD5 đơn giản, giống như cách băm$5$$6$ mật khẩu băm không phải là SHA-256 và SHA-512 đơn giản . Phương thức dựa trên MD5 có số lần lặp cố định, đây là vấn đề lớn nhất với nó.
ilkkachu

7

Như @heemayl đã lưu ý, thuật toán băm mật khẩu MD5 đã cũ và các hệ thống hiện tại băm mật khẩu dựa trên SHA-2 mới hơn, có hệ số công việc có thể tùy chỉnh. Nhưng công cụ dòng lệnh OpenSSL dường như không hỗ trợ chúng.

Các chpasswdtiện ích , tuy nhiên, sẽ cho phép bạn thay đổi mật khẩu của người dùng theo các thiết lập hệ thống.

Điều này sẽ cho phép bạn tạo người dùng mới và thay đổi mật khẩu của họ ở đầu xa.

echo "newuser:newpass" | ssh root@123.45.6.7 'useradd newuser; chpasswd' 

chpasswdlấy tên người dùng và mật khẩu từ stdin, không phải dòng lệnh. Đây thực sự là một lợi thế vì các đối số dòng lệnh hiển thị cho tất cả các quy trình khác trên hệ thống, vì vậy nếu chạy openssl passwdtrên điều khiển từ xa, mật khẩu sẽ hiển thị trong giây lát cho tất cả các quy trình trên hệ thống.

Tôi không chắc chắn nếu có một tiện ích dòng lệnh được tạo sẵn để tạo băm mật khẩu được biết bởi crypt(3)chức năng hệ thống . Perl có cryptchức năng dựng sẵn, nhưng vẫn cần tạo ra một loại muối thích hợp.

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.