Как использовать 'chmod' на NTFS (или FAT32) разделе?

129

У меня есть скрипт, который мне нужно выполнить в разделе NTFS. Разрешение сценария установлено на 600.

Я попытался изменить разрешения, выполнив команду chmod 755 script.sh, которая не сообщает об ошибке или о чем-либо еще, но также не меняет разрешения для файла:

$ stat script.sh

  File: `script.sh'
  Size: 297070      Blocks: 584        IO Block: 4096   regular file
Device: 811h/2065d  Inode: 35515       Links: 1
Access: (0600/-rw-------)  Uid: ( 1000/  xxxxxx)   Gid: ( 1000/  xxxxxx)
Access: 2010-09-30 14:05:16.041621000 -0700
Modify: 2010-09-30 14:05:05.070157000 -0700
Change: 2010-09-30 14:05:05.070475000 -0700

$ chmod 755 script.sh
$ stat script.sh

  File: `script.sh'
  Size: 297070      Blocks: 584        IO Block: 4096   regular file
Device: 811h/2065d  Inode: 35515       Links: 1
Access: (0600/-rw-------)  Uid: ( 1000/  xxxxxx)   Gid: ( 1000/  xxxxxx)
Access: 2010-09-30 14:05:16.041621000 -0700
Modify: 2010-09-30 14:05:05.070157000 -0700
Change: 2010-09-30 14:05:05.070475000 -0700

Как видите, оно остается неизменным.

Натан Осман
источник
Лучшее решение можно найти здесь. Эти два вопроса должны быть связаны!

Ответы:

79

Режим определяется параметрами монтирования раздела (вы не можете изменить его с помощью chmod).

Для «755» для файлов и «777» для каталогов вы должны использовать что-то вроде

sudo mount -t ntfs -o rw,auto,user,fmask=0022,dmask=0000 /dev/whatever /mnt/whatever
htorque
источник
Ладно, это могло бы объяснить и несколько других вещей.
Натан Осман
5
Что я должен поставить вместо этого, /dev/whateverи /mnt/whateverесли мне нужно изменить разрешение моего раздела жесткого диска с именем/media/Prtn
pranphy
3
Сохраняет ли монтирование таким образом исходные настройки диска? Т.е. безопасно смонтировать диск Windows?
Джонатан
1
Я установил для пользователя «andrew», который является моим основным пользователем. По разделу ls for ntfs видно, что все файлы / каталоги в нем принадлежат пользователю root.
deathangel908
Настоящее решение есть ntfs-3g.usermap. Смотрите ниже ...
Эдуардо Куомо
86

Вопреки мнению большинства людей, NTFS - это POSIX-совместимая файловая система, и на NTFS можно использовать разрешения .

Чтобы включить это, вам нужен «User Mapping File» или просто permissionsукажите опцию при монтировании (когда не требуется совместимость с Windows). Это сопоставляет пользователей linux в вашей системе с внутренними идентификаторами пользователей, такими как NTFS / Windows.

См. Страницу руководства ntfs-3g для получения дополнительной информации и примеров. Если вам нужна дополнительная информация, обратитесь к расширенной документации ntfs-3g о владельцах и разрешениях .

(Обратите внимание, что это не работает на файловых системах FAT.)

¹ Да, он также может хранить имена файлов, которые действительны в Linux / Unix, но не под Windows, поддерживает символические ссылки и жесткие ссылки и т. Д.

Janc
источник
4
Здесь хорошая документация. короче: sudo ntfs-3g.usermap /dev/disk/by-label/MY-NTFSа потомsudo mv UserMapping /media/MY-NTFS/.NTFS-3G/
летающие овцы
1
Так что это позволит вам произвольно устанавливать разрешения, как chmod 655 /some/fileдля раздела NTFS, смонтированного в Linux? Я пытаюсь понять, как объединить мой домашний раздел из linux в c: \ Users. Позволит ли использование usermap сохранить все разрешения? Я планировал смонтировать каталог c: \ Users в / home в linux.
trusktr
7
Позвольте мне еще раз подчеркнуть ваше замечание: «когда не требуется совместимость с Windows». ref: askubuntu.com/questions/92863/…
эллиптический вид
1
ntfs-3g manpageссылка не работает
ctrl-alt-delor
Эдуардо Куомо (Eduardo Cuomo) написал довольно хороший пример всех шагов, необходимых для создания «Файла сопоставления пользователей» здесь: askubuntu.com/a/887502/327339
Габриэль Стейплс,
38

