Я запускаю программу на удаленном сервере Linux Ubuntu. Эта программа обращается к существующим файлам из моего каталога, выполняет некоторые вычисления, записывает новые файлы в каталог, а затем получает доступ к файлам, которые она создала, для выполнения некоторых новых вычислений. Проблема, с которой я столкнулся, заключается в том, что первая партия файлов, создаваемых программой, имеет только право владельца на чтение - программа не может выполнить их, а затем завершается с ошибкой. Есть ли способ, которым я могу гарантировать, что каждый файл, записанный в мой каталог, автоматически имеет публичные разрешения на чтение, запись и выполнение (rwxrwxrwx)? Я все равно не могу изменить скрипт программы и не могу остановить программу после ее запуска, поэтому мой единственный вариант - это сделать через Linux.

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

Спасибо заранее за любые предложения :)

1 ответ1

2

Есть несколько способов добиться того, что вы описываете, используя оболочку, но все зависит от того, что вы ищете, и какой уровень доступа у вас к рассматриваемым папкам и доступ к оболочке.

Как я понимаю, вы хотите изменить поведение сервера относительно этих новых сгенерированных файлов. Но это зависит от пользователя, выполняющего скрипт или приложение, от их отношения к пользователю оболочки или ftp ... факт в том, что мы действительно знаем о вашей проблеме, еще не завершена.

Вы можете, например, передать право владения папкой пользователю приложения, но это может создать проблемы с пользователем оболочки или пользователем ftp, если они не совпадают.

Для этого вы можете использовать:

chown -R user:group /[path-to]/myfolder

где [path-to] должен быть изменен на путь к папке, а myfolder - на фактическую папку на машине, пользователь и группа должны быть соответственно изменены на пользователя и группу пользователя, который запускает приложение или скрипт. Если ваша папка была, например, "app" и находится на /var /www / path на удаленной машине, и приложение запускается пользователем www-data, тогда это должно быть

chown -R www-data:www-data /var/www/app

Но, как я уже сказал, мы мало что знаем о специфике. Таким образом, возможно, проблема вызвана строгой политикой администратора сервера, где umask что-то вроде:

umask 333 или даже худший umask 377

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

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

сначала измените групповое владение папкой, например:

chown -R sameuser:newgroup /[path-to]/myfolder

затем измените бит sgid в папке

chmod g+s /[path-to]/myfolder

больше о sgid на http://www.linuxnix.com/sgid-set-sgid-linuxunix/

SGID (установка идентификатора группы при выполнении) - это особый тип прав доступа к файлу, который предоставляется файлу / папке. Обычно в Linux / Unix при запуске программы она наследует права доступа от вошедшего в систему пользователя. SGID определяется как предоставление временных разрешений пользователю для запуска программы / файла с разрешениями разрешений файловой группы, чтобы стать членом этой группы для выполнения файла. Проще говоря, пользователи получат права доступа группы файлов при выполнении команды Папка / файл / программа /.

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

Надеюсь, это поможет в любом случае.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .