ฉันจะเมานต์แชร์ CIFS ได้อย่างไร


64

ฉันใช้ Ubuntu 11.10 และพยายามเมานต์เซิร์ฟเวอร์ freenas ฉันมีชุดเซิร์ฟเวอร์ให้แชร์ในcifsและnfsโดยไม่มีโชค

ฉันเหนื่อย smbmount //192.168.1.### /mnt/

ฉันไม่ใช่คนใหม่ของ Ubuntu แต่ตอนนี้ไม่มีผู้ใช้ระดับสูงแล้วดังนั้นฉันจึงต้องการตัวเลือก GUI หากมี

ฉันจะเมาแชร์cifsใน 11.10 ได้อย่างไร

คำตอบ:


88

มีpyNe Neighborhoodซึ่งเป็น gui สำหรับติดตั้ง samba ที่ใช้ร่วมกันและมีอยู่ในศูนย์ซอฟต์แวร์เพื่อดาวน์โหลด

มีบทความที่ดีอยู่ที่นี่เกี่ยวกับวิธีการตั้งค่าและใช้งาน

ติดตั้ง cifs utils เป็นครั้งแรก

sudo apt-get install cifs-utils

หรือมิฉะนั้นคำสั่งเทอร์มินัลพื้นฐานคือ:

mount -t cifs -o username=USERNAME,password=PASSWD //192.168.1.88/shares /mnt/share

หากคุณต้องการเห็นเมานต์ของคุณใน Nautilus การสร้างโฟลเดอร์ย่อยเป็นอันดับแรกใน / media / USERNAME / ตัวอย่างเช่น:

mkdir /media/paul/cifsShare

เช่นกันรหัสผ่านสามารถ ommited ในคำสั่ง mount เช่น (จะสาธิตโหมดไฟล์ / โฟลเดอร์):

sudo mount -t cifs //nas-server/cifsShare /media/paul/cifsShare -o username=paulOnNAS,iocharset=utf8,file_mode=0777,dir_mode=0777,soft,user,noperm

ในกรณีนี้คุณจะถูกถามถึงรหัสผ่าน (จริง ๆ แล้วเป็นรหัสผ่าน 2 ตัว) ในช่วงเวลาที่ติดตั้ง

อ่านเอกสารแซมบ้าที่นี่เกี่ยวกับวิธีการทำและตั้งค่าอย่างถูกต้องเพื่อติดตั้งเมื่อเริ่มต้น ฯลฯ


2
มีวิธีการติดตั้งแซมบ้าที่ใช้ร่วมกันโดยไม่ต้อง 1) เข้ารหัสรหัสผ่านอย่างหนักและ 2) ต้องเป็นรูตหรือไม่?
mcExchange

1
@mcExchange ต้องใช้รูทและคุณสามารถใช้ไฟล์ข้อมูลประจำตัวของ smb เพื่อปกป้องข้อมูลประจำตัวของคุณได้
adampski

4
นอกจากนี้ยังให้แน่ใจว่าคุณได้ติดตั้ง:cifs-utils sudo apt-get install cifs-utilsสำหรับข้อมูลเพิ่มเติมเอกสารช่วยเหลือของ Ubuntuนี้ยอดเยี่ยม
Marco Pashkov

1
pyNe Neighborhood ให้ข้อผิดพลาดในการแบ่งเซ็กเมนต์เมื่อฉันเริ่มต้นใหม่ ssh ในอูบุนตู 14.04
Pavel Niedoba

1
@MarcoPashkov cifs-utilsคือสิ่งที่ทำให้ฉันตื่นขึ้นมา สิ่งนี้จะไม่ทำงาน ควรรวมไว้ในคำตอบโดยตรง
rubynorails

13

เป็นไปตามที่ map7 พูด แต่ถ้าคุณไม่ต้องการใช้การอนุญาตรูททุกครั้งที่คุณเปลี่ยนไฟล์บนไดรฟ์คุณจะต้องเมานต์ไปที่โฟลเดอร์ผู้ใช้และตรวจสอบให้แน่ใจว่า gid และ uid ถูกตั้งเป็นชื่อผู้ใช้ของคุณ .

คำสั่งตั้งค่าพวกเขา:

mount -t cifs -o username=USERNAME,password=PASSWD,uid=$USER,gid=$USER //192.168.1.88/shares ~/mnt/share

โปรดทราบว่าmntโฟลเดอร์ถูกสร้างขึ้นในแทน~/mnt/share/mnt/share

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

mount -t cifs -o username=USERNAME,uid=$USER,gid=$USER //192.168.1.88/shares ~/mnt/share

1
ให้คำตอบที่สมบูรณ์ยิ่งขึ้นด้วยตัวอย่างบางส่วนและฉันจะโหวตขึ้น :)
พายุ

5

1) แซมบ้าแชร์ของฉันแสดงใน Caja (the Ubuntu 16.04„ explorer“) as

smb://thinkpad/ddrive/

นี่คือการทดสอบ lithmus ที่ดีไม่มีปัญหาการเชื่อมต่อ / เส้นทาง

( ข้อแม้ : ถ้าคุณถูกถามโดย caja เกี่ยวกับข้อมูลประจำตัวของรหัสผ่านจากเครื่อง windows ของคุณคุณอาจต้องการเปลี่ยนโดเมนจาก WORKGROUP เป็นชื่อของเครื่องเช่น 'thinkpad' จากนั้นข้อมูลประจำตัวในการเข้าสู่ระบบภายในเครื่องของคุณควรเป็นจริง)

2) ถ้าใช้งานได้คำสั่งจะมาที่นี่:

sudo mount -t cifs -o username=frank //thinkpad/ddrive /mnt/ddrive
  • ตรวจสอบให้แน่ใจก่อน / mnt / ddrive มีอยู่เป็นไดเรกทอรีว่าง
  • คุณยังเพิ่มความเย็น,password=supersecretโดยตรง (ไม่ต้องเว้นวรรค) หลังจากชื่อผู้ใช้ = แต่คุณยังสามารถรอรับการแจ้งเตือนเมื่อคุณป้อนคำสั่ง

2
ฉันใช้เวลาคิดนิดหน่อยซึ่งฉันสามารถพิมพ์ในเส้นทาง smb: // .... ใน Nemo / Linux Mint 18 แต่จริงๆแล้วมันค่อนข้างง่าย: ถ้ามองไม่เห็นช่องป้อนข้อมูลให้เปิดใช้งานใน ดูเมนู
Pedi T.

3

ฉันไม่เห็นด้วยกับการอ้างว่ารูทจำเป็นต้องทำการเชื่อมต่อ cifs เสมอ มันเป็นความจริงมันเป็นสิ่งจำเป็นสำหรับ CLI smbmount เสมอ แต่ตัวจัดการไฟล์เช่น nautilus มีความสามารถในการเมาท์แชร์ cifs และไม่จำเป็นต้องเป็นรูท

ฉันไม่ได้ใช้ Gnome แต่ยังติดตั้ง Nautilus อยู่ เรียกใช้สิ่งนี้ในเทอร์มินัลเพื่อป้องกันไม่ให้มันพยายามเข้ายึดเดสก์ท็อป

$ nautilus --no-desktop &

ใน Ubuntu 16.04 เมนูทรีด้านซ้ายมี "เชื่อมต่อกับเซิร์ฟเวอร์" ที่ด้านล่าง คลิกที่คำแนะนำคือพิมพ์ "smb: //foo.example.com" smb เป็นคำเก่าสำหรับ "cifs" และถ้าคุณใส่ในเซิร์ฟเวอร์ของคุณและแชร์กับ smb: // ที่จุดเริ่มต้นการเชื่อมต่อใช้งานได้! ฉันสัญญา. หากการแชร์ของคุณเป็นสิ่งที่มีชื่อจำเป็นต้องใช้หลังจากเครื่องหมายทับ "smb: //foo.example.com/myshare"

ฉันใช้ตัวจัดการไฟล์อื่นด้วยวิธีเดียวกัน โปรโตคอลจะต้องเป็น "smb: //"


