สร้างโฮมไดเรกทอรีเริ่มต้นสำหรับผู้ใช้ที่มีอยู่ใน terminal


150

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


เมื่อผู้ใช้ล็อกอินไดเรกทอรีย่อยเหล่านั้น (เอกสารดาวน์โหลด ฯลฯ ... ) จะถูกสร้างขึ้นโดยอัตโนมัติ แม้ว่าฉันจะค้นหาวิธี "จำลอง" การล็อกอินของเขาผ่านเทอร์มินัล
Alaa Ali

@Alaa su new_user: D
Radu Rădeanu

1
@ RaduRădeanuใช่ฉันได้ลองแล้วลองอีกครั้งsudo -i -u new_userแต่มันใช้งานไม่ได้ ฉันคิดว่าเราต้อง "จำลองการเข้าสู่ระบบ X" ... ไม่รู้ว่าจะทำอย่างไร
Alaa Ali

2
การเข้าสู่ระบบไม่ได้สร้างไดเรกทอรีย่อยในบ้าน
Jo Rijo

คำตอบ:


230

ใช้สิ่งต่อไปนี้ (เป็น root หรือกับ sudo หากไม่ใช่ root):

mkhomedir_helper username

เพื่อให้ทำงาน/home/usernameได้ต้องไม่มีโฟลเดอร์อยู่

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


1
ง่ายและมีประโยชน์ วิธีนี้คุณสามารถมั่นใจได้ว่า dir บ้านที่สร้างขึ้นใหม่นั้นเป็นไปตามนโยบายระบบของคุณโดยไม่ต้องรู้จักพวกเขาหรือแก้ไขด้วยตนเอง
gerlos

นี่เป็นคำตอบที่ถูกต้องอย่างน้อยมันก็ใช้ได้กับฉันใน Ubuntu 14.04.2 LTS
Christian Wilkie

1
ฉันต้องมีชื่อผู้ใช้ของฉันใน / etc / passwd ก่อนที่สิ่งนี้จะใช้ได้สำหรับฉัน
user79878

3
ง่าย .. เพิ่งได้ผล (tm) ควรเป็นคำตอบที่ได้รับการยอมรับ
Newtopian

ls -l /homeอย่าลืมที่จะตรวจสอบสิทธิ์ของไดเรกทอรีที่มี ฉันพบว่าไดเรกทอรีใหม่ที่สามารถอ่านได้โดยผู้ใช้อื่น ๆ chmod go-r-x /home/usernameเพื่อให้ฉันออกสิทธิ์เหล่านั้นด้วย
Don Kirkby

33

ไดเรกทอรีย่อย (เอกสาร, การดาวน์โหลดและอื่น ๆ ... ) จะถูกสร้างขึ้นโดยอัตโนมัติเมื่อผู้ใช้ลงชื่อเข้าใช้ครั้งแรกผ่าน GNOME โดยมีการสร้างไดเรกทอรีหลักด้วยสิทธิ์ที่ถูกต้อง นี่คือการสาธิต:

alaa @ aa-lu: ~ $ sudo useradd testuser Alaa
 @ aa-lu: ~ $ sudo passwd testuser
ป้อนรหัสผ่าน UNIX ใหม่:
พิมพ์รหัสผ่าน UNIX ใหม่อีกครั้ง:
passwd: อัปเดตรหัสผ่านสำเร็จแล้ว
alaa @ aa-lu: ~ $ sudo ls -l / home
รวม 20
drwxr-xr-x 55 alaa alaa 4096 22 ส.ค. 22:00 น
drwx ------ 2 รูทราก 16384 มิ.ย. 5 09:46 หายไป + พบ
alaa @ aa-lu: ~ $ sudo mkdir / home / testuser Alaa
 @ aa-lu: ~ $ sudo chown testuser: testuser / home / testuser
 alaa @ aa-lu: ~ $ ls -l / home
รวม 24
drwxr-xr-x 55 alaa alaa 4096 22 ส.ค. 22:00 น
drwx ------ 2 รูทราก 16384 มิ.ย. 5 09:46 หายไป + พบ
drwxr-xr-x 2 ผู้ทดสอบ testuser 4096 ส.ค. 23 10:03 ผู้ทดสอบ
alaa @ aa-lu: ~ $ ls -l / home / testuser /
รวม 0
Alaa @ AA-Lu: ~ $