Для разделов NTFS используйте permissionsопцию в fstab.

Сначала размонтируйте раздел ntfs.

Определите ваш раздел UUID с blkid

sudo blkid

Затем отредактируйте /etc/fstab

# Graphical 
gksu gedit /etc/fstab

# Command line
sudo -e /etc/fstab

И добавьте или измените строку для раздела NTFS

# change the "UUID" to your partition UUID
UUID=12102C02102CEB83 /media/windows ntfs-3g auto,users,permissions 0 0

Сделать точку монтирования (при необходимости)

sudo mkdir /media/windows

Теперь смонтируйте раздел

mount /media/windows

Опции, которые я вам дал, autoавтоматически монтируют раздел при загрузке и usersпозволяют пользователям монтировать и размонтировать.

Затем вы можете использовать chown и chmod в разделе ntfs.

пантера
источник
2
Как хранятся эти разрешения? В объявлениях? Другие метаданные?
ζ--
Что насчет fat32? У меня есть Micro SD-карта, которая защищена от записи, и я не могу получить доступ, отформатировать его.
Вакас
@RanaMuhammadWaqas - это старый вопрос, но вы также можете смонтировать его с различными вариантами. Трудно понять, в чем ваша проблема, возможно, определите ваше оборудование и задайте отдельный вопрос.
Пантера
@ bodhi.zazen usersподразумевает noexec , nosuid и nodev . нет? Как пользователи могут монтировать / размонтировать с noexecнастройкой?
Хуршид Алам
1
@EduardoCuomo - публикация комментария в ответе о том, что он не работает, вряд ли поможет вам. Какая файловая система? Я предлагаю вам открыть вопрос. Вам необходимо определить файловую систему и опубликовать запись в fstab
Panther
20

В дополнение к настройке fmask и / или dmask в ответе htorque выше, если вы хотите выполнить сценарии на диске, мне также пришлось установить параметр монтирования "exec".

Таким образом, пример будет:

sudo mount -t ntfs -o rw,auto,user,fmask=0022,dmask=0000,exec /dev/whatever /mnt/whatever
dbrews
источник
14

Вы всегда можете явно вызвать интерпретатор сценария, в этом случае разрешения на выполнение не требуются. Если скрипт использует bash , что можно проверить, посмотрев на первую строку скрипта, просто запустите

bash script.sh

Обратите внимание, что скрипт вызывает другие скрипты или двоичные файлы в том же разделе, это не будет работать. Также обратите внимание, что стратегия не работает с двоичными файлами, в отличие от текстовых файлов сценариев, написанных на Bash Script, Perl, Python и т.п.

loevborg
источник
+1 - я никогда не думал о том, чтобы вызвать его таким образом.
Натан Осман
8
Для выполнения двоичных файлов используйте /lib64/ld-linux-x86-64.so.2 ./program.binдля 64-битных и /lib/ld-linux.so.2 ./program.bin32-битных программ.
Лекенштейн
8

В соответствии с разделом « Владение и разрешения » документации NTFS-3G, мы можем использовать параметры монтирования для управления доступом к файлам и их созданием . Комбинации очень сложны (см. Две таблицы там). Также я не читаю и получаю все из них. Например, я не знаю, выбран ли POSIX ACL во время компиляции или нет двоичного пакета NTFS-3G. Но лучшее, что я получил, - это использование файла сопоставления пользователей в сочетании с некоторыми вариантами монтирования, чтобы приблизить вероятное сопоставление владения файлами и разрешений между Windows и Linux.


