
Я смонтировал несколько дисков с данными и использовал noexec
параметр. Думая, что поскольку это только данные, мне это не нужно exec
. Теперь у меня возникли некоторые проблемы с разрешениями, и я хотел бы исключить это как причину, а также лучше понять этот параметр.
Имеет ли exec
параметр in /etc/fstab
тот же эффект, что и предоставление разрешений на выполнение всем каталогам и файлам в смонтированной системе?
Как это влияет на исполняемые файлы Windows ( .exe
), доступ к которым осуществляется через общие папки Samba или другие сетевые протоколы?
Смонтированные диски будут объединены с aufs
или mhddfs
и будут доступны через центральную точку монтирования в /mnt/virtual
. Затем доступ будет осуществляться через сеть (сейчас это Samba). Также будет возможен локальный доступ ( xbmc
). Я не уверен, следует ли предоставить ему прямую ссылку или ссылку Samba на файлы?
Какова наилучшая практика в этом случае?
решение1
Просмотр страниц руководства
Если вы посмотрите на страницу руководства, mount.cifs
что будет использоваться для монтирования любых перечисленных общих ресурсов, то /etc/fstab
там есть примечание, в котором упоминается noexec
.
Эта команда может использоваться только пользователем root, если не установлен setuid, в этом случае флаги монтирования noeexec и nosuid включены. При установке в качестве программы setuid программа следует соглашениям, установленным программой монтирования для пользовательских монтирований, с дополнительным ограничением, что пользователи должны иметь возможность chdir() в точке монтирования до монтирования, чтобы иметь возможность монтироваться в нее.
Некоторые клиентские инструменты samba, такие как smbclient(8), учитывают параметры конфигурации на стороне клиента, представленные в smb.conf. В отличие от этих клиентских инструментов, mount.cifs полностью игнорирует smb.conf.
Учитывая это, я бы ожидал, что он будет учитывать опцию exec/noexec, если она включена в какие-либо попытки монтирования. Кроме того, рассмотрение mount.cifs
использования показывает, как эта опция будет использоваться.
Less commonly used options:
credentials=<filename>,guest,perm,noperm,setuids,nosetuids,rw,ro,
sep=<char>,iocharset=<codepage>,suid,nosuid,exec,noexec,serverino,
mapchars,nomapchars,nolock,servernetbiosname=<SRV_RFC1001NAME>
directio,nounix,cifsacl,sec=<authentication mechanism>,sign,fsc
В fstab
справочной странице объясняется предполагаемое назначение exec/noexec, но не уточняется, относится ли оно ко всем исполняемым файлам или только к Unix.
исполняемый / неисполняемый
exec позволяет вам запускать двоичные файлы, находящиеся на этом разделе, тогда как noexec не позволяет вам этого делать. noexec может быть полезен для раздела, который не содержит двоичных файлов, например /var, или содержит двоичные файлы, которые вы не хотите выполнять в своей системе, или которые вообще не могут быть выполнены в вашей системе, как в случае с разделом Windows.
Делает ли exec/noexec все исполняемым?
Нет, атрибут exec/noexec просто блокирует разрешение объектов, помеченных как исполняемые с помощью битов разрешений, он не влияет на разрешения напрямую.
А как насчет двоичных файлов Windows?
Однако настройка exec/noexec не влияет на исполняемые файлы Windows, а только на исполняемые файлы Unix, которые также могут находиться в этих общих папках.
Также я даже не уверен, как они будут играть, если вы монтируете общий ресурс CIFS/Samba через /etc/fstab
, когда ОС Windows вообще будет вмешиваться в этот сценарий. Windows могла бы/могла бы сама монтировать этот общий ресурс напрямую и даже не утруждать себя прохождением через Linux.
Тестирование
Пример из UnixВы можете проверить это, используя mount.cifs
напрямую через командную строку, например так. Предположим, что у нас есть файл на общем ресурсе CIFS/Samba следующим образом:
$ cat cmd.bash
#!/bin/bash
echo "hi"
$ chmod +x cmd.bash
Теперь монтируем его вот так и пробуем запустить скрипт cmd.bash
:
$ mount.cifs //server/cifsshare /path/to/cifsmnt -o user=joeuser,noexec
$ cd /path/to/cifsmnt
$ ./cmd.bash
bash: ./cmd.bash: Permission denied
Если мы опустим эту опцию, noexec
то:
$ mount.cifs //server/cifsshare /path/to/cifsmnt -o user=joeuser
$ cd /path/to/cifsmnt
$ ./cmd.bash
hi
Из Windows
Единственный сценарий, который я мог бы здесь представить, это если бы я использовал что-то вроде Virtualbox и смонтировал общий ресурс CIFS/Samba внутри каталога, который затем могла бы использовать виртуальная машина Windows.
Когда я это проверил, мне удалось успешно запустить .exe
файлы через эту настройку монтирования.
ПРИМЕЧАНИЕ:Я использовал \\vboxsrv
механизм общего доступа в Virtualbox для монтирования моего домашнего каталога, который является локальным в моей системе, /home/saml
. Затем я выполнил эту команду, монтируя общий ресурс CIFS/Samba как каталог внутри /home/saml
.
$ mkdir /home/saml/cifsmnt
$ mount //server/cifsshare cifsmount -o user=joeuser,noexec
Выводы
Выполнение вышеописанного, по-видимому, указывает на то, что exec/noexec не имеет никаких ограничений на доступ Windows к файлам.