Làm cách nào để gắn kết chia sẻ CIFS?


64

Tôi đang sử dụng Ubuntu 11.10 và đang cố gắn máy chủ freenas. Tôi có máy chủ được thiết lập để chia sẻ trong cifsnfs không có may mắn.

Tôi đã thử smbmount //192.168.1.### /mnt/

Tôi không mới với Ubuntu nhưng không ở gần người dùng quyền lực, vì vậy tôi thích một tùy chọn GUI hơn nếu có.

Làm cách nào để gắn kết chia sẻ cifs trong 11.10?

Câu trả lời:


88

pyNeQU là một gui để gắn cổ phiếu samba và có sẵn trong trung tâm phần mềm để tải xuống.

Có một bài viết hay nằm ở đây về cách thiết lập và sử dụng nó.

Đầu tiên cài đặt tiện ích cifs

sudo apt-get install cifs-utils

Ngoài ra, lệnh đầu cuối cơ bản là:

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

Nếu bạn muốn thấy thú cưỡi của mình trong Nautilus, tốt nhất là tạo thư mục con trước trong / media / USERNAME / ví dụ:

mkdir /media/paul/cifsShare

ngoài ra, mật khẩu có thể được dùng trong lệnh mount chẳng hạn (cũng sẽ thể hiện các chế độ tệp / thư mục):

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

trong trường hợp này, bạn sẽ được yêu cầu nhập mật khẩu (thực tế là 2 mật khẩu) vào thời điểm gắn kết.

Hãy đọc qua tài liệu Samba ở đây về cách thực hiện và thiết lập chính xác để gắn kết khi khởi động, v.v.


2
Có cách nào để gắn kết chia sẻ samba mà không cần 1) mã hóa mật khẩu và 2) phải root?
mcExchange

1
Cần root @mcExchange và bạn có thể sử dụng tệp thông tin smb để bảo vệ thông tin đăng nhập của bạn
adampski

4
cũng chắc chắn rằng bạn đã cifs-utilscài đặt : sudo apt-get install cifs-utils. Để biết thêm thông tin tài liệu trợ giúp Ubuntu này là tuyệt vời.
Marco Pashkov

1
pyNeQU cho tôi lỗi phân đoạn khi bắt đầu qua ssh trong Ubuntu 14.04
Pavel Niedoba

1
@MarcoPashkov cifs-utilslà những gì đã đưa tôi đến và đi. Không ai trong số này sẽ làm việc khác. Điều này nên được bao gồm trực tiếp trong câu trả lời.
rubynorails

13

Như map7 đã nói, nhưng nếu bạn không muốn sử dụng quyền root mỗi khi bạn thay đổi tệp trên ổ đĩa, thì bạn sẽ phải gắn vào thư mục người dùng và đảm bảo gid và uid được đặt thành tên người dùng của bạn .

Lệnh thiết lập chúng:

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

Lưu ý rằng mntthư mục đã được tạo ~/mnt/sharethay vì /mnt/share.

Ngoài ra, bạn có thể bỏ mật khẩu = PASSWD nếu bạn muốn nó nhắc bạn thay vì bạn có nó trong lệnh, có khả năng được lưu trữ trong lịch sử shell của bạn:

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

1
Thực hiện một câu trả lời đầy đủ hơn, với một số ví dụ và tôi sẽ upvote :)
cơn bão

5

1) Chia sẻ samba của tôi cho thấy ở Caja (phiên bản ubay 16.04 explorer) như là

smb://thinkpad/ddrive/

Đây là một bài kiểm tra lithmus tốt, không có vấn đề kết nối / đường dẫn.

( báo trước : Nếu bạn được caja hỏi về thông tin mật khẩu từ máy windows của bạn, bạn có thể muốn chuyển Tên miền từ WORKGROUP sang tên của máy, tức là 'thinkpad'.

2) Nếu nó hoạt động, ở đây có lệnh:

sudo mount -t cifs -o username=frank //thinkpad/ddrive /mnt/ddrive
  • Đảm bảo trước, / mnt / ddrive tồn tại dưới dạng một thư mục trống.
  • Bạn lạnh cũng thêm ,password=supersecrettrực tiếp (không có dấu cách) sau tên người dùng =, nhưng bạn cũng có thể đợi được nhắc, khi bạn nhập lệnh.

