Если вы посмотрите на страницу руководства для mount.cifs
, который используется для монтирования любых ресурсов, перечисленных в /etc/fstab
, там есть примечание, в котором упоминается noexec
.
Эта команда может быть использована только root, если только не установлен setuid, в в этом случае включены флаги монтирования noeexec и nosuid. Когда установленная как программа setuid, программа следует соглашениям, установленным установленным программой mount для пользовательского монтирования, с дополнительным ограничением что пользователи должны иметь возможность 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
man объясняет предназначение опции exec/noexec, но не уточняет, для всех ли исполняемых файлов или только для Unix.
exec / noexec
exec позволяет выполнять двоичные файлы, находящиеся на данном разделе, тогда как noexec не позволяет этого делать. noexec может быть полезен для раздела, который не содержит двоичных файлов, например /var, или содержит двоичные файлы которые вы не хотите выполнять в своей системе, или которые даже не могут быть выполнены исполняться на вашей системе, как в случае раздела Windows.
Нет, атрибут exec/noexec просто закрывает доступ к вещам, которые помечены как исполняемые через их биты разрешений, он не влияет непосредственно на разрешения.
Однако установка exec/noexec не имеет контроля над исполняемыми файлами Windows, только над исполняемыми файлами Unix, которые также могут находиться на этих ресурсах.
Также я не совсем понимаю, как это может повлиять, если вы монтируете CIFS/Samba ресурс через /etc/fstab
, когда ОС Windows вообще может вмешаться в этот сценарий. Windows могла бы смонтировать этот ресурс напрямую и даже не утруждать себя прохождением через Linux.
Вы можете проверить это, используя 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 VM.
Когда я тестировал это, я смог успешно запустить .exe
файлы через эту установку.
ПРИМЕЧАНИЕ: Я использовал механизм общего доступа \\\vboxsrv
в Virtualbox для монтирования моего домашнего каталога, который является локальным в моей системе, /home/saml
. Затем я выполнил эту команду, смонтировав ресурс CIFS/Samba как каталог внутри /home/saml
.
$ mkdir /home/saml/cifsmnt
$ mount //server/cifsshare cifsmount -o user=joeuser,noexec
Выполнение вышеописанных действий, похоже, указывает на то, что exec/noexec не имеет никакого влияния на доступ Windows к файлам.
La solución más simple aquí es decirle a su shell que expanda la variable PYTHONEXEC antes de ejecutarla; lo haces anteponiendo un $
, como comentó thrig:
$PYTHONEXEC
Si va a usar esa sintaxis en una entrada de crontab, necesitará obtener un archivo que defina la variable antes de usarla.