Почему я не могу запускать скрипты на этом OneDrive?

Вопрос или проблема

Я озадачен этой проблемой, которая возникла на системе, где всё раньше работало нормально.

У меня есть внутренний диск, который монтируется как /data при запуске (он, конечно, в /etc/fstab).
У меня есть скрипты, которые раньше запускались оттуда, но теперь они все заканчиваются на “отказано в доступе”, если запускать их напрямую, но запускаются нормально, если сначала запустить bash. Например, я создал супер-простой скрипт:

#!/usr/bin/env bash
echo It runs

Когда я размещаю его в любой части файловой системы корня, он работает нормально. Однако, если я помещаю его в каталог /data (на смонтированной файловой системе), он при прямом запуске

./s.sh

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

bash ./s.sh

и он действительно запускается.

Я проверил, что /etc/fstab не содержит “noexec”.

Я проверил файловую систему с помощью fsck -f

Я запускал вышеуказанные примеры как root.

Права доступа к файлам: rwxr-xr-x

Команда /usr/bin/env bash действительно запускает bash

/etc/fstab содержит следующую строку:

UUID=45e6b118-4a0c-4cf2-b3c2-1509e9026f49 /data ext4 user,acl 0  0

Что мне следует рассмотреть в качестве причины?

Благодаря @steeldriver я теперь знаю о команде findmnt, которая говорит:

root@bubbles:~# findmnt -T /data
TARGET
      SOURCE    FSTYPE OPTIONS
/data /dev/sda1 ext4   rw,nosuid,nodev,noexec,relatime
root@bubbles:~# 

Теперь вопрос: что применяет nosuid, nodev и noexec к этому разделу и почему? Я занимался этим годами на этом компьютере, и это совершенно новое.

Как указано в странице руководства по команде mount, параметр user подразумевает noexec, если не переопределен последующим явным exec:

   user
       Позволяет обычному пользователю монтировать файловую систему. Имя
       монтирующего пользователя записывается в файл mtab (или в личный
       файл libmount в /run/mount на системах без обычного mtab), чтобы этот
       же пользователь мог размонтировать файловую систему снова. Этот
       параметр подразумевает параметры noexec, nosuid и nodev (если они не
       переопределены последующими параметрами, как в строке параметров
       user,exec,dev,suid).

Так что если вы хотите, чтобы скрипты были исполняемыми, вам нужно либо удалить user из параметров fstab, либо добавить явное exec:

UUID=45e6b118-4a0c-4cf2-b3c2-1509e9026f49 /data ext4 user,acl,exec 0  0

См. также Мои SSD разделы монтируются как noexec, вопреки fstab.

Ответ или решение

Для решения вопроса о невозможности запуска скриптов с определенного диска в вашей системе, важно понять, что проблема возникает из-за параметров монтирования файловой системы, которые в данном случае предотвращают выполнение скриптов. Давайте разберем ситуацию подробнее с точки зрения теории, примера и применения (TEA).

Теория

Файловые системы в Unix/Linux управляются и конфигурируются через файл /etc/fstab, который задает параметры монтирования для каждого раздела. Одним из таких параметров является user, который предполагает несколько ограничений, включая noexec. Опция noexec запрещает выполнение любых исполняемых файлов с данного тома, что и приводит к ошибке "permission denied" при попытке запуска скрипта напрямую.

Пример

В вашем конкретном случае, как вы уже заметили, файловая система, монтируемая на /data, использует следующие параметры:

UUID=45e6b118-4a0c-4cf2-b3c2-1509e9026f49 /data ext4 user,acl 0 0

Параметр user implicit означает noexec, nosuid и nodev, если они не переопределены явно. Это значит, что хоть вы и не указывали noexec вручную, данная настройка все равно применена в случае указания user. Поэтому, когда вы пытаетесь выполнить скрипт через ./s.sh, система блокирует выполнение из-за этого ограничения. Однако, когда вы запускаете скрипт как bash ./s.sh, вы явно отдаете команду интерпретатору, что легально с точки зрения текущих настроек.

Применение

Чтобы разрешить выполнение скриптов с вашего диск, необходимо изменить настройки в fstab, добавив параметр exec, который позволит выполнение исполняемых файлов:

UUID=45e6b118-4a0c-4cf2-b3c2-1509e9026f49 /data ext4 user,acl,exec 0 0

Если это пространство используется исключительно для данных, и у вас нет нужды в доступе обычных пользователей к монтированию/размонтированию, вы можете также удалить параметр user, чтобы избежать добавления нежелательных ограничений.

После внесения изменений в fstab, перезагрузите систему или отмонтируйте и снова замонтируйте ваш раздел, чтобы изменения вступили в силу:

sudo umount /data
sudo mount /data

Это должно решить вашу проблему с исполнением скриптов.

Заключение

Неожиданное изменение в поведении вашего монтированного диска, вероятно, произошло из-за изменения параметров монтирования — возможно, из-за обновления системы или внесения ручных изменений. Понимание отношений между различными параметрами монтирования и их влиянием на поведение системы жизненно важно для любого ИТ-специалиста, особенно при установке или диагностике проблем в Unix/Linux средах. Убедитесь, что все важные изменения в настройках документации протоколируются для облегчения будущего устранения неисправностей. Желаем удачи в решении вашей проблемы!

Оцените материал
Добавить комментарий

Капча загружается...