bash-скрипт теряет исполняемый бит x только во время выполнения, восстанавливает его после завершения скрипта. Linux openSUSE на VirtualBox. Общая папка

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

Я использую Linux и VirtualBox более 20 лет, и это первый раз, когда я столкнулся с этой проблемой. Я пробовал всё, и ничего не работает.

Я установил новый Linux openSUSE Tumbleweed, рабочий стол XFCE, на VirtualBox (хост – Windows 10)

>hostnamectl
   Статическое имя хоста: (не установлено)                                             
Временное имя хоста: localhost
         Имя иконки: computer-vm
           Шасси: vm 🖴
    Виртуализация: oracle
  Операционная система: openSUSE Tumbleweed                                 
       CPE OS Name: cpe:2.3:o:opensuse:tumbleweed:20241129:*:*:*:*:*:*:*
            Ядро: Linux 6.11.8-1-default
      Архитектура: x86-64

введите описание изображения здесь

Всё работает хорошо. Я следовал тем же инструкциям, которые всегда использую для каждого Linux, который устанавливаю на VirtualBox, чтобы поделиться своей папкой G:/public_html/. Я делал это сотни раз раньше.

Я создал точку монтирования в /mnt/g/public_html, а моя общая папка (которую я настроил во время установки VirtualBox для Linux) – это G:/public_html

Вот в чём проблема. В моей общей папке есть много скриптов Linux. У всех них установлен бит x.

Я заметил, что когда я запускаю скрипт, он немедленно теряет бит x. Пока скрипт выполняется. Я проверяю файл из второго терминала, используя ls -l, и вижу, что x исчез.

Как только скрипт завершает работу, бит x вновь появляется!

Это происходит только со скриптами, которые находятся в моей папке общего доступа Windows. Не с скриптами, которые находятся в моей установке Linux, таких как $HOME.

Это говорит мне о том, что это связано с настройками общей папки.

Что это означает, так это то, что если я пытаюсь запустить тот же скрипт из другого терминала, пока он всё еще выполняется в первом терминале, я получаю отказ в доступе. Я должен дождаться завершения первого процесса, чтобы снова запустить его и автоматически установить бит x.

У меня есть другой Linux в роли гостя (Linux Endeavour) в другой виртуальной машине, и эта проблема там не возникает.

Вот что я заметил, и я думаю, что это может быть причиной: в openSUSE, когда я монтирую общую папку, все файлы имеют ‘me’ ‘me’ в качестве идентификатора пользователя и идентификатора группы. Где ‘me’ – это моё имя пользователя.

ls -l /mnt/g
total 12
drwxrwxrwx 1 me me 12288 Dec  1 06:45 public_html

В Endeavour OS, используя ту же команду монтирования, я получаю это

ls -l /mnt/g
total 12
drwxrwxrwx 1 me autologin 12288 Dec  1 06:45 public_html

Обратите внимание, что здесь идентификатор группы – autologin. Команда, которую я использую для монтирования общей папки, одинакова на обеих системах. Поэтому я не понимаю, почему один Linux использует autologin для идентификатора группы для общей папки, а другой – нет. Я не знаю, является ли это причиной потери бита x. Но это единственное различие, которое я вижу.

>cat mount_win.sh 
mount -t vboxsf -o uid=1000,gid=1000 public_html /mnt/g/public_html
>id
uid=1000(me) gid=1000(me) groups=1000(me)
>

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

Приведённая выше команда монтирования всегда является той, которую я использую для каждого нового Linux, который устанавливаю на VirtualBox. Она всегда работала.

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

Скрипт выполняет паузу на 20 секунд. Пока он выполняется, вы видите, что бит x потерян до завершения скрипта. Смотрите на левый терминал, как ls -l теперь не показывает x во время выполнения скрипта.

>cd /mnt/g/public_html/LINUX_HOME_FILES/
>ls -l T.sh
-rwxrwxrwx 1 me me 70 Dec  1 16:09 T.sh
>
>cat T.sh
#!/bin/bash

echo "начало скрипта"
sleep 20s
echo "завершение скрипта"
>

введите описание изображения здесь

Если есть что-то ещё, что я могу попробовать, или нужна любая другая информация, дайте мне знать.

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

Проблема, с которой вы сталкиваетесь, связана с поведением виртуальной машины и механизмами совместного использования папок между Windows и вашей установкой openSUSE в VirtualBox. Давайте поочередно разберём все аспекты, которые могут быть значимы для вашего случая.

1. Природа проблемы

Основная проблема заключается в том, что ваш bash-скрипт теряет бит на исполнение (x bit) во время выполнения, но восстанавливает его после завершения. Данная ситуация наблюдается только при работе со скриптами в обShared folders, находящихся на диске Windows.

2. Причины потери x бита

Причиной подобного поведения может быть то, как система управляет правами доступа к файлам в общей папке. VirtualBox использует механизм vboxsf для совместного доступа, и некоторые качества файловой системы могут изменяться в зависимости от настроек монтирования:

  • Установленные параметры монтирования: Убедитесь, что используемые вами параметры монтирования соответствуют наилучшей практике. При использовании опций uid и gid важно удостовериться, что они соответствуют ID пользователя и группы на хосте. В вашем случае вы используете uid=1000,gid=1000, что корректно, однако попробуйте добавить dmode=775,fmode=775 к вашему монтированию для явного указания прав доступа к директориям и файлам, что может помочь.

  • Права доступа и временные изменения: В некоторых реализациях vboxsf временные изменения прав могут происходить при выполнении скриптов, особенно если они запускаются в фоновом режиме или через exec. Проверяйте, не влияют ли другие процессы на права файла во время его выполнения.

3. Отличия в настройках

Сравнив настройки с вашим дистрибутивом Endeavour, можно заметить, что группа пользователей автологина (autologin) в одной системе и ваше имя пользователя (me) в другой может оказывать влияние на поведение монтирования.

  • Разные идентификаторы: Возможно, что различные настройки групп, используемые в вашем openSUSE и Endeavour, приводят к разному поведению. Попробуйте изменить группу монтируемого каталога на автологин, если это возможно. Например, команда:
sudo chown :autologin /mnt/g/public_html

может помочь.

4. Рекомендации

  1. Эксперименты с параметрами монтирования: Попробуйте следующие варианты монтирования:
mount -t vboxsf -o uid=1000,gid=1000,dmode=775,fmode=775 public_html /mnt/g/public_html
  1. Проверьте наличие обновлений: Убедитесь, что у вас установлены последние версии обоих VirtualBox и расширений Guest Additions для Linux. Обновления могут содержать исправления, которые устранить подобные проблемы.

  2. Создайте временные скрипты: Если у вас есть возможность, создайте простые тестовые сценарии с минимальными функциями и проверьте их поведение. Это поможет сузить круг возможных причин.

  3. Логи системных ошибок: Просмотрите системные логи (/var/log/syslog или dmesg), чтобы обнаружить какие-либо ошибки или предупреждения, которые могли бы оказать влияние на поведение файловой системы.

Заключение

Если ни один из предложенных вариантов не решит вашу проблему, возможно, стоит обратиться к документации VirtualBox или на специализированные форумы. Проблема может являться багом в версии openSUSE Tumbleweed или конфигурации VirtualBox. Для дальнейшего анализа могут потребоваться переменные окружения, такие как LS_COLORS, которые могут также влиять на визуализацию прав доступа в командной строке.

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

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