3
  1. คุณสามารถใส่รายละเอียดเหล่านั้นทั้งหมดใน / etc / fstab เพื่อให้คุณสามารถติดตั้งไดเรกทอรีเมื่อเริ่มระบบ หากเซิร์ฟเวอร์ windows หรือ SMB อยู่ในที่อยู่ IP 192.168.1.1

    /etc/fstab
    //192.168.1.1/SharedFolder/    /mnt/linux_smb   cifs    username=winuser,password=TopSecret   0    0
    
  2. สร้างไดเรกทอรีเป็นจุดเชื่อมต่อ linux

    mkdir /mnt/linux_smb
    chmod 755  /mnt/linux_smb
    
  3. เป็นครั้งแรกที่ติดตั้งสิ่งนี้ด้วยตนเอง

    mount -a
    
  4. ข้อผิดพลาดในที่สุดสามารถพบได้โดย

    dmesg | tail 
    

3
  1. มีปัญหาเฉพาะที่เป็นไปได้และน่าผิดหวังมากที่จะแก้ไขเมื่อรุ่น CIF / SMB เข้ากันไม่ได้ระหว่าง Linux และ Windows ในกรณีนี้คุณสามารถทำการเปลี่ยนแปลงเล็กน้อยในการเพิ่มบรรทัด fstab "vers = 2.1"

    ดังนั้นหากเซิร์ฟเวอร์ Windows หรือ SMB อยู่บนที่อยู่ IP 192.168.1.1

    /etc/fstab
    
    //192.168.1.1/SharedFolder/   /mnt/linux_smb   cifs   vers=2.1,username=winuser,password=TopSecret   0    0
    
  2. ขั้นตอนที่ 2, 3 และ 4 ยังคงเหมือนเดิมในคำตอบก่อนหน้า


1

ฉันรวบรวมสคริปต์เล็กน้อย (มันมีไว้สำหรับ Fedora) เพื่อติดตั้งระบบไฟล์ CIFS จากบรรทัดคำสั่งและสร้าง / ลบไฟล์ทดสอบ อาจเป็นการใช้งานบางอย่าง:

#!/bin/bash
# Passes https://www.shellcheck.net/

set -o nounset

# See 
#   https://wiki.samba.org/index.php/Mounting_samba_shares_from_a_unix_client
#   https://access.redhat.com/solutions/448263
# and also
#   https://serverfault.com/questions/309429/mount-cifs-credentials-file-has-special-character

# One needs to run "yum install cifs-utils" to have the kernel module, man page
# and other stuff.

rpm --query cifs-utils > /dev/null

if [[ $? != 0 ]]; then
   echo "Package cifs-utils is not installed -- exiting" >&2
   exit 1
else 
   ver=$(rpm --query cifs-utils)
   echo "Package $ver exists ... good!" >&2
fi

# Where to find credentials? Use the "credential file" approach, which
# we call "authfile". Example content (w/o the leading #) below.
# Make sure there are no spaces around '=' (this is different than
# for "smbclient" which can deal with spaces around '='.)
# ----8<------8<----------------
# username=prisoner
# password=KAR120C
# domain=VILLAGE
# ----8<------8<----------------
# Trailing empty lines will lead to (harmless) error messages
# "Credential formatted incorrectly: (null)"

authfile='/etc/smb.passwd' # Make sure read permissions are restricted!!

# Server to contact.
# In the UNC path, we will use DNS name instead of the (more correct?)
# NetBIOS name.
# mount.cifs manpage says: "To mount using the cifs client, a tcp name
# (rather than netbios name) must be specified for the server."

server_dns=thedome.example.com

# The name of the connecting client, just to be sure (probably useless)

client_nbs=$(hostname --short | tr '[:lower:]' '[:upper]')

if [[ -z $client_nbs ]]; then
  client_nbs=UNKNOWN
fi

# Connect to a certain service (which is a fileservice)
# and then switch to the given directory.
# Instead of appending $directory to form the complete UNC
# (Uniform Naming Convention) path, one could also use the option 
# "prefixpath".
# If there is no need to mount a subdirectory of the service,
# the UNC would just be unc="//$server_dns/$service_name"

