Монтирование сетевого диска cifs: права на запись и chown

99

У меня есть доступ к сетевому диску cifs. Когда я монтирую его на своей машине с OSX, я могу читать и писать с него и на него.

Когда я монтирую диск в Ubuntu, используя:

sudo mount -t cifs -o username=${USER},password=${PASSWORD} //server-address/folder /mount/path/on/ubuntu

Я не могу записать на сетевой диск, но я могу читать с него. Я проверил разрешения и владельца папки монтирования, они выглядят так:

4.0K drwxr-xr-x  4 root root    0 Nov 12  2010 Mounted_folder

Я не могу изменить владельца, потому что я получаю ошибку:

chown: changing ownership of `/Volumes/Mounted_folder': Not a directory

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

Что я должен сделать, чтобы активировать мое разрешение на запись?

Винсент
источник
Указана ли файловая система в / etc / fstab? Если да, какие варианты есть у записи?
Дженни Д
3
Вы также можете использовать параметр nopermмонтирования, аналогично указанному в моем ответе на этот вопрос: unix.stackexchange.com/a/375523/16287 . Это даст всем пользователям доступ для чтения и записи к монтированию CIFS.
Даниэль

Ответы:

137

Вы монтируете общий ресурс CIFS как root (потому что вы использовали sudo), поэтому вы не можете писать как обычный пользователь. Если ваш дистрибутив Linux и его ядро ​​достаточно новы, чтобы вы могли смонтировать сетевой ресурс как обычный пользователь (но в папке, которой владеет пользователь), у вас будут надлежащие учетные данные для записи файла (например, смонтируйте общую папку где-нибудь под вашим Домашний каталог, как например $HOME/netshare/. Очевидно, вам нужно будет создать папку перед монтированием).

Альтернативой является указание идентификатора пользователя и группы, который должен использовать смонтированный сетевой ресурс, что позволит конкретному пользователю и потенциальной группе выполнять запись в общий ресурс. Добавьте следующие параметры к вашему монтированию : uid=<user>,gid=<group>и замените <user>и <group>соответственно вашим собственным пользователем и группой по умолчанию, которые вы можете автоматически найти с помощью idкоманды.

sudo mount -t cifs -o username=${USER},password=${PASSWORD},uid=$(id -u),gid=$(id -g) //server-address/folder /mount/path/on/ubuntu

Если сервер посылает информацию о праве собственности, вам может понадобиться добавить forceuidи forcegidварианты.

sudo mount -t cifs -o username=${USER},password=${PASSWORD},uid=$(id -u),gid=$(id -g),forceuid,forcegid, //server-address/folder /mount/path/on/ubuntu
Гюйгенс
источник
это сработало для меня! Но мы должны добавить, что если общая папка находится на ПК с доменом входа, вы должны добавить эту опцию domain. Примерно так: на sudo mount -t cifs -o username=${USER},password=${PASSWORD},dom=${DOMAIN}, uid=<user>,gid=<group> //server-address/folder /mount/path/on/ubuntuсамом деле домен может идти в опции «username», но помните, что вы должны использовать /вместо `, like username = DOMAIN / user.name`.
Жоао Портела
Да, это правильно. :-) Может потребоваться указать домен или рабочую группу (для более старой версии Windows) с помощью опции «domain =» или с помощью имени пользователя, это хороший момент. И иногда даже необходимо указать схему шифрования или версию CIFS, которая будет использоваться. Но все это не было частью этого вопроса, поэтому я оставил это в стороне. :-)
Гюйгенс
2
Это как раз то, что мне было нужно. У меня была запись в / etc / fstab для автоматического подключения сетевого диска при запуске. Я не мог записать в монтирование, поэтому добавил uid = <myUserID> для строки, которая выглядит следующим образом://192.168.1.7/public /colmustang cifs username=<uname>,password=<upassword>,uid=<myUserID> 0 0
Джеймс
5
@ 71GA username- это удаленный вход для аутентификации. Это uidлокальный идентификатор пользователя, на который вы хотите записать все файлы / папки. Таким образом, имя пользователя отделено от uid, имя пользователя - это логин удаленного пользователя, а uid - ваш локальный идентификатор пользователя. Обратите внимание, что это может быть то же самое, если ваш сервер Samba и вы используете LDAP или другую централизованную учетную запись как на клиенте, так и на сервере :-).
Гюйгенс
1
@ Так хороший вопрос. Смотрите отредактированный ответ.
Жиль
20

Я успешно протестировал следующую команду:

sudo mount -t cifs -o username=[username],password=[password],uid=1001,gid=1001 //172.16.148.2/dfsgob01 /home/ususario/Documentos/benz-win
Рикардо Леон
источник
20
Используйте «id -u <пользователь>» и «id -g <пользователь>, чтобы получить uid и gid соответственно.
nvd
3
Обратите внимание, что вы можете использовать имя пользователя напрямую, как man mount.cifs
описано
2
Чтобы не вводить пароль рядом с командой, просто пропустите параметр пароля во время вызова - после этого появится запрос на его ввод, чтобы он мог быть введен незаметно.
conceptdeluxe