เพิ่มผู้ใช้ไปยังระบบ * หากไม่มีอยู่ *


47

ฉันใช้useradd {user}คำสั่งเพื่อเพิ่มผู้ใช้ในระบบของฉันแม้ว่าฉันจะวางแผนในการใช้งานในสภาพแวดล้อมอัตโนมัติและมันอาจจบลงด้วยการเรียกใช้อีกครั้งแม้ว่าผู้ใช้จะมีอยู่แล้ว

มีวิธีที่ฉันสามารถใช้งานได้เฉพาะในกรณีที่ผู้ใช้ยังไม่มีอยู่? ผู้ใช้ไม่มีโฟลเดอร์บ้าน


adduserเป็นที่ต้องการโดยทั่วไปในระบบ Debian / Ubuntu
Faheem Mitha

@FaheemMitha ในสคริปต์อัตโนมัติน่าจะดีกว่าถ้าใช้สคริปต์ที่สอดคล้องกันมากกว่าuseraddนี้
ผู้ชายกับหมวก

คำตอบ:


69

id -u somename ส่งคืนโค้ดออกที่ไม่เป็นศูนย์เมื่อผู้ใช้ไม่มีอยู่

คุณสามารถทดสอบได้ง่าย ๆ ... ( &>/dev/nullเพียงแค่เอาท์พุท / คำเตือนปกติ)

id -u somename &>/dev/null || useradd somename 

1
ด้วยวิธีพกพา: "id -u somename> / dev / null 2> & 1 || useradd somename"
อุโมงค์

13

ลองนี้:

useradd {user} || echo "User already exists."

หรือแม้กระทั่งสิ่งนี้:

useradd {user} || true

สิ่งนี้จะบันทึกการตรวจสอบเนื่องจากจะล้มเหลวอย่างปลอดภัยหากผู้ใช้มีอยู่แล้ว
CoverosGene

8

หากคุณมีระบบเพียงไม่กี่ระบบคุณกำลังถามคำถามผิด คำตอบคือไม่เรียกใช้ useradd เลย แต่ปล่อยให้งานนี้เป็นโซลูชันการจัดการการกำหนดค่าเช่นหุ่นเชิดหรือพ่อครัว สิ่งนี้จะทำให้คำจำกัดความผู้ใช้ของคุณถูกรวมศูนย์และป้องกันไม่ให้คุณเรียกใช้ลูปและการใช้ ssh กับผู้ใช้รูทเพื่อกำหนดค่าระบบของคุณ คุณจะมีระบบในสถานะการกำหนดค่าที่รู้จักเสมอ

เอกสารสำหรับหุ่นสามารถดูได้ที่http://docs.puppetlabs.com

เป็นตัวอย่างในหุ่นเชิด:

user { "bob" : 
  password   => "$1$yv3n066X$Vpb05Ac/fHTicNdT9T5vz1", # generated with `openssl passwd -1`
  ensure     => present,                              # ensure => absent to remove
  managehome => true,
}

4
หุ่นกระบอกเป็นโครงการที่ดี แต่คุณไม่สามารถทำให้สมมติฐานเกี่ยวกับสิ่งที่ OP เป็นจริงขอให้ :)
rahmu

1
OP อธิบายเป้าหมายอย่างชัดเจน - อัตโนมัติและสามารถทำงานได้อีกครั้งแม้ว่าผู้ใช้จะมีอยู่ (idempotency) นี่คือกรณีการใช้งานที่แน่นอนสำหรับเครื่องมือการจัดการการกำหนดค่า เมื่อมีคนไม่ทราบว่ามีเครื่องมืออยู่แล้วในการแก้ปัญหาเหล่านี้พวกเขามักจะถามคำถามที่เกี่ยวข้องกับการแก้ปัญหาที่เฉพาะเจาะจงและมุ่งเน้นที่แคบเมื่อมีแนวคิดที่ใหญ่กว่าที่จะเข้าใจ
Aaron Brown

ฉันใช้ Chef อยู่แล้ว
tarnfeld

1
เชฟจะเพิ่มผู้ใช้เฉพาะเมื่อไม่มีผู้ใช้อยู่ นั่นคือสิ่งที่ idempotency ดังนั้นฉันไม่เข้าใจคำถาม (ตอนนี้ 1.5 ปี)
Aaron Brown

4

useradd จะไม่เพิ่มผู้ใช้อีกครั้งหากมีอยู่แล้วตั้งใจที่จะตรวจสอบให้แน่ใจว่าหมายเลข uid และการเข้าสู่ระบบ uid ไม่ซ้ำกัน หากคุณวางแผนที่จะเรียกใช้งานแบตช์ต้องแน่ใจว่า uids ที่ใช้นั้นไม่ซ้ำกัน useradd จะบ่นสำหรับรายการที่มีปัญหาและคุณต้องจับข้อผิดพลาด / stderr เพื่อดูว่าบัญชีผู้ใช้ใดมีปัญหาในการเข้าสู่ระบบบัญชี (/ etc / passwd, กลุ่ม, เงา)

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