Могут ли сценарии запускаться, даже если они не установлены как исполняемые?

Попробуйте Virtualbox, а не бесплатно, и интернет подключен через ваш хост Ubuntu, поэтому нет беспорядка. Я нашел это, на самом деле, лучшей виртуальной машиной, вы даже получаете 3D-ускорение для графики.

Альтернативно вы можете посмотреть на двойная загрузка, тогда вы можете иметь окна и Ubuntu на одном компьютере, и оба запускаются на полной скорости

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

19
задан 10 February 2011 в 22:27

40 ответов

Не думай об этом так. Могу ли я выполнить этот файл? Подумайте об этом так: Кто может выполнить этот файл?

Если компьютер принадлежит вам, и файл принадлежит вам, я уверен, что вы можете его выполнить. Возможно, вам захочется взглянуть дальше на команды, такие как chmod и chown, и права доступа к файлам.

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

1
ответ дан 6 August 2018 в 04:01
  • 1
    Да, я знаю о них. Это означает, что я (владелец) всегда могу его выполнить. Правильно? Затем установить файл как исполняемый файл для группы или мира или обоих? – Ashfame 10 February 2011 в 23:05

Сценарий exec ядра Linux не работает с EACCES, если файл не является исполняемым

Пока вы можете делать sh myprog.sh, попытка запустить программу как ./myprog.sh не может работать, так как когда вы это делаете:

Bash использует системный вызов exec на ./myprog.sh, shebangs интерпретируются непосредственно системным вызовом exec ядра Linux, как описано в: https://stackoverflow.com / questions / 2429511 / why-do-people-write-the-usr-bin-env-python-shebang-on-the-first-line-of-a-pyt / 40938801 # 40938801 ядро ​​Linux отказывается выполнять файлы без исполняемое разрешение

Это можно проверить с помощью main.c:

#define _XOPEN_SOURCE 700 #include <errno.h> #include <stdio.h> #include <unistd.h> int main(void) { char *argv[] = {"myprog", NULL}; char *envp[] = {NULL}; int ret; ret = execve("myprog.sh", argv, envp); perror("execve"); printf("%d\n", errno); printf("%d\n", EACCES); }

и myprog.sh:

#!/bin/sh echo worked

Если myprog.sh не является исполняемым , main терпит неудачу:

execve: Permission denied 13 13

Протестировано в Ubuntu 17.10, gcc -std=c99.

POSIX 7 упоминает, что при:

Функции exec, за исключением fexecve (), не будет выполнено, если: [EACCES] Разрешение поиска отклонено для каталога, указанного в префиксе пути нового файла образа процесса, или новый файл образа процесса отклоняет разрешение на выполнение.

Дальнейшее обоснование можно найти по адресу: https://security.stackexchange.com/questions/66550/unix-execute-permission-can-be-easily-bypass-is-it-superfluous-or- Что-кнопки

0
ответ дан 7 August 2018 в 22:00

Убедитесь, что вы не сбиваете с толку «выполнение сценария оболочки» с помощью «запуска скрипта оболочки с помощью sh».

На file.sh не будут влиять права доступа к файлам:

sh file.sh

Вы выполняете sh (который разрешает программу /bin/sh), которая читает file.sh и выполняет его код.

Разрешения для файлов будут иметь эффект, если вы действительно выполняете скрипт self:

./file.sh

Обратите внимание, что разрешения файлов не поддерживаются файловыми системами, отличными от Linux, например FAT. Таким образом, даже если вы запустите chmod -x file.sh, у файла все еще будут свои прежние разрешения.

Выполнение разрешения выполняется файловой системой. Но программы также могут «выполнять» код, читая содержимое файла, которое обходит разрешения файловой системы «execute».

