Вопрос по linux, file-permissions, shell, windows – Как назначить разрешение на выполнение файла .sh в Windows для выполнения в Linux

39

Вот моя проблема,

В Windows я делаю zip-файл, в котором есть текстовый файл .sh, который должен выполняться в Linux. Пользователь на другом конце открывает файл zip в Linux и пытается выполнить файл .sh, но разрешение на выполнение пропало. Таким образом, пользователь должен сделать это вручную (как объяснено здесь:добавить разрешение на выполнение.

Как я могу в Windows сделать исполняемый файл .sh и добавить его в zip-файл, чтобы при открытии zip-файла в linux .sh-файл все еще сохранял свое разрешение на выполнение (чтобы пользователь нене нужно делать это вручную)

Я предполагаю этодля вас невозможно создать zip в Linux? Joe

Ваш Ответ

4   ответа
-3

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

@itsbruce Итак, каков правильный ответ? Как можно сделать то, что я просил сделать в своем вопросе? C graphics
Это возможно, и вы совершенно не правы в разрешениях. Любой из различных инструментов архивирования / разархивирования, доступных для Unix (tar, gzip, bzip2), сохранит владение и разрешения, а также восстановит разрешения (с правильными параметрами) для любого пользователя и восстановит исходный идентификатор группы / владельца, если он запущен root (с соответствующими параметрами). itsbruce
Я дал вам почти весь ответ в моем ответе. Я сказал вам, какой инструмент может это сделать; вам просто нужно поэкспериментировать с правильными разрешениями группы NTFS (попросите пользователя Linux помочь, если вы неЛинукс никуда не запускался). Или спросите сопровождающих InfoZip или список рассылки пользователей. itsbruce
7

но программы Windows обычно игнорируют его.zip Однако утилита Cygwin сохраняет бит x, как и в Linux. Если вы не хотите использовать Cygwin, вы можете взять исходный код и настроить его так, чтобы все файлы * .sh получили установленный исполняемый бит. Или написать сценарий, как объяснилВот

3

Info-Zip Zip-утилиты с открытым исходным кодом. Еслирасстегнуть молнию запускается с-ИКС параметр, он будет пытаться сохранить исходные разрешения. Если исходной файловой системой была NTFS, а местом назначения является Unix, она будет пытаться выполнить перевод с одного на другое. У меня сейчас нет системы Windows для тестирования перевода, поэтому вам придется поэкспериментировать с тем, какой группе необходимо предоставить разрешения на выполнение. Это'будет что-то вродеПользователи» или же "Любой пользователь "

Если вы когда-нибудь протестируете это для Windows-Linux, я бы хотел узнать, есть лиЕсть какие-либо трудности с применением описанного метода (и если да, то какие-либо обходные пути) sampson-chen
47

система разрешений в Linux настроена таким образом, чтобы предотвратить именно то, что вы пытаетесь выполнить.

Я думаю, что лучшее, что вы можете сделать, - это предоставить вашему пользователю Linux специальную разархивированную однострочную строку для запуска по приглашению:

unzip zip_name.zip && chmod +x script_name.sh

Если есть несколько сценариев, которым нужно дать разрешение на выполнение, напишитеgrant_perms.sh следующее:

#!/bin/bash
# file: grant_perms.sh

chmod +x script_1.sh
chmod +x script_2.sh
...
chmod +x script_n.sh

(Вы можете поместить все сценарии в одну строку для chmod, но я обнаружил, что с отдельными строками проще работать в vim и с командами сценариев оболочки.)

И теперь твой распакованный однострочник становится:

unzip zip_name.zip && source grant_perms.sh

Обратите внимание, что, так как вы используетеsource бежатьgrant_perms.shэто нене нужно разрешение на выполнение

архивирование это просто средство, чтоРазница между архивированием файла и оставлением того же файла в файловой системе с точки зрения прав доступа? в процессе архивации дыра в безопасности не создается ... Gianluca Ghettini
Я думаю, что вы хотели ответить на мой ответ его Брюс. Вы'Я хорошо изложил ваш случай. TIL. dmarra
@itsbruce Я с нетерпением жду вашего ответа на этот вопрос; Меня учили, что Linux построен на отказоустойчивой модели по умолчанию / наименьших привилегий: я узнал бы что-то новое, если то, что вы предлагаете, возможно. sampson-chen
Это совершенно неправильно; Ничто в системе разрешений не настроено, чтобы победить это. Как вы пришли к такому выводу? itsbruce

Похожие вопросы