/etc/passwdคุณสามารถตรวจสอบว่าไดเรกทอรีบ้านของผู้ใช้ตั้งอย่างถูกต้องโดยการตรวจสอบรายการใน ตามค่าเริ่มต้นคุณควรดูโฮมไดเร็กตอรี่ที่ตั้งค่าเป็น/home/testinguser:

alaa @ aa-lu: ~ $ grep testuser / etc / passwd
testuser: x: 1001: 1001 :: / home / testuser : / bin / sh

หากคุณไม่เห็นโฮมไดเร็กตอรี่/home/testinguserนั้นคุณจะต้องดำเนินการคำสั่งsudo usermod -d /home/testinguser testinguserเพื่ออัปเดตแม้ว่าคุณจะไม่จำเป็นต้องใช้คำสั่งนี้เพราะมันควรจะตั้งค่าตามค่าเริ่มต้น (ตามuseraddmanpages ของ)

จากนั้นฉันออกจากระบบบัญชีของฉันและกลับเข้าสู่ระบบด้วยtestinguserและนี่คือไดเรกทอรีย่อยที่สร้างขึ้นโดยอัตโนมัติ:

alaa @ aa-lu: ~ $ ls -l / home / testuser /
รวม 36
drwxr-xr-x 2 ผู้ทดสอบ testuser 4096 ส.ค. 23 10:05 เดสก์ท็อป
drwxr-xr-x 2 ผู้ทดสอบการทดสอบ 4096 ส.ค. 23 10:05 เอกสาร
drwxr-xr-x 2 ผู้ทดสอบ testuser 4096 ส.ค. 23 10:05 ดาวน์โหลด
drwxr-xr-x 2 ผู้ทดสอบ testuser 4096 ส.ค. 23 10:05 เพลง
drwxr-xr-x 2 ผู้ทดสอบการทดสอบ 4096 ส.ค. 23 10:07 รูปภาพ
drwxr-xr-x 2 ผู้ทดสอบผู้ทดสอบ 4096 ส.ค. 23 10:05 สาธารณะ
drwxr-xr-x 2 ผู้ทดสอบการทดสอบ 4096 ส.ค. 23 10:05 เทมเพลต
drwxr-xr-x 2 ผู้ทดสอบ testuser 4096 ส.ค. 23 10:05 วิดีโอ

/etc/skelผมไม่จำเป็นต้องคัดลอกเนื้อหาของ

หากเป็นไปได้โปรดลองทำตามขั้นตอนเหล่านี้สร้างผู้ใช้ใหม่อีกคนหรือไม่ sudo deluser testinguser && sudo rm -r /home/testinguserเมื่อคุณทำคุณสามารถเอาผู้ใช้ใหม่นี้โดย

หากสิ่งทั้งหมดนี้ไม่ได้ผลกับคุณฉันคาดเดาว่ามันเป็นข้อผิดพลาด


ในสถานการณ์บางอย่างเมื่อคุณใช้ไดเรกทอรีบ้านเริ่มต้นสำหรับผู้ใช้ใหม่ไม่ได้ตั้งค่าโดยอัตโนมัติไปยังuseradd /home/usernameดังนั้น ypu แรกจะต้องแน่ใจเกี่ยวกับเรื่องนี้
Radu Rădeanu

คุณช่วยยกตัวอย่างสถานการณ์เหล่านี้ให้ฉันได้ไหม) จากหน้าคนของuseradd: "useradd จะใช้ไดเรกทอรีฐานที่ระบุโดยตัวแปร HOME ใน/etc/default/useraddหรือ/homeโดยค่าเริ่มต้น" ตัวแปรในบ้าน/etc/default/useraddไม่ได้กำหนดโดยค่าเริ่มต้นดังนั้น useradd /homeมักจะใช้ ยังไงก็ตามผมจะแก้ไขคำตอบของฉันและย้ายไปเป็นส่วนหนึ่งในการตรวจสอบ/etc/passwdขึ้น
Alaa Ali

ตัวอย่างที่นี่ ตัวอย่างอื่น: คุณลบผู้ใช้ แต่คุณไม่ได้ลบไดเรกทอรีและไฟล์ของเขา จากนั้นคุณเพิ่มผู้ใช้ที่มีชื่อเดียวกันอีกครั้ง และมีเป็นจำนวนมากและมีข้อบกพร่องใด ๆ :)
Radu Rădeanu

หากคุณไม่มี/bin/shในบรรทัดผู้ใช้/etc/passwdคุณต้องเพิ่มเชลล์สำหรับผู้ใช้นั้นเช่นเชลล์เริ่มต้นด้วยusermod -s /bin/sh testuser
rubo77