13
ответ дан 7 August 2018 в 22:00
  • 1
    Я понимаю вашу мысль. Но тогда это для группы или мира или для обоих? – Ashfame 10 February 2011 в 23:04
  • 2
    @Ashfame Если вы установите разрешение на выполнение, сценарий может запускаться непосредственно пользователями, у которых есть это разрешение, независимо от того, есть ли у них это на основе группы, мира или владельца. Но даже люди без разрешения на выполнение могут выполнить его, вызвав другую программу (например, bash), чтобы выполнить выполнение - чтобы заблокировать это, вы также должны были бы удалить свое разрешение read. – j-g-faustus 10 February 2011 в 23:37
  • 3
    If you set the executable permission, the script can be run directly by users who have that permission - whether they have it on a group, world or owner basis Но как разрешение предоставляется другим пользователям, проверяя разрешение на выполнение? И у меня есть второй момент. Вы имеете в виду отнять их разрешение на чтение скрипта, чтобы они не могли обработать его через bash. Правильно? – Ashfame 10 February 2011 в 23:58
  • 4
    @Ashfame На точке разрешения чтения да. О том, как вы могли бы назвать что-то вроде sudo chmod g+x myfile.sh в терминале, чтобы добавить разрешения на выполнение для группы файлов. См. [D0] Учебник по разрешению файлов . Чтобы управлять разрешениями для нескольких пользователей одновременно, вы должны использовать группы, например, Управление группами . – j-g-faustus 11 February 2011 в 01:43
  • 5
    что я имел в виду, когда мы добавляем исполняемые разрешения в GUI, то это для кого? владелец / группа / мир? – Ashfame 11 February 2011 в 01:57

Не думай об этом так. Могу ли я выполнить этот файл? Подумайте об этом так: Кто может выполнить этот файл?

Если компьютер принадлежит вам, и файл принадлежит вам, я уверен, что вы можете его выполнить. Возможно, вам захочется взглянуть дальше на команды, такие как chmod и chown, и права доступа к файлам.

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

1
ответ дан 7 August 2018 в 22:00
  • 1
    Да, я знаю о них. Это означает, что я (владелец) всегда могу его выполнить. Правильно? Затем установить файл как исполняемый файл для группы или мира или обоих? – Ashfame 10 February 2011 в 23:05

Убедитесь, что вы не сбиваете с толку «выполнение сценария оболочки» с помощью «запускать сценарий оболочки с помощью sh».

На file.sh это не будет зависеть от прав доступа к файлам ]:

  sh file.sh  

Выполняется sh (который разрешает программу / bin / sh ), который читает file.sh и выполняет его код.

Разрешения на файл будут иметь эффект, если вы действительно выполняете сам скрипт :

  ./ file.sh  

Обратите внимание, что разрешения файлов не поддерживаются файловыми системами, отличными от Linux, например FAT. Таким образом, даже если вы запустите chmod -x file.sh , файл все равно будет иметь прежние разрешения.

Выполнение разрешения выполняется файловой системой. Но программы также могут «выполнять» код, читая содержимое файла, которое обходит разрешения файловой системы «execute».

13
ответ дан 10 August 2018 в 10:14

Не думай об этом так. Могу ли я выполнить этот файл? Подумайте об этом так: Кто может выполнить этот файл?

Если компьютер принадлежит вам, и файл принадлежит вам, я уверен, что вы можете его выполнить. Возможно, вам захочется взглянуть дальше на команды типа chmod и chown и права доступа к файлам.

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

1
ответ дан 10 August 2018 в 10:14

Сценарий exec ядра Linux не работает с EACCES , если файл не является исполняемым

Пока вы можете делать sh myprog. sh , пытаясь запустить программу как ./ myprog.sh не может работать, поскольку когда вы это делаете:

Это можно проверить с помощью main.c :

  #define _XOPEN_SOURCE 700 #include & lt; errno.h & gt;  #include & lt; stdio.h & gt;  #include & lt; unistd.h & gt;  int main (void) {char * argv [] = {"myprog", NULL};  char * envp [] = {NULL};  int ret;  ret = execve ("myprog.sh", argv, envp);  PError ( "execve");  printf ("% d \n", errno);  printf ("% d \n", EACCES);  }  

и myprog.sh :

  #! / bin / sh эхо работает  

Если myprog.sh не является исполняемым, main терпит неудачу с:

  execve: Permission denied 13 13  [  ! d31] 

Протестировано в Ubuntu 17.10, gcc -std = c99 .

POSIX 7 упоминает, что при:

Функции exec , за исключением fexecve (), не удастся, если:

[EACCES] Разрешение поиска отклонено для каталога, указанного в префиксе пути файла нового файла процесса, или новый файл образа процесса отклоняет разрешение на выполнение.

Дальнейшее обоснование можно найти по адресу: https://security.stackexchange.com/questions/66550/unix-execute-permission-can-be-easily-bypassed-is-it -superfluous или-Что-кнопки

0
ответ дан 10 August 2018 в 10:14

Не думай об этом так. Могу ли я выполнить этот файл? Подумайте об этом так: Кто может выполнить этот файл?

Если компьютер принадлежит вам, и файл принадлежит вам, я уверен, что вы можете его выполнить. Возможно, вам захочется взглянуть дальше на команды типа chmod и chown и права доступа к файлам.

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

1
ответ дан 13 August 2018 в 16:37
  • 1
    Да, я знаю о них. Это означает, что я (владелец) всегда могу его выполнить. Правильно? Затем установить файл как исполняемый файл для группы или мира или обоих? – Ashfame 10 February 2011 в 23:05

Убедитесь, что вы не сбиваете с толку «выполнение сценария оболочки» с помощью «запускать сценарий оболочки с помощью sh».

На file.sh это не будет зависеть от прав доступа к файлам ]:

  sh file.sh  

Выполняется sh (который разрешает программу / bin / sh ), который читает file.sh и выполняет его код.

Разрешения на файл будут иметь эффект, если вы действительно выполняете сам скрипт :

  ./ file.sh  

Обратите внимание, что разрешения файлов не поддерживаются файловыми системами, отличными от Linux, например FAT. Таким образом, даже если вы запустите chmod -x file.sh , файл все равно будет иметь прежние разрешения.

Выполнение разрешения выполняется файловой системой. Но программы также могут «выполнять» код, читая содержимое файла, которое обходит разрешения файловой системы «execute».

13
ответ дан 13 August 2018 в 16:37
  • 1
    Я понимаю вашу мысль. Но тогда это для группы или мира или для обоих? – Ashfame 10 February 2011 в 23:04
  • 2
    @Ashfame Если вы установите разрешение на выполнение, сценарий может запускаться непосредственно пользователями, у которых есть это разрешение, независимо от того, есть ли у них это на основе группы, мира или владельца. Но даже люди без разрешения на исполнение могут выполнить его, вызвав другую программу (например, bash ), чтобы выполнить выполнение - чтобы заблокировать, что вам нужно будет удалить их чтение Что ж. – j-g-faustus 10 February 2011 в 23:37
  • 3
    Если вы установите разрешение на выполнение, сценарий может запускаться непосредственно пользователями, у которых есть это разрешение, независимо от того, есть ли у них это на основе группы, мира или владельца . Но как разрешение предоставляется другим пользователям, проверяя разрешение на выполнение? И у меня есть второй момент. Вы имеете в виду отнять их разрешение на чтение скрипта, чтобы они не могли обработать его через bash. Правильно? – Ashfame 10 February 2011 в 23:58
  • 4
    @Ashfame На точке разрешения чтения да. О том, как вы могли бы называть в терминале что-то вроде sudo chmod g + x myfile.sh , чтобы добавить разрешения на выполнение для группы файлов. См. [D0] Учебник по разрешению файлов . Чтобы управлять разрешениями для нескольких пользователей одновременно, вы должны использовать группы, например, Управление группами . – j-g-faustus 11 February 2011 в 01:43
  • 5
    что я имел в виду, когда мы добавляем исполняемые разрешения в GUI, то это для кого? владелец / группа / мир? – Ashfame 11 February 2011 в 01:57

Сценарий exec ядра Linux не работает с EACCES , если файл не является исполняемым

Пока вы можете делать sh myprog. sh , пытаясь запустить программу как ./ myprog.sh не может работать, поскольку когда вы это делаете:

Это можно проверить с помощью main.c :

  #define _XOPEN_SOURCE 700 #include & lt; errno.h & gt;  #include & lt; stdio.h & gt;  #include & lt; unistd.h & gt;  int main (void) {char * argv [] = {"myprog", NULL};  char * envp [] = {NULL};  int ret;  ret = execve ("myprog.sh", argv, envp);  PError ( "execve");  printf ("% d \n", errno);  printf ("% d \n", EACCES);  }  

и myprog.sh :

  #! / bin / sh эхо работает  

Если myprog.sh не является исполняемым, main терпит неудачу с:

  execve: Permission denied 13 13  [  ! d31] 

Протестировано в Ubuntu 17.10, gcc -std = c99 .

POSIX 7 упоминает, что при:

Функции exec , за исключением fexecve (), не удастся, если:

[EACCES] Разрешение поиска отклонено для каталога, указанного в префиксе пути файла нового файла процесса, или новый файл образа процесса отклоняет разрешение на выполнение.

Дальнейшее обоснование можно найти по адресу: https://security.stackexchange.com/questions/66550/unix-execute-permission-can-be-easily-bypassed-is-it -superfluous или-Что-кнопки

0
ответ дан 13 August 2018 в 16:37

Другие вопросы по тегам:

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