วิธีที่เหมาะสมในการเพิ่มบัญชีผู้ใช้ผ่านสคริปต์ทุบตี


15

นี่คือรหัสสคริปต์ที่ฉันใช้ตอนนี้:

getent group $MYGROUP
if [ $? -ne 0 ] ; then
    sudo su -c "groupadd $MYGROUP"
fi
sudo su -c "useradd mynewuser -p mypassword -m -g $PRIMARYGRP -G $MYGROUP"

วิธีนี้ใช้ได้ดีกับ openSuse แต่มีปัญหาหลายประการเกี่ยวกับบัญชีผู้ใช้ที่สร้างบนUbuntuดังนั้นฉันจึงขอความช่วยเหลือจากที่นี่

  • เทอร์มินัลพรอมต์ไม่ได้ตั้งค่า ( echo $PS1ไม่ส่งคืนอะไร)
  • ปุ่มลูกศรและแป้นแท็บทำงานไม่ถูกต้องในเครื่องเทอร์มินัล
  • ดูเหมือนว่ารหัสผ่านจะไม่ทำงาน (แม้ว่าฉันจะยังไม่ชัดเจนว่าปัญหานี้คืออะไร)
  • สิทธิ์ / etc / sudoers ที่กำหนดไว้สำหรับผู้ใช้ใหม่นี้จะไม่ได้รับเกียรติ

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

สุดท้ายผมอยากจะเข้าใจความแตกต่างระหว่างและadduser useraddตัวอย่างเช่นฉันต้องการทราบว่ามีการใช้ไดเรกทอรี Skeleton ใดadduserเนื่องจากอาจเป็นสาเหตุที่useraddใช้งานไม่ได้ตามที่คาดไว้ (เพราะฉันเพิ่งยอมรับค่าเริ่มต้น)

ขอบคุณ


1
สำหรับความแตกต่าง: จากหน้า useradd ( man useradd): useradd เป็นยูทิลิตี้ระดับต่ำสำหรับการเพิ่มผู้ใช้ บน Debian ผู้ดูแลระบบควรใช้ adduser (8) แทน
guntbert

นอกจากนี้จะเทียบเท่ากับsudo su -c "cmd arg1 arg2" sudo cmd arg1 arg2
enzotib

@enzotib ขอบคุณ เป็นการดีที่จะรู้ว่าสิ่งเหล่านี้เทียบเท่ากับ Ubuntu เพราะพวกเขาไม่ได้อยู่ใน openSuse ดังนั้นฉันจะใช้ต่อไปsudo su -c "cmd arg1 arg2"เรื่อย ๆ เพื่อให้มันใช้ได้ทุกที่ที่ต้องการ
MountainX-for-Monica

adduserเป็นสคริปต์Perlมากกว่า 1,000 บรรทัดดังนั้นสำหรับความแตกต่างที่คุณสามารถดูที่สคริปต์
enzotib

@enzotib ใช่ฉันอ่านมาแล้วadduserแต่ฉันไม่เข้าใจภาษา Perl นั่นไม่ใช่วิธีที่ดีสำหรับฉัน
MountainX-for-Monica

คำตอบ:


14

วิธีการแก้ปัญหาของฉันถูกให้มาที่นี่: /unix/82923/proper-way-to-add-a-user-account-via-bash-script โดยอูล Schwarzและโจเซฟอาร์ สิ่งสำคัญที่ฉันต้องทำคือเพิ่มคำสั่ง-s /bin/bashที่มีอยู่ของฉันuseraddและลบ-p passwordซึ่งคาดว่ารหัสผ่านที่เข้ารหัส

sudo su -c "useradd mynewuser -s /bin/bash -m -g $PRIMARYGRP -G $MYGROUP"

จากนั้นทำสิ่งนี้:

sudo chpasswd << 'END'
mynewuser:password
END

6
echo mynewuser:password | sudo chpasswdทำงานเกินไป
เฟลิกซ์ Rabe

10

สิ่งนี้จะได้ผล

sudo adduser myuser --gecos "First Last,RoomNumber,WorkPhone,HomePhone" --disabled-password
echo "myuser:password" | sudo chpasswd

นี่เป็นวิธีที่ง่ายกว่าคำตอบที่ยอมรับ
Steven

2

สคริปต์ของฉันซึ่งสร้างบัญชีบริการโดยอัตโนมัติด้วยการเข้าสู่ระบบคีย์ ssh และไม่มีรหัสผ่าน

#add service group/user
addgroup service-runner
useradd devops-service --create-home --shell /bin/bash --groups service-runner
#gpasswd -a devops-service sudo #allowing sudo requires password, and not a good idea for a service account.
mkdir /home/devops-service/.ssh
chmod 700 /home/devops-service/.ssh
cat devops-service@v2-20150312.pub >> /home/devops-service/.ssh/authorized_keys
chown devops-service:devops-service /home/devops-service -R

fyi หลังจากใช้สคริปต์ของฉันฉันเห็นว่า "sudo" ไม่มีประโยชน์อะไรมากกับบัญชีบริการเนื่องจากไม่มีรหัสผ่านหมายความว่ามันไม่สามารถใช้ sudo ได้ คุณสามารถกำหนดค่าให้อนุญาต sudo ไม่มีรหัสผ่านผ่าน visudo แต่ฉันไม่ทราบวิธีการที่อัตโนมัติในสคริปต์ นอกจากนี้อาจเป็นบัญชีบริการที่ไม่มีรหัสผ่าน sudo ไม่ใช่แนวคิด (ความปลอดภัย) ที่ดี
JasonS

0

ฉันคิดว่าคุณสามารถใช้เงื่อนไขในสคริปต์ของคุณบางอย่างเช่น

if grep -q 'Ubuntu\|Debian' /etc/issue; then
    adduser .....
else
    useradd .....
fi

(ไม่สามารถตรวจสอบได้ว่าไฟล์/etc/issueนั้นมีอยู่ใน OpenSUSE หรือไม่คุณสามารถกำหนดเงื่อนไขการมีอยู่ของไฟล์นั้นได้)


ทำไมไม่ทดสอบเพียงว่าadduserมีif command -v adduser >/dev/null; thenหรือชอบอยู่? นั่นเป็นสิ่งเดียวที่สำคัญและไม่ใช่การแจกแจงพื้นฐาน นอกจากนี้ยังมีการแจกแจงอื่น ๆ นอกเหนือจาก Debian / Ubuntu และ OpenSUSE
David Foerster
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.