ไม่ใช่ว่าทุกระบบจะมี GNOME และแนะนำให้ผู้อื่นลบและเพิ่มผู้ใช้ใหม่เพื่อสร้างโฮมไดเร็กตอรี่เป็นคำแนะนำที่ไม่ดี
ntwrkguru

12

ปรับปรุง: การแก้ปัญหาเสียและไม่ทำงานสำหรับฉันเกินไป

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

useradd -m username

คุณอาจต้องกำหนดการตั้งค่าสำหรับระบบของคุณ ตามหน้าคน:

  -m, --create-home
    Create the user's home directory if it does not exist. The files and directories
    contained in the skeleton directory (which can be defined with the -k option)
    will be copied to the home directory.

    By default, if this option is not specified and CREATE_HOME is not enabled, no
    home directories are created.

และบ่งชี้เพิ่มเติม:

CONFIGURATION

   The following configuration variables in /etc/login.defs change the behavior
   of this tool:

   CREATE_HOME (boolean)
       Indicate if a home directory should be created by default for new users.

8
ดูเหมือนว่าจะพยายามสร้างผู้ใช้ใหม่เพราะบอกฉันว่า "ผู้ใช้ 'ผู้ใช้ใหม่มีอยู่แล้ว"
Jo Rijo

ฉันยังได้ทดสอบการ-mตั้งค่าสถานะเมื่อสร้างผู้ใช้ใหม่อย่างไรก็ตามมันไม่ทำงาน มันจะคัดลอกไฟล์ Skeleton เท่านั้น
Alaa Ali

@Jo: และวิธีนี้ไม่ถูกต้องเพราะตามโพสต์เริ่มต้นผู้ใช้ที่มีอยู่แล้ว
crafter

3
คำตอบนี้ไม่ได้แก้ปัญหา การคัดลอก/etc/skelไม่ได้สร้างไดเรกทอรีย่อยในโฮมไดเร็กตอรี่ นอกจากนี้ยังuseradd -mใช้เมื่อสร้างผู้ใช้ใหม่ไม่ใช่เมื่อเพิ่มผู้ใช้แล้ว
Alaa Ali

ฉันอัปเดตโพสต์ดังนั้นตั้ง CREATE_HOME เป็นใช่ในไฟล์ config.d logins
บ้า

5

หากคุณสร้างผู้ใช้ใหม่ด้วยadduserคำสั่งคุณไม่จำเป็นต้องสร้างโฮมไดเรกทอรีสำหรับผู้ใช้ใหม่ โฮมได/homeเร็กตอรี่ที่ชื่อด้วยชื่อของผู้ใช้ในไดเรกทอรี, ด้วยไดเรกทอรีย่อยต่อไปนี้: เดสก์ท็อป, ดาวน์โหลด, เอกสาร, เพลง, รูปภาพ, วิดีโอ (และอื่น ๆ ), สำหรับผู้ใช้ใหม่จะถูกสร้างขึ้นโดยอัตโนมัติ

หากคุณสร้างผู้ใช้ใหม่ด้วยuseraddคำสั่งให้รันคำสั่งต่อไปนี้ในเทอร์มินัล:

sudo -i     #enter your user password when you are asked
gedit /etc/passwd

เพื่อแก้ไข/etc/passwdไฟล์ในฐานะรูท (นี่เป็นขั้นตอนที่สำคัญที่สุด) ค้นหาบรรทัดด้วยชื่อของผู้ใช้ใหม่และตั้งค่าโฮมไดเร็กตอรี่เริ่มต้นสำหรับเขาดังนี้:

new_username:x:1001:1001::/home/new_username:/bin/sh

ในบรรทัดนี้คุณยังสามารถเพิ่มชื่อจริงสำหรับผู้ใช้ใหม่หรือตั้งค่าเปลือกเริ่มต้น บางสิ่งเช่นนี้

new_username:x:1001:1001:Real New Username,,,:/home/new_username:/bin/bash

ระวังอย่าทำการเปลี่ยนแปลงอื่น ๆ

หลังจากคุณบันทึกไฟล์ก่อนที่จะออกจากบัญชีรูทให้รันคำสั่งต่อไปนี้:

mkdir /home/new_username                                #to create the directory /home/new_username
cp -r /etc/skel/. /home/new_username                    #to copy skeleton files to /home/new_username
chown -R new_username:new_username /home/new_username   #to change the owner of /home/new_username to the new user