Предупреждение : это только то, что лучше всего подходит для общего доступа к разделу данных NTFS (диск D:под Windows) между Windows 8 с двойной загрузкой и Kubuntu 14.04. Инструкции записаны в тщательной ретроспективе, но не полностью проверены. Это слишком утомительно и утомительно, чтобы повторить всю процедуру снова. Так что следуйте этому на свой страх и риск. Но если вы это сделаете, поделитесь своим опытом. Если вы решите следовать инструкциям, прочитайте их полностью, чтобы получить полную картину, прежде чем действовать. Удачи!


Хорошо, вот и ты! Подробные инструкции состоят из трех частей. Часть 1 должна выполняться в Windows, а часть 2 в Linux. Часть 3 для теста.

Часть 1

В разделе « Сопоставление пользователей » документации NTFS-3G указаны две версии для настройки сопоставления пользователей между Windows и Linux, одна версия Windows и одна версия Linux. По моему опыту, версия для Linux закончилась промахом . Учетная запись Linux не была сопоставлена ​​с моей учетной записью Windows, но под SID появилась некоторая неизвестная учетная запись . В результате возникла путаница, поскольку эта неизвестная учетная запись становится владельцем всех файлов моей учетной записи Windows. В этой ситуации, если у вас нет прав администратора для возврата прав собственности, файлы под вашей учетной записью Windows становятся недоступными. Но даже если вы терзаете, это все ещенеправильное отображение. Это означает, что позже все файлы, которые вы создаете в Linux, будут назначены этой неизвестной учетной записи в Windows, а те, что в Windows, будут назначены пользователю root (если я правильно помню). Таким образом, в Windows вам нужно вернуть право собственности снова, а в Linux сменить владельца. Это не то, что мы ожидаем. После нескольких безнадежных попыток исправить проблему я сдался и перешел к версии для Windows. Это сработало. Подробные инструкции, извлеченные из соответствующего раздела документации NTFS-3G, приведены ниже:

  1. Загрузите инструмент usermap , извлеките его куда-нибудь (в моем случае, диск C:), лучше вне NTFS-раздела (в моем случае диск D:) для общего доступа.

  2. Откройте командную строку Windows. Перейдите в извлеченный каталог tools(по умолчанию) usermapинструмента. Затем выполните следующую команду:

    C:\tools> mapuser > UserMapping
    

    Это создает шаблон и перенаправляет его в файл с именем UserMapping. Откройте файл с помощью текстового редактора, скажем, Блокнот, вы должны увидеть следующие строки:

    # Generated by usermap for Windows, v 1.1.5
    # For Windows account "Account" in domain "Domain"
    # Replace "user" and "group" hereafter by matching Linux login
    user::SID
    :group:SID
    

    Предположительно, первым SIDдолжен быть SID вашего пользователя, а вторым - SID вашей группы. Вы можете проверить их соответственно с помощью команд whoami /userи whoami /groups.

  3. После того, как вы убедитесь, что SID верны, следуйте инструкциям в комментарии, то есть измените userв user::SIDстроке свое имя пользователя и groupв :group:SIDстроке имя основной группы в Linux. На Ubuntu они одинаковые. Кроме того, добавьте имя вашей группы Linux также после первого двоеточия user::SIDстроки. Так что линия должна выглядеть примерно так user:group:SID. Кажется, что в противном случае файлы, созданные в Windows, будут назначены в user:rootLinux.

  4. Сохраните файл. Переместите его в каталог с именем .NTFS-3G(создайте его, если он еще не существует) в разделе NTFS для общего доступа (в моем случае диск D:).

  5. Этот шаг предназначен для тестирования в части 3. В общем разделе NTFS создайте новый каталог и новый файл.

Часть 2

Теперь загрузитесь в Linux. sudoотредактируйте файл /etc/fstab. Добавьте или измените строку для общего раздела NTFS примерно так:

UUID=...    /data    ntfs    defaults,umask=077,utf8    0    0

