Як встановити спільний доступ до CIFS?


64

Я використовую Ubuntu 11.10 і намагаюся встановити сервер freenas. У мене сервер налаштований без жодної удачі ділитися в cifs та nfs .

я намагався smbmount //192.168.1.### /mnt/

Я не новачок у Ubuntu, але ніде не користуюся користувачем живлення, тому я вважаю за краще варіант GUI, якщо він є.

Як встановити частку cifs в 11.10?

Відповіді:


88

Існує pyNeighborhood, який є власником для монтажу акцій самби та доступний у програмному центрі для завантаження.

Існує гарна стаття знаходиться тут про те , як встановити його і використовувати його.

Спочатку встановіть утиліти cifs

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

також, наприклад, пароль може міститись у команді 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

в цьому випадку вам буде запропоновано пароль (фактично для двох паролів) на момент монтажу.

Прочитайте тут документацію Samba про те, як це зробити і правильно налаштувати її для монтажу при запуску тощо.


2
чи є спосіб встановити папку samba без 1) жорсткого кодування пароля та 2) кореневого використання?
mcExchange

1
Корінь @mcExchange потрібен, і ви можете використовувати файл облікових даних smb для захисту своїх облікових даних
adampski

4
Також переконайтеся , що ви cifs-utilsвстановили: sudo apt-get install cifs-utils. Для отримання додаткової інформації цей довідковий документ ubuntu чудовий.
Марко Пашков

1
pyNeighborhood приносить мені помилку сегментації при запуску над ssh в ubuntu 14.04
Павло Нієдоба

1
@MarcoPashkov cifs-utils- це те, що мене підняло і піде. Ніщо з цього не діятиме інакше. Це має бути безпосередньо включено у відповідь.
rubynorails

13

Як сказано в map7, але якщо ви не хочете використовувати права доступу root щоразу, коли ви змінюєте файл на диску, вам доведеться встановити папку користувача та переконатися, що 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 (ubuntu 16.04 „explorer“) як

smb://thinkpad/ddrive/

Це хороший тест на літмус, жодних проблем з підключенням / трактом немає.

( Застереження : Якщо вас попросили Caja про паролі облікових даних з вашого вікна машини, ви можете перемкнути домен від WORKGROUP до імені машини, тобто «ThinkPad» Тоді дійсно місцеві реєстраційні дані вашого диска повинні робити.) .

2) Якщо це працює, ось приходить команда:

sudo mount -t cifs -o username=frank //thinkpad/ddrive /mnt/ddrive
  • Заздалегідь переконайтесь, що / mnt / ddrive існує як порожній каталог.
  • Ви також холодно додаєте ,password=supersecretбезпосередньо (немає місця) після ім'я користувача =, але ви також можете чекати, коли вам буде запропоновано ввести команду.

2
Мені потрібно було трохи розібратися, де я можу набрати smb: // .... шлях у Nemo / Linux Mint 18, але насправді це досить просто: якщо поле вводу шляху не видно, увімкніть його в Меню перегляду
Педі Т.

3

Я не погоджуюся з твердженням, що корінь завжди необхідний для того, щоб перейти до зв'язків cifs. Це правда, він завжди потрібен для CLI smbmount, але файловий менеджер, такий як nautilus, має можливість монтувати спільний файл cifs, і він не повинен бути root.

Я не використовую 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, замість цього ви можете скористатись опцією mount: credentials = / ваш / шлях / тут / .credentials

він повинен містити ім'я користувача = msusername пароль = mspassword

Збережіть файл та вийдіть із редактора вибору.

дозволи слід змінити на chmod 600

якщо у вас зашифрований домашній каталог і ви хочете, щоб ваше кріплення було завантажене, обов'язково розмістіть файл за межами домашнього каталогу. в / etc / або / media / може бути підходящим і легко запам'ятовується місцем.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.