service_name='information'
directory='PERSONALDATA'

unc="//$server_dns/$service_name/$directory"

# Finally, we will mount the CIFS filesystem here (the
# permissions on that node are not directly of interest)

mntpoint=/mnt/portal

if [[ ! -d "$mntpoint" ]]; then
   mkdir "$mntpoint"
   if [[ $? != 0 ]]; then
      echo "Could not create mountpoint '$mntpoint' -- exiting" >&2
      exit 1
   fi
fi

# Only this user will be able to access the mounted CIFS filesystem

user=number6
group=number6

# Try to mount this so that only user "number6" can access it

mount -t cifs \
   "$unc" \
   "$mntpoint" \
   --read-write \
   --verbose \
   -o "credentials=$authfile,uid=$user,gid=$group,netbiosname=$client_nbs,file_mode=0660,dir_mode=0770"

res=$?

if [[ $res != 0 ]]; then
   echo "Mount failed!" >&2
   echo "Return code $res; more info may be in kernel log or daemon log" >&2
   echo "Try 'journalctl SYSLOG_FACILITY=0' or 'journalctl SYSLOG_FACILITY=3'" >&2
   echo "...exiting" >&2
   exit 1
fi

# Check permissions on the mount point

stat=$(stat --format="group=%G user=%U access=%A" "$mntpoint")
soll="group=$group user=$user access=drwxrwx---"

if [[ $stat != "$soll" ]]; then
   echo "Incorrect permissions on root of '$mntpoint'" >&2
   echo "Expected: $soll" >&2
   echo "Obtained: $stat" >&2
   echo "...exiting" >&2
   umount "$mntpoint"
   exit 1
fi

# CD to the mountpoint to be sure

cd "$mntpoint"

if [[ $? != 0 ]]; then
  echo "Could not cd to '$mntpoint'" >&2
  exit 1
fi

# CD to directory TEST which must exist (change as appropriate)

newcd="$mntpoint/TEST"

if [[ ! -d "$newcd" ]]; then
   echo "Directory '$newcd' not found - can't test!" >&2
   echo "...exiting" >&2
   exit 1
fi

cd "$newcd"

if [[ $? != 0 ]]; then
  echo "Could not cd to '$newcd'" >&2
  exit 1
fi

# Create a file and check the permissions

testfile=$(mktemp --tmpdir="$newcd")

if [[ $? != 0 ]]; then
   echo "Could not create temporary file in '$newcd'" >&2
   exit 1
fi

stat=$(stat --format="group=%G user=%U access=%A" "$testfile")
soll="group=$group user=$user access=-rw-rw----"

if [[ $stat != "$soll" ]]; then
   echo "Incorrect permissions on temporary file '$testfile'" >&2
   echo "Expected: $soll" >&2
   echo "Obtained: $stat" >&2
   echo "...exiting" >&2
   exit 1
fi

/bin/rm "$testfile"

echo "Mounted '$unc' on '$mntpoint'" >&2

1

วิธีการติดตั้งที่แตกต่างกันหมดไป แต่มีบางสิ่งที่คุณอาจต้องการพิจารณา

หากคุณไม่ต้องการป้อนข้อมูลประจำตัวของคุณโดยตรงใน / etc / fstab คุณสามารถใช้ตัวเลือกการเมาท์แทน: หนังสือรับรอง = / your / path / here / .credentials

สิ่งนี้ควรมีชื่อผู้ใช้ = msusername รหัสผ่าน = mspassword

บันทึกไฟล์และออกจากเครื่องมือแก้ไขที่คุณเลือก

ควรเปลี่ยนสิทธิ์เป็น chmod 600

หากคุณมีโฮมไดเร็กตอรี่ที่เข้ารหัสไว้และต้องการให้เมานต์ของคุณพร้อมบูทเครื่องอย่าลืมวางไฟล์ไว้นอกโฮมไดเร็กตอรี่ของคุณ ใน / etc / หรือ / media / อาจเป็นสถานที่ที่เหมาะสมและจดจำได้ง่าย

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