ฉันจะเปลี่ยนชื่อผู้ใช้ยูนิกซ์ได้อย่างไร?


89

ฉันมีชื่อผู้ใช้hedgehogและฉันต้องการให้เขาตั้งชื่อsquirrelแต่ฉันไม่ต้องการเปลี่ยน ID ผู้ใช้ที่เป็นตัวเลขของเขา
ฉันจะทำสิ่งนี้ได้อย่างไร


2
อาจเป็นเพราะการเปลี่ยนชื่อผู้ใช้ไม่ใช่งานที่ SA มืออาชีพต้องเผชิญ (สำหรับ downvotes คำถาม)
HopelessN00b

2
@Jeznet ฉันลงคะแนนเพราะไม่เพียง แต่เป็นงานง่ายอย่างเหลือเชื่อที่สามารถแก้ไขได้ด้วยการพิมพ์ชื่อของคุณลงใน google คุณยังตอบคำถามของคุณเองทันทีที่คุณถาม ดูเหมือนจะเสียเวลา
boburob

10
@boburob "คุณตอบคำถามของคุณเองทันทีที่คุณถามมันดูเสียเวลา" โปรดดู: blog.stackoverflow.com/2011/07/…
Szymon Jeż

10
@boburob คุณเห็นกล่องทำเครื่องหมายที่ระบุว่าAnswer your own question – share your knowledge, Q&A-styleเมื่อคุณถามคำถาม? มันอยู่ที่นั่นด้วยเหตุผลและจะไม่อยู่ที่นั่นถ้าพวกเขาไม่ต้องการใช้มัน (เป็นการดีสำหรับคำถามที่ดีกว่า แต่ไม่คำนึงถึงการ downvoting ใครบางคนสำหรับการตอบคำถามของตัวเองนั้นเป็นรูปแบบที่ไม่ดี)
HopelessN00b

1
ใช่ฉันยังได้ตอบคำถามของฉันเองก่อนหน้านี้ แต่ให้ฉันถามคำถามและวางผลลัพธ์ google ในนาทีเดียวกันเป็นการเสียเวลา
เล็กน้อย

คำตอบ:


133

ภายใต้ Linux usermodคำสั่งจะเปลี่ยนชื่อผู้ใช้ มันแก้ไขไฟล์บัญชีระบบเพื่อสะท้อนถึงการเปลี่ยนแปลงที่ระบุไว้ในบรรทัดคำสั่ง

หากต้องการเปลี่ยนเฉพาะชื่อผู้ใช้:

usermod --login new_username old_username

วิธีเปลี่ยนชื่อผู้ใช้และชื่อโฮมไดเรกทอรี:

usermod --login new_username --move-home --home path_to_the_new_home_dir old_username

คุณอาจต้องการเปลี่ยนชื่อของกลุ่มที่เกี่ยวข้องกับผู้ใช้:

groupmod --new-name new_username old_username

12
คุณสามารถใช้ usermod เพื่อทำสิ่งต่าง ๆ กับ usermod -l new-user-name -m -d / new / home / dir old-user-name
user9517

5
โปรดทราบว่ากลุ่มจะไม่เปลี่ยนแปลงเช่นกัน หากคุณจำเป็นต้องเปลี่ยนชื่อกลุ่มเป็นอย่างดีใช้old-user-name # groupmod -n new-user-name old-user-name
alxs

1
สำหรับระบบที่ใช้autofsคุณควรอัปเดต/etc/auto.homeด้วย ฉันเพิ่งพบเจอสิ่งนี้
Steven C. Howell

2
อาจต้องเรียกใช้ visudo อีกครั้งเพื่อใส่ชื่อผู้ใช้ใหม่ในรายการ sudoers ถ้ามี
Nagev

2
นอกจากนี้คุณยังจะต้องเปลี่ยนชื่อไฟล์ crontab ตั้งอยู่ใน/var/spool/cron/crontabs/(ถ้าคุณมีงานใด ๆ ติดตั้ง)
แดเนียล F

12

หมายเหตุ:อย่าลองทำสิ่งนี้ถ้าไดเรกทอรีของคุณถูกเข้ารหัส! หากเป็นกรณีของคุณคุณอาจต้องการตรวจสอบก่อน: https://askubuntu.com/questions/107410/can-you-unencrypt-remove-encrypt-from-a-user-home-folder

วิธีการทำสิ่งนี้คือ:

  1. สร้างบัญชีชั่วคราวที่มีสิทธิ์ sudo:

    sudo adduser temp
    sudo adduser temp sudo
    
  2. ออกจากระบบบัญชีปัจจุบันของคุณและกลับเข้ามาใหม่ด้วยบัญชีชั่วคราว

  3. เปลี่ยนชื่อผู้ใช้และไดเรกทอรีของคุณ:

    sudo usermod -l new-username -m -d /home/new-username old-username
    
  4. เปลี่ยนชื่อกลุ่มเริ่มต้นชื่อผู้ใช้ของคุณ:

    sudo groupmod -n new-username old-username
    
  5. ออกจากระบบบัญชีชั่วคราวและกลับเข้าสู่บัญชีของคุณด้วยชื่อผู้ใช้ใหม่

  6. ลบบัญชีชั่วคราว:

    sudo userdel -r temp
    

มิฉะนั้นคุณเพียงแค่ (1) สร้างผู้ใช้ใหม่และ (2) rsyncโฟลเดอร์บ้านของผู้ใช้เก่าไปยังใหม่และ (3) chownมัน


ใน CentOS ฉันยังต้องการที่จะ `passwd temp 'และ' usermod -aG wheel temp '
Brian Z

4

โดยทั่วไปคุณสามารถเปลี่ยนชื่อผู้ใช้โดยเปลี่ยนชื่อผู้ใช้ในไฟล์/etc/passwd(และ/etc/shadowถ้ามี) ในระบบยูนิกซ์ส่วนใหญ่vipwคำสั่งจะใช้ในการแก้ไขไฟล์เหล่านี้ (และในหลาย ๆ ระบบจะมีระบบป้องกันเพื่อให้แน่ใจว่าคุณจะไม่ทำสิ่งที่ไม่ดีเกินไป)
ดูหน้าคนสำหรับpasswd(5), shadow(5)และvipw(8)สำหรับข้อมูลเพิ่มเติม

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


ระบบปฏิบัติการหลายระบบมีวิธีการเปลี่ยนชื่อผู้ใช้เฉพาะระบบ ยกตัวอย่างเช่นระบบ Linux จำนวนมากรวมถึงusermod(8)คำสั่งและบน AIX คุณสามารถเปลี่ยนชื่อบัญชีใช้SMIT (หรือsmittyในสถานี)
คำสั่งเหล่านี้มักจะจัดการรายการล้างข้อมูลเช่นเปลี่ยนชื่อโฮมไดเรกทอรีถ้าคุณขอให้

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