หลังจากทั้งหมดนี้โฮมโฟลเดอร์สำหรับผู้ใช้ใหม่จะถูกเติมโดยอัตโนมัติหลังจากเข้าสู่ระบบครั้งแรก

ดูเพิ่มเติม: วิธีสร้างโฟลเดอร์โฮมของผู้ใช้หลังจากการสร้างบัญชีได้อย่างไร


เท่าที่ฉันจำได้โฟลเดอร์โฮมไม่ได้ถูกสร้างขึ้นโดยอัตโนมัติคุณต้องสร้างมันขึ้นมาเองและอัพเดทรายการของผู้ใช้ใน/etc/passwd(ถ้ายังไม่มีอยู่) เมื่อผู้ใช้เข้าสู่ระบบโฟลเดอร์บ้านจะถูกเติมด้วยไดเรกทอรีย่อยเหล่านั้นโดยอัตโนมัติ ดูแลอย่างไรก็ตามทั้งหมดนี้จะนำมาเป็นของคนเพิ่มผู้ใช้ที่ใช้แทนadduser useradd
Alaa Ali

@Alaa ฉันเพิ่งทดสอบไม่กี่วันที่ผ่านมาและฉันใช้adduser: โฟลเดอร์บ้านถูกสร้างขึ้นโดยอัตโนมัติ และแน่นอนโฮมโฟลเดอร์จะถูกบรรจุโดยอัตโนมัติหลังจากเข้าสู่ระบบครั้งแรก
Radu Rădeanu

ดูเหมือนว่าจะไม่ทำอะไรเลยบางทีฉันจะลองใช้สคริปต์ทุบตีจากคำถามอื่น แต่ฉันไม่สามารถสร้างโฟลเดอร์ใน / home / ชื่อ new_user แล้วคัดลอกเนื้อหาของ / etc / skel ไปหรือไม่ นั่นคือสิ่งที่สคริปต์ทุบตีทำอะไร?
Jo Rijo

@JoRijo ฉันแก้ไขคำตอบของฉัน
Radu Rădeanu

@ RaduRădeanuคุณไม่ได้หมายถึงcp /etc/skel/* /home/new_usernameเหรอ? นอกจากนี้ยังมีเหตุผลที่คุณใช้สองchownคำสั่งติดต่อกันหรือไม่?
Alaa Ali

3

สิ่งที่คุณต้องการจริงๆคือโฟลเดอร์บ้านเพื่อให้ใช้งานได้ ในฐานะที่เป็นราก

cd /home
cd mkdir username
chown username username
chgrp username username

การลงชื่อเข้าใช้ด้วยครั้งแรกควรสร้างไฟล์ที่จำเป็นทั้งหมดซึ่งน่าจะเป็นไฟล์เหล่านั้น:

drwxr-xr-x 16 fotanus fotanus 4096 Jun  4 17:46 .
drwxr-xr-x  9 root    root    4096 Jun  4 17:43 ..
drwx------ 11 fotanus fotanus 4096 Jun  4 17:46 .cache
drwx------ 13 fotanus fotanus 4096 Jun  4 17:46 .config
drwxr-xr-x  2 fotanus fotanus 4096 Jun  4 17:45 Desktop
drwxr-xr-x  2 fotanus fotanus 4096 Jun  4 17:45 Documents
drwxr-xr-x  2 fotanus fotanus 4096 Jun  4 17:45 Downloads
drwx------  3 fotanus fotanus 4096 Jun  4 17:46 .gconf
drwxrwxr-x  2 fotanus fotanus 4096 Jun  4 17:46 .gstreamer-0.10
-rw-------  1 fotanus fotanus  334 Jun  4 17:45 .ICEauthority
drwxr-xr-x  3 fotanus fotanus 4096 Jun  4 17:45 .local
drwx------  4 fotanus fotanus 4096 Jun  4 17:45 .mozilla
drwxr-xr-x  2 fotanus fotanus 4096 Jun  4 17:45 Music
drwxr-xr-x  2 fotanus fotanus 4096 Jun  4 17:45 Pictures
drwxr-xr-x  2 fotanus fotanus 4096 Jun  4 17:45 Public
drwxr-xr-x  2 fotanus fotanus 4096 Jun  4 17:45 Templates
drwxr-xr-x  2 fotanus fotanus 4096 Jun  4 17:45 Videos
-rw-------  1 fotanus fotanus   55 Jun  4 17:45 .Xauthority
-rw-------  1 fotanus fotanus  711 Jun  4 17:45 .xsession-errors
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.