2
Tôi phải mất một chút để tìm ra, nơi tôi có thể nhập vào đường dẫn smb: // .... trong Nemo / Linux Mint 18, nhưng thực ra nó khá đơn giản: nếu hộp nhập đường dẫn không hiển thị, hãy bật nó trong Xem menu.
Pedi T.

3

Tôi không đồng ý với tuyên bố rằng root luôn luôn cần thiết để thực hiện các kết nối cifs. Đó là sự thật, nó luôn luôn cần thiết cho CLI smbmount, nhưng một trình quản lý tệp như nautilus có khả năng gắn kết chia sẻ cifs và không cần thiết phải root.

Tôi không sử dụng Gnome, nhưng tôi vẫn cài đặt Nautilus. Chạy cái này trong một thiết bị đầu cuối để ngăn không cho nó cố chiếm lấy máy tính để bàn

$ nautilus --no-desktop &

Trong Ubuntu 16.04, menu cây bên trái có "Kết nối với máy chủ" ở phía dưới. Nhấp vào đó, đề xuất là loại "smb: //foo.example.com". smb là từ cũ của "cifs" và nếu bạn đặt máy chủ của mình và chia sẻ với smb: // lúc đầu, kết nối sẽ hoạt động! Tôi hứa. Nếu chia sẻ của bạn là một thứ được đặt tên, nó được yêu cầu sau dấu gạch chéo, "smb: //foo.example.com/myshare".

Tôi đã sử dụng các trình quản lý tệp khác theo cách tương tự. Giao thức phải là "smb: //".


3
  1. Bạn có thể đặt tất cả các chi tiết đó trong / etc / fstab để bạn có thể có các thư mục được gắn khi khởi động hệ thống. Nếu windows hoặc máy chủ SMB ở địa chỉ IP 192.168.1.1

    /etc/fstab
    //192.168.1.1/SharedFolder/    /mnt/linux_smb   cifs    username=winuser,password=TopSecret   0    0
    
  2. Tạo thư mục như điểm gắn kết linux

    mkdir /mnt/linux_smb
    chmod 755  /mnt/linux_smb
    
  3. Lần đầu tiên gắn kết này bằng tay

    mount -a
    
  4. Lỗi cuối cùng có thể được tìm thấy bởi

    dmesg | tail 
    

3
  1. Có một vấn đề cụ thể có thể xảy ra và rất khó giải quyết khi các phiên bản CIF / SMB không tương thích giữa Linux và Windows. Trong trường hợp đó, bạn chỉ có thể tạo ra một đoạn nhỏ trong dòng fstab thêm "Vers = 2.1"

    Vì vậy, nếu máy chủ Windows hoặc SMB ở địa chỉ 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. Bước 2, 3 và 4 vẫn giống như trong câu trả lời trước.


1

Tôi kết hợp một tập lệnh nhỏ (mặc dù nó có nghĩa là Fedora) để gắn hệ thống tập tin CIFS từ dòng lệnh và tạo / xóa một tập tin thử nghiệm. Có thể được sử dụng một số:

#!/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

làm thế nào các phương pháp lắp khác nhau hoạt động đã cạn kiệt, nhưng có một số thứ bạn có thể muốn xem xét

nếu bạn không muốn nhập thông tin đăng nhập của mình trực tiếp vào / etc / fstab, bạn có thể sử dụng tùy chọn gắn kết thay thế: thông tin đăng nhập = / your / path / here / .credentials

cái này nên chứa tên người dùng = msusername password = mspassword

Lưu tệp và thoát khỏi trình soạn thảo lựa chọn của bạn.

quyền nên được thay đổi thành chmod 600

nếu bạn có một thư mục gốc được mã hóa và muốn mount của bạn được khởi động, hãy đảm bảo đặt tệp bên ngoài thư mục chính của bạn. trong / etc / hoặc / media / có thể là một nơi phù hợp và dễ nhớ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.