Làm cách nào tôi có thể gán mật khẩu ban đầu / mặc định cho người dùng trong Linux?


10

Tôi tìm thấy một hướng dẫn giải thích cách đặt mật khẩu của người dùng . Tôi đang cố gắng tự động hóa nó và gửi e-mail cho người dùng như:

userid created with password XYZ.
request to change the initial password.

Theo tài liệu ở trên, mật khẩu được mã hóa cần được tạo bằng Python và được cung cấp cho usermodlệnh như thế này:

 usermod -p "<encrypted-password>" <username>

Có cách nào đơn giản hơn để làm điều này? Tôi không muốn tải xuống bất kỳ tiện ích đặc biệt nào để làm điều đó; nó nên được khái quát hóa càng nhiều càng tốt.


Chỉnh sửa : Ngay cả phương pháp được đưa ra trong liên kết ở trên dường như không hoạt động đối với tôi:

bash-3.00# python
Python 2.4.6 (#1, Dec 13 2009, 23:43:51) [C] on sunos5
Type "help", "copyright", "credits" or "license" for more information.
>>> import crypt; print crypt.crypt("<password>","<salt>")
<sOMrcxm7pCPI
>>> ^D
bash-3.00# useradd -g other -p "sOMrcxm7pCPI" -G bin,sys -m -s /usr/bin/bash mukesh2
UX: useradd: ERROR: project sOMrcxm7pCPI does not exist.  Choose another.
UX: useradd: sOMrcxm7pCPI name should be all lower case or numeric.

Đây là một liên kết nữa tôi tìm thấy nhưng có vẻ như có vấn đề bảo mật với việc sử dụng tùy chọn -p usermodkhi ai đó sử dụng psđể xem quy trình liệt kê mật khẩu được hiển thị
munish

Câu trả lời:


13

Bạn có thể sử dụng chpasswdđể làm điều đó, như thế này:

echo "username:newpassword" | chpasswd

Bạn có thể chuyển chpasswdtừ các chương trình khác echo, nếu thuận tiện, nhưng điều này sẽ thực hiện thủ thuật.

Chỉnh sửa: Để tạo mật khẩu trong tập lệnh shell và sau đó đặt mật khẩu, bạn có thể làm một cái gì đó như thế này:

# Change username to the correct user:
USR=username
# This will generate a random, 8-character password:
PASS=`tr -dc A-Za-z0-9_ < /dev/urandom | head -c8`
# This will actually set the password:
echo "$USR:$PASS" | chpasswd

Để biết thêm thông tin về chpasswd, hãy xem http://linux.die.net/man/8/chpasswd

(Lệnh tạo mật khẩu là từ http://nixcraft.com/shell-scripting/13454-command-generate-random-password-opes.html )


cảm ơn @Dominick hmm, chpasswd có lẽ trong AIX ... tôi không sử dụng nó. và evrytime tôi phải viết một mật khẩu ... không thể được tạo bởi tập lệnh như trong liên kết câu hỏi ... thật không may, ngay cả điều đó cũng không hiệu quả với tôi
munish

@munish Tôi không chắc ý của bạn là gì khi tạo tập lệnh, nhưng tôi đã cập nhật câu trả lời của mình để hy vọng sẽ hữu ích hơn.
Dominick Pastore

Không hoạt động. "Lỗi thao tác mã thông báo xác thực"
Cerin

@Cerin Có phải bạn đang làm gì đó sudo echo "username:newpass" | chpasswdkhông? Bởi vì các quyền nâng cao từ sudokhông đi qua đường ống, nên chpasswdsẽ chạy như một người dùng bình thường. Nó có thể được sửa chữa bằng cách di chuyển sudo, như trong echo "username:newpass" | sudo chpasswd. Ngoài ra còn có các vấn đề khác có thể gây ra thông báo lỗi đó, nhưng lỗi quyền như thế này có lẽ là phổ biến nhất.
Dominick Pastore

1
Mật khẩu trên dòng lệnh có thể hiển thị cho những người dùng đã đăng nhập khác trên cùng một máy bằng cách sử dụng các lệnh w, ps hoặc các lệnh khác hiển thị thông tin về các quy trình khác. Mật khẩu được đặt theo cách này nên được người dùng thay đổi càng sớm càng tốt.
Mnebuerquo

3

Bạn có thể sử dụng OpenSSL để tạo mật khẩu ngẫu nhiên (16 ký tự, trong trường hợp này):

# 1000 bytes should be enough to give us 16 alphanumeric ones
p=$(openssl rand 1000 | strings | grep -io [[:alnum:]] | head -n 16 | tr -d '\n')

Sau đó cung cấp mật khẩu băm cho useraddhoặcusermod

# omit the "-1" if you want traditional crypt()
usermod -p $(openssl passwd -1 "$p") <username>

Tín dụng khi đến hạn: Việc tạo mật khẩu được điều chỉnh từ một phương thức tương tự sử dụng /dev/urandomthay vì openssl.


2

useradd nên hoạt động (Tôi đã thực hiện nó trên Ubuntu). Có thể kiểm tra xem mỗi đối số của bạn có đúng không (các nhóm tồn tại, đường dẫn có quyền bash). Bạn có thể chạy lệnh chỉ bằng mật khẩu và người dùng, sau đó sử dụng userdel để xóa và sau đó thử lại với nhiều tham số hơn, để xem điều gì gây ra sự cố (phương pháp tiếp cận bạo lực).

Ngoài ra còn có người mới (xem trang man), ít nhất là trong Ubuntu, nơi bạn cung cấp cho nó một tệp có tệp passwd như thông tin, bao gồm cả mật khẩu văn bản đơn giản và nó sẽ tạo ra những người dùng đó. Cách tốt đẹp để làm nhiều người dùng cùng một lúc.


+1 để đề cập đến newuserslệnh cho Ubuntu
Levon

1

cách đơn giản nhất tôi tìm thấy:


PASSWD="mySeCr3t-default-pa55" 
echo ${PASSWD} | passwd --stdin username_here

Bạn thậm chí đã kiểm tra điều này? passwd: unrecognized option '--stdin'
Cerin

Vâng, tôi đã sử dụng điều này nhiều lần nhưng, như với hầu hết các lệnh khác, nó không phải là giải pháp defacto cho vấn đề hiện tại. Một số biến thể của nhị phân passwd, không hỗ trợ chuyển đổi --stdin.
MelBurslan
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.