ฉันจะกำหนดรหัสผ่านเริ่มต้น / เริ่มต้นให้กับผู้ใช้ใน Linux ได้อย่างไร


10

ผมพบว่าคู่มือที่อธิบายถึงวิธีไปตั้งค่ารหัสผ่านของผู้ใช้ ฉันกำลังพยายามทำให้เป็นอัตโนมัติและส่งอีเมลไปยังผู้ใช้ที่ชอบ:

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

ตามเอกสารข้างต้นจำเป็นต้องสร้างรหัสผ่านที่เข้ารหัสโดยใช้ Python และป้อนให้กับusermodคำสั่งเช่นนี้:

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

มีวิธีอื่นที่ง่ายกว่าในการทำเช่นนี้? ฉันไม่ต้องการดาวน์โหลดโปรแกรมอรรถประโยชน์พิเศษใด ๆ ควรสรุปให้มากที่สุด


แก้ไข : แม้แต่วิธีการที่ระบุในลิงก์ด้านบนก็ไม่ได้ผลสำหรับฉัน:

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.

นี่คืออีกหนึ่งลิงค์ที่ฉันพบ แต่ดูเหมือนว่าปัญหาความปลอดภัยยังมีการใช้ตัวเลือก -p usermodเมื่อใครบางคนใช้psเพื่อดูกระบวนการรายชื่อรหัสผ่านที่มองเห็นได้
munish

คำตอบ:


13

คุณสามารถใช้chpasswdในการทำเช่นนี้:

echo "username:newpassword" | chpasswd

คุณสามารถเข้าไปในchpasswdจากโปรแกรมอื่นที่ไม่ใช่echoถ้าสะดวก แต่นี่จะเป็นการหลอกลวง

แก้ไข: เพื่อสร้างรหัสผ่านภายในเชลล์สคริปต์จากนั้นตั้งค่าคุณสามารถทำสิ่งนี้:

# 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

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับchpasswdดูhttp://linux.die.net/man/8/chpasswd

(คำสั่งในการสร้างรหัสผ่านมาจากhttp://nixcraft.com/shell-scripting/13454-command-generate-random-password-string.html )


ขอบคุณ @Dominick hmm บางที chpasswd อาจอยู่ใน AIX ... ฉันไม่ได้ใช้ และ evrytime ฉันต้องเขียนรหัสผ่าน ... ไม่สามารถมันถูกสร้างขึ้นโดยสคริปต์เหมือนในคำถามเชื่อมโยง ... น่าเสียดายที่แม้กระทั่งที่ไม่ได้ทำงานสำหรับฉัน
Munish

@munish ฉันไม่แน่ใจว่าสิ่งที่คุณหมายถึงโดยสร้างในสคริปต์ แต่ฉันปรับปรุงคำตอบของฉันเพื่อหวังว่าจะเป็นประโยชน์มากขึ้น
Dominick Pastore

ไม่ทำงาน, ไม่เป็นผล. "ข้อผิดพลาดการจัดการโทเค็นการตรวจสอบสิทธิ์"
Cerin

@Cerin คุณมีโอกาสที่จะทำสิ่งsudo echo "username:newpass" | chpasswdใดเป็นอย่างไรบ้าง? เนื่องจากสิทธิ์ที่ยกระดับจากsudoไม่ผ่านไปป์ดังนั้นchpasswdจะทำงานเหมือนผู้ใช้ปกติ มันสามารถแก้ไขได้โดยการย้ายsudo, ตามecho "username:newpass" | sudo chpasswdมา นอกจากนี้ยังมีปัญหาอื่น ๆ ที่อาจทำให้เกิดข้อความแสดงข้อผิดพลาดนั้น แต่ข้อผิดพลาดการอนุญาตเช่นนี้อาจเป็นเรื่องที่พบได้บ่อย
Dominick Pastore

1
รหัสผ่านบนบรรทัดคำสั่งสามารถมองเห็นได้โดยผู้ใช้อื่นที่เข้าสู่ระบบในเครื่องเดียวกันโดยใช้คำสั่ง w, ps หรืออื่น ๆ ซึ่งแสดงข้อมูลเกี่ยวกับกระบวนการอื่น ๆ รหัสผ่านที่ตั้งค่าด้วยวิธีนี้ควรเปลี่ยนโดยผู้ใช้โดยเร็วที่สุด
Mnebuerquo

3

คุณสามารถใช้ OpenSSL เพื่อสร้างรหัสผ่านแบบสุ่ม (16 ตัวอักษรในกรณีนี้):

# 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')

จากนั้นป้อนรหัสผ่านที่แฮชไปยังuseraddหรือusermod

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

เครดิตที่เป็นเนื่องจาก: รุ่นรหัสผ่านจะดัดแปลงมาจากวิธีการที่คล้ายกันที่ใช้แทน/dev/urandomopenssl


2

useraddควรใช้งานได้ (ฉันได้ทำไว้ใน Ubuntu) อาจตรวจสอบว่าแต่ละ args ของคุณถูกต้อง (มีกลุ่มของเจ้าอยู่เส้นทางนั้นถูกต้องในการทุบตี) คุณสามารถเรียกใช้คำสั่งด้วยรหัสผ่านและผู้ใช้จากนั้นใช้userdelเพื่อลบแล้วลองอีกครั้งด้วยพารามิเตอร์เพิ่มเติมเพื่อดูสิ่งที่ทำให้เกิดปัญหา (วิธีเดรัจฉานบังคับ)

นอกจากนี้ยังมีnewusers (ดูหน้าคน) อย่างน้อยภายใต้อูบุนตูที่คุณให้ไฟล์ที่มีไฟล์ passwd เช่นข้อมูลรวมถึงรหัสผ่านข้อความธรรมดาและมันจะสร้างผู้ใช้เหล่านั้น เป็นวิธีที่ดีในการทำผู้ใช้หลายคนในครั้งเดียว


+1 สำหรับการกล่าวถึงnewusersคำสั่งสำหรับ Ubuntu
Levon

1

วิธีที่ง่ายที่สุดที่ฉันพบ:


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

คุณเคยทดสอบสิ่งนี้หรือไม่? passwd: unrecognized option '--stdin'
Cerin

ใช่ฉันใช้สิ่งนี้มาหลายครั้ง แต่เช่นเดียวกับคำสั่งอื่นเกือบจะไม่ใช่ทางออกของ defacto ต่อปัญหาที่เกิดขึ้น รูปแบบบางส่วนของรหัสผ่าน passwd ไม่รองรับสวิตช์ --stdin
MelBurslan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.