ไม่ได้สร้างโฮมไดเรกทอรี


80

ฉันกำลังพยายามทำความเข้าใจกับการดูแลระบบบน Ubuntu ตัวอย่างเช่นฉันสร้างผู้ใช้จำลองโดยใช้

sudo useradd -d /home/linda linda

และpasswdเพื่อสร้างรหัสผ่าน ฉันตรวจสอบว่ามีการใช้รายการcat /etc/passwd

linda:x:1004:1004::/home/linda:/bin/sh

อย่างไรก็ตามเมื่อฉันsu - lindaฉันได้รับ

No directory, logging in with HOME=/

และแน่นอนไม่มีการสร้างโฮมไดเรกทอรี ฉันพลาดอะไรไป

ขอบคุณ

คำตอบ:


87

man useradd สหรัฐฯ:

useradd is a low level utility for adding users. On Debian,
administrators should usually use adduser(8) instead.

หมายเหตุ low level utility

ในการเพิ่มผู้ใช้ให้ใช้adduserแทน มันเป็นยูทิลิตี้ระดับสูงมากขึ้น


ยิ่งกว่านั้นดูที่-dตัวเลือก:

   -d, --home HOME_DIR
       The new user will be created using HOME_DIR as the value for the
       user's login directory. The default is to append the LOGIN name to
       BASE_DIR and use that as the login directory name. The directory
       HOME_DIR does not have to exist but will not be created if it is
       missing.

The directory will not be created if it is missing.

โดยทั่วไปให้ห่างจากuseraddใช้งานadduserแทน


2
ในการป้องกันของ OP เมื่อฉันอ่าน "On Debian" ฉันคิดว่ามันมีความหมายกับ Debian ซึ่งต่างจาก Ubuntu distros ฉันรู้ว่าอูบุนตูสร้างบนเดเบียน แต่คิดว่ามีความแตกต่าง
Keith Bennett

1
ฉันใช้adduserแต่ยังคงไดเรกทอรีบ้านที่สร้างขึ้นมีเพียงไฟล์examples.desktopและไม่มีอะไรอื่น ฉันจะให้อูบุนตูสร้างโฟลเดอร์เริ่มต้นบนเดสก์ท็อปดาวน์โหลดและอื่น ๆ ได้อย่างไร (ฉันลงชื่อเข้าใช้ผ่าน ssh)
mcExchange

สวัสดีการตอบกลับช้าและคาดเดาเท่านั้น แต่ฉันคิดว่าโฟลเดอร์เหล่านั้นจะถูกสร้างขึ้นโดยอัตโนมัติในการเข้าสู่ระบบ GUI ครั้งแรก แค่คิดว่าคนยังอาจที่ดินที่นี่;)
derHugo

adduserจะไม่สร้างไดเรกทอรีหากใครบางคนเปลี่ยน CREATE_HOME ใน /etc/login.defs เป็น "no" คุณสามารถลบล้างสิ่งนี้ด้วยการ-mตั้งค่าสถานะ
Noumenon

31

คุณสามารถแก้ไขสิ่งนี้ได้ง่ายๆเพียงสร้าง dir ที่บ้าน

mkdir /home/linda
chown linda:linda /home/linda

ลองเข้าสู่ระบบอีกครั้งและสิ่งนี้จะใช้ได้


13

ตามด้วยman useradd, -d /home/lindaตัวเลือกที่จะไม่สร้างไดเรกทอรี/home/lindaถ้าเป็นที่ขาดหายไป ดังนั้นคุณต้องสร้างมันขึ้นมาเอง หากต้องการทำสิ่งนี้ให้รันคำสั่งต่อไปนี้ในเทอร์มินัล:

sudo -i                            #to get root privileges
mkdir /home/linda                  #to create the directory /home/linda
cp -rT /etc/skel /home/linda         #to populate /home/linda with default files and folders
chown -R linda:linda /home/linda   #to change the owner of /home/linda to user linda

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


7

ดู/etc/defaults/useraddว่าคุณต้องการเปลี่ยนค่าเริ่มต้นหรือไม่ ใช้:

useradd -m -d /home/joe -s /bin/bash.


"ตามด้วย man useradd ตัวเลือก -d / home / linda จะไม่สร้างไดเรกทอรี / home / linda" ดังนั้นไม่นี่ไม่ใช่วิธีแก้ปัญหา
astrojuanlu

ตามหน้า man useradd นั่นคือสิ่งที่แฟ-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. useradd will create the home directory unless CREATE_HOME in /etc/login.defs is set to no.ล็ก-m ใช้สำหรับ: @astrojuanlu
Myles

5

นอกจากนี้คุณยังสามารถปรับเปลี่ยน/etc/pam.d/common-sessionเพื่อสร้างไดเรกทอรีบ้านของผู้ใช้ในการเข้าสู่ระบบครั้งแรกเพิ่มบรรทัดต่อไปนี้ในไฟล์นั้น

...
session required pam_mkhomedir.so

สิ่งนี้มีประโยชน์อย่างยิ่งหากระบบของคุณอยู่ในเครือข่ายที่ผู้ใช้ได้รับการจัดการจากเครื่องของคุณจาก LDAP เช่นภายนอก


5

ใช้-mแทน-dดังนั้นไดเรกทอรีจะถูกสร้างขึ้นสำหรับคุณ:

sudo useradd -m linda

นอกจากนี้หากlindaเป็นผู้ใช้ปกติคุณอาจต้องการให้เธอใช้/bin/bashเป็นค่าเริ่มต้นshell:

sudo useradd -m linda -s /bin/bash


3

เพิ่มรายการด้านล่างใน/etc/login.defsและบันทึก:

CREATE_HOME yes

ตอนนี้ลองสร้างบัญชีผู้ใช้ มันจะสร้างไดเรกทอรีบ้าน


มันใช้งานได้สำหรับฉัน ฉันต้องมีสคริปต์พื้นฐานที่จะเพิ่ม / จัดการผู้ใช้จากระยะไกลบนรสชาติที่แตกต่างของ Linux หลังจากการเปลี่ยนแปลงรหัสของฉันให้ผลลัพธ์เดียวกันบนเซิร์ฟเวอร์ทั้งหมด ขอบคุณ
sdkks

1

adduserใช้

DESCRIPTION

 adduser  and  addgroup  add users and groups to the system according to
   command    line    options    and    configuration    information    in
   /etc/adduser.conf.   They  are  friendlier  front ends to the low level
   tools like useradd, groupadd and usermod programs, by default  choosing
   Debian  policy conformant UID and GID values, creating a home directory
   with skeletal configuration, running a custom script,  and  other  fea
   tures.  adduser and addgroup can be run in one of five modes:

useraddคุณต้องเพิ่มตัวเลือกทั้งหมดด้วยตัวคุณเอง รวมถึงสิทธิ์และสิ่งอื่น ๆ adduserทำสิ่งนี้ตามค่าเริ่มต้นที่มีสติ (และยังเพิ่ม dir ที่บ้านด้วยตัวเอง)

หากคุณต้องการใช้ adduser คุณอาจต้องใช้ตัวเลือก -b พร้อมกับตัวเลือก -d!


1

ถ้าไม่ได้เป็นปัจจุบันก่อนที่จะเพิ่มลินดาเป็นผู้ใช้คุณก็จะต้องมีการเพิ่ม/home/linda--create-home

sudo useradd --create-home linda

1

เหตุผลส่วนใหญ่เหตุผลที่คุณไม่ได้มีไดเรกทอรีบ้านที่สร้างขึ้นเป็นเพราะคุณไม่ได้มีในCREATE_HOME yes/etc/login.defs

คุณสามารถแก้ไขได้โดยทำตามสิ่งที่ @OmPS หรือ @Radu Rădeanuแนะนำ

แต่วิธีการมากมายที่จะเอาชนะปัญหานี้ในอนาคตโดยใช้หนึ่งในคำสั่งด้านล่าง:

  • ผลลัพธ์ของ sudo adduser linda

    Adding user 'linda'
    Adding new group 'linda' (1001) ...
    Adding new user 'linda' (1001) with group 'linda' ...
    Creating home directory '/home/linda' ...
    Copying files from '/etc/skel' ...
    ****Password confirmation****
    ****Name prompt****

    ค่าเริ่มต้นสำหรับผู้ใช้จะถูกเลือกจาก/etc/adduser.confหาก --homeไม่ได้ระบุตัวเลือก โปรดทราบว่ามันยังคัดลอก/etc/skelเนื้อหา

  • ใช้ adduser ด้วย --home

    sudo adduser --home /home/linda

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

  • ระบุไดเรกทอรีฐานuseraddคำสั่ง:

    sudo useradd -b /home
  • ใช้ login.defs: แก้ไข/etc/login.defsและเพิ่มบรรทัดด้านล่างก่อนทำsudo useradd:

    CREATE_HOME   yes

หมายเหตุ: ถ้าคุณทำman login.defsมันขณะนี้พูดว่า

การทำงานส่วนใหญ่ที่เคยมีให้ในชุดรหัสผ่านเงาจะถูกจัดการโดย PAM ดังนั้น /etc/login.defs จะไม่ถูกใช้โดย passwd (1) หรือใช้น้อยกว่าโดยการล็อกอิน (1) และ su (1) โปรดอ้างอิงถึงไฟล์กำหนดค่า PAM ที่เกี่ยวข้องแทน

  • ใช้โมดูล pam_mkhomedir PAM: จากman pam_mkhomedirหน้าเพิ่มบรรทัดด้านล่างเพื่อ/etc/pam.d/login:

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