คำสั่งเพื่อเปลี่ยนโฮมไดเร็กทอรีเริ่มต้นของผู้ใช้


202

ฉันต้องการที่จะรู้ว่ามีคำสั่งเปลือกง่าย ๆ ในการเปลี่ยนไดเรกทอรีบ้านของผู้ใช้ใน Linux / Unix (หนึ่งคล้ายกับchshซึ่งเปลี่ยนเปลือกเข้าสู่ระบบเริ่มต้นของผู้ใช้ที่ถูกต้องที่มีอยู่) โดยไม่ต้องสัมผัส/etc/passwdไฟล์ ขอบคุณ


ทำไมคุณไม่ต้องการที่จะสัมผัส/etc/passwdไฟล์? คุณจะต้อง!
Basile Starynkevitch

11
stackoverflow.com/questions/20071714/… , กล่าวว่าusermod -d /home/userxx /home/useryyการเปลี่ยนไดเรกทอรีเข้าสู่ระบบเริ่มต้นของ linux เป็น / home / useryy
Ibrahim Quraish

2
ทำไมคุณถามเกี่ยวกับไดเรกทอรีบ้านเริ่มต้น คุณต้องการเปลี่ยนโฮมไดเร็กตอรี่ของผู้ใช้ที่มีอยู่หนึ่งคนหรือผู้ใช้ทั้งหมดที่เพิ่มในอนาคตหรือไม่? โปรดสังเกตว่าchshจะไม่เปลี่ยนเปลือกเข้าสู่ระบบเริ่มต้นแต่เพียงเปลือกเข้าสู่ระบบของผู้ใช้ที่กำหนด ... ในการเปลี่ยนHOMEของผู้ใช้เฉพาะเพียงแก้ไข/etc/passwd
Basile Starynkevitch

คำตอบ:


350

ความคิดเห็นของ Ibrahim เกี่ยวกับคำตอบอื่น ๆ เป็นวิธีที่ถูกต้องในการเปลี่ยนไดเรกทอรีบ้านของผู้ใช้ที่มีอยู่

เปลี่ยนโฮมไดเร็กตอรี่ของผู้ใช้:

usermod -d /newhome/username username

usermodเป็นคำสั่งให้แก้ไขผู้ใช้ที่มีอยู่
-d(ตัวย่อสำหรับ--home) จะเปลี่ยนไดเรกทอรีบ้านของผู้ใช้

เปลี่ยนโฮมไดเรกทอรีของผู้ใช้ + ย้ายเนื้อหาของไดเรกทอรีปัจจุบันของผู้ใช้:

usermod -m -d /newhome/username username

-m(ตัวย่อสำหรับ--move-home) จะย้ายเนื้อหาจากไดเรกทอรีปัจจุบันของผู้ใช้ไปยังไดเรกทอรีใหม่


1
ไม่เพียง แต่ย้ายเนื้อหาฉันเห็นมันมากขึ้นเช่นย้ายทั้งโฟลเดอร์ = โฟลเดอร์เดิม ( /home/usernameโดยทั่วไป) ถูกลบออก
Betlista

2
@STW นี่เป็นภารกิจที่สามารถย้อนกลับได้หรือไม่? หมายความว่าถ้าฉันเรียกใช้ครั้งเดียวแล้วพลิกพารามิเตอร์ไดเรกทอรีบ้านของฉันจะเป็นอย่างที่มันเคยเป็นมาก่อนหรือไม่?
DanGordon

1
@DanGordon สิ่งที่คุณใส่ใน/newhome/usernameอาร์กิวเมนต์จะเป็นไดเรกทอรีบ้านของผู้ใช้ คุณสามารถตั้งค่ากลับไปเป็นโฮมไดเร็กตอรี่ก่อนหน้าของคุณถ้าคุณรู้ว่ามันคืออะไร, แต่ไม่มีตัวเลือก "เลิกทำ"
STW

3
ลำดับของตัวเลือกสำหรับคำสั่งที่สองนั้นไม่ถูกต้อง usermod -m -d /newhome/username usernameโรงงาน
Snozzlebert

@ Dominik ขอบคุณ - มีโอกาสแตกต่างกันไปตามระบบปฏิบัติการ (Mac vs Linux เทียบกับ BSD ฯลฯ ) แน่นอนว่ามันอาจไม่ถูกต้องด้วย
STW

28

จากLinux เปลี่ยนไดเรกทอรีเริ่มต้นของผู้ใช้ในขณะที่เพิ่มผู้ใช้ใหม่ :

เพียงเปิดไฟล์นี้โดยใช้เครื่องมือแก้ไขข้อความประเภท:

vi /etc/default/useradd

โฮมไดเร็กทอรีเริ่มต้นที่กำหนดโดยตัวแปร HOME ค้นหาบรรทัดที่อ่านดังนี้:

HOME=/home

แทนที่ด้วย:

HOME=/iscsi/user

บันทึกและปิดไฟล์ ตอนนี้คุณสามารถเพิ่มผู้ใช้โดยใช้คำสั่ง useradd ปกติ:

# useradd vivek
# passwd vivek

ยืนยันข้อมูลผู้ใช้:

# finger vivek

82
usermod -m -d /path/to/new/login/home/dir user เปลี่ยนโฮมไดเร็กทอรีผู้ใช้ปัจจุบันเป็นไดเร็กทอรีล็อกอินใหม่ซึ่งสร้างขึ้นหากยังไม่มีอยู่ option -m ย้ายเนื้อหาของโฮมไดเร็กทอรีปัจจุบันไปยังโฮมไดเร็กต์ใหม่
Ibrahim Quraish

23

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

sudo usermod -d /newhome/username -m username

คุณไม่จำเป็นต้องสร้างโฟลเดอร์ด้วยชื่อผู้ใช้และสิ่งนี้จะย้ายไฟล์ของคุณจากโฟลเดอร์ผู้ใช้เริ่มต้นไปที่ / โฟลเดอร์ใหม่ / ชื่อผู้ใช้


4

ในกรณีที่ผู้อ่านรายอื่นค้นหาข้อมูลเกี่ยวกับadduserคำสั่ง

แก้ไข /etc/adduser.conf

ตั้งค่าDHOMEตัวแปร


0

พบว่าสิ่งนี้ทำให้แอปพลิเคชั่นบางตัวขาดวิธีที่ดีกว่า

นอกเหนือจาก symlink ใน distros และระบบไฟล์ล่าสุดแล้วในขณะที่ root คุณสามารถใช้ bind-mount:

mkdir /home/username 
mount --bind --verbose /extra-home/username /home/username

สิ่งนี้มีประโยชน์สำหรับการอนุญาตการเข้าถึง "ถึง" ไดเร็กทอรี / home เพื่อย่อยผ่าน daemons ที่ถูกกำหนดคอนฟิกไว้เพื่อหลีกเลี่ยงการพา ธ ผ่าน symlink (apache, ftpd, ฯลฯ )

คุณต้องจำ (หรือสคริปต์เริ่มต้น) เพื่อผูกเมื่อเริ่มใหม่แน่นอน

ตัวอย่างสคริปต์เริ่มต้นใน/etc/fstabคือ

/extra-home/username /home/username none defaults,bind 0 0

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