Необходимо установить umask( dmaskи fmaskможет также работать, но не проверено). Выберите значение для umaskвас, как я, хотя я выбрал 077. Кажется, без этой настройки полные права будут предоставлены others для вновь созданных файлов.

Сохраните файл. Теперь sudo mountили перемонтируйте ( sudo umountи затем sudo mount) общий раздел NTFS (в моем случае /data):

$ sudo mount /data

Часть 3

Теперь (еще в Linux) cdдо точки монтирования (в моем случае /data) ls -lфайлов нет. Проверьте, совпадают ли их права доступа и права доступа соответственно с тем, который вы указали в UserMappingфайле и в котором umaskвы его установили /etc/fstab(соответствие между разрешениями и umaskтребует некоторого дополнительного вычисления, см. Man (1) umask для получения дополнительной информации). Если они это сделают, поздравляем, половина цели достигнута. Иначе бедный ты. Спросите Ubuntu или Windows.

Затем создайте новый каталог и новый файл. ls -lпроверить их право собственности и разрешения. Владельцем должно быть ваше имя пользователя и основная группа, как обычно. Разрешения должны соответствовать umask. Теперь перезагрузите компьютер и загрузитесь в Windows. Найдите в общем разделе NTFS каталог и файл, который вы только что создали в Linux. Проверьте их свойства, чтобы увидеть, назначены ли они вашей учетной записи Windows. Если они, поздравляю, вы все сделали. В противном случае невезение. Спросите Windows или Ubuntu.

EOF

reflectionalist
источник
6

Старая ветка, я знаю, но все еще актуальна, и в ней отсутствует конкретный пример использования, составленный из разных предложений на различных других форумах / темах и протестированный на Ubuntu GNOME 13.04, где я хотел, чтобы внешний диск содержал библиотеку Steam ...

Например, если NTFS-раздел находится на внешнем USB-диске - это означает, что раздел монтируется на лету при подключении - тогда вы можете использовать следующий метод, чтобы udev монтировал разделы ntfs с правами на выполнение.

Откройте окно терминала и выполните:

$ sudo nano /etc/udev/rules.d/90-usb-disks.rules

Затем вставьте эту строку в то, что должно быть пустым / новым файлом (если нет, то выйдите из nano и повторите команду, начиная имя файла с большего числа, например, 91 -...):

ENV{ID_FS_TYPE}=="ntfs", ENV{ID_FS_TYPE}="ntfs-3g"

Затем сохраните и закройте. Отключите диск и затем выполните в терминале:

$ sudo service udev restart

Далее подключите диск обратно и наслаждайтесь :)

user17254
источник
1
Отлично, это должен быть принятый ответ.
оставлено около
4

Все шаги:

  1. Установить ntfs-3g:

    sudo apt-get install -y ntfs-3g
    
  2. Размонтировать раздел NTFS :

    sudo umount /mnt/windows
    
  3. Используйте ntfs-3g.usermapдля создания вашего UserMappingфайла:

    sudo ntfs-3g.usermap /dev/disk/by-label/MY-NTFS
    

    или же

    sudo ntfs-3g.usermap /dev/sdb1
    
  4. Перемонтируйте раздел NTFS, чтобы добавить UserMappingфайл:

    mount -a
    sudo mkdir /mnt/windows/.NTFS-3G
    sudo mv UserMapping /mnt/windows/.NTFS-3G/
    
  5. Обновите ваш fstabфайл:

    sudo vim /etc/fstab
    

    Обновить строку монтирования :

    1. Сделайте резервную копию вашей текущей линии монтирования! Дублируйте строку и прокомментируйте ее, добавив #в начале.
    2. Изменить следующее: UUID=34A0456DA04536A0 /mnt/windows ntfs defaults,uid=1000,gid=1000 0 0
    3. По следующему: UUID=34A0456DA04536A0 /mnt/windows ntfs-3g defaults 0 0 (использовать ntfs-3gи только defaultвариант)

    Это должно выглядеть примерно так:

    #UUID=34A0456DA04536A0 /mnt/windows ntfs defaults,uid=1000,gid=1000 0 0 UUID=34A0456DA04536A0 /mnt/windows ntfs-3g defaults 0 0

  6. Наконец, перемонтируйте, используя ваш fstab:

    sudo umount /mnt/windows
    sudo mount -a
    

Сделайте это один раз для каждого раздела NTFS !

ВНИМАНИЕ С ОС Windows!

Я проверяю это с Windows 7+ и разрешения влияют на ОС Windows! Я изменяю права доступа моего домашнего каталога в разделе Windows, и когда я снова использовал Windows, я мог видеть, что пользователь сломался!

Эдуардо Куомо
источник
1

Существует вопрос, связанный с USB-устройствами. Этот ответ дает неприятный взлом, если вы хотите автоматически подключить каждое USB-устройство с разрешениями на выполнение.

lumbric
источник
1

Смонтируйте раздел NTFS на USB-накопителе с пользовательскими правами и владельцем

В Linux режим NTFS (и FAT32) определяется параметрами монтирования раздела . Вы не можете изменить это через chmod.

Предположение: USB-накопитель видится как sdb1 , измените, чтобы соответствовать букве диска и номеру раздела в вашем случае . Общий синтаксис: sdxnгде xбуква диска и nномер раздела, как видно, например,sudo lsblk -f

Подготовка

  • Размонтируйте раздел NTFS.

    sudo umount /dev/sdxn   # general syntax
    sudo umount /dev/sdb1   # modify to match your case
    
  • Создайте пользовательскую точку монтирования (только если вы хотите новую точку монтирования), например, с

    sudo mkdir -p /mnt/sd1
    
  • Проверьте свой идентификатор пользователя uid(обычно это 1000, иногда 1001 или 1002 ...)

    grep ^"$USER" /etc/group
    

    и используйте этот номер, если вы хотите получить право собственности (по умолчанию root).

Смонтировать раздел NTFS

Пример 1 (без прав на выполнение файлов, нет доступа для «других»),

sudo mount -o rw,user,uid=1000,dmask=007,fmask=117 /dev/sdxn /mnt/sd1  # general syntax
sudo mount -o rw,user,uid=1000,dmask=007,fmask=117 /dev/sdb1 /mnt/sd1  # modify to match your case
  • в этом случае вы можете запустить скрипт this-scriptс

    bash /mnt/sd1/this-script
    

Пример 2 (с правами на выполнение для файлов, нет доступа для «других»),

sudo mount -o rw,user,uid=1000,umask=007,exec /dev/sdxn /mnt/sd1  # general syntax
sudo mount -o rw,user,uid=1000,umask=007,exec /dev/sdb1 /mnt/sd1  # modify to match your case
  • В этом случае вы можете запустить скрипт this-scriptс

    /mnt/sd1/this-script
    

    и вы также можете запускать исполняемые программы из этого места (не то, что рекомендуется).

Пример 3 (полные разрешения для всех, что удобно, но не безопасно, когда есть несколько пользователей),

sudo mount -o rw,users,umask=000,exec /dev/sdxn /mnt/sd1  # general
sudo mount -o rw,users,umask=000,exec /dev/sdb1 /mnt/sd1  # modify to match your case
sudodus
источник
/media$ sudo mkdir -p sdb1 /media$ sudo mount -o rw,users,umask=000,exec /dev/sdb1 ./sdb1/ mount: block device /dev/sdb1 is write-protected, mounting read-only
alhelal
@alhelal, я боюсь, что аппаратное обеспечение вашего USB-накопителя стало доступным только для чтения или «заблокировано сеткой». Но могут также быть некоторые проблемы с файловой системой, и если файловая система повреждена, вы можете исправить ее, исправив ее в Windows, либо с помощью метода графического интерфейса пользователя, либо с помощью командной строки chkdsk /f X:по этой ссылке ubuntuforums.org. /… - Если все равно не повезло, сделайте
sudodus