3

Я хочу запустить скрипт прямо из общего ресурса Windows. Windows-машина работает под управлением Windows 7, и я пытаюсь запустить скрипт из Ubuntu 13.10 в той же локальной сети. Я попытался использовать скрипт bash, а также скрипт python, и когда я его запускаю, у меня появляется следующая ошибка:

zsh: permission denied: ./bc.sh

Общий ресурс, связанный со скриптом, монтируется так:

sudo mount -t cifs -o username=user,passwordpass=,exec,rw,users,file_mode=0777,dir_mode=0777 //192.168.0.3/folder /mnt/Win7

Скрипт имеет следующие права:

-rwxrwxrwx 0 root root       24 Dec 10 20:50 bc.sh

И содержит только простую команду:

#!/bin/bash
echo "Test"

Я пытался запустить его с sudo, но не сработало.

sudo: unable to execute ./bc.sh: Permission denied

Я тоже пробовал с bash вместо zsh, но безуспешно.

Есть идеи о том, что мне не хватает?

Благодарю.

2 ответа2

0

Вы должны выполнить скрипт как

       sh path/to/bc.sh
0

Насколько я знаю, существует три возможных причины, по которым скрипт может не работать при непосредственном вызове.

  1. Бит e x ecute не был установлен.

    [liveuser@localhost-live ~]$ ls -l ~/*.sh
    -rw-rw-rw-. 1 liveuser liveuser 28 Mar 25 07:55 /home/liveuser/testnox.sh
    -rwxrwxrwx. 1 liveuser liveuser 28 Mar 25 07:23 /home/liveuser/test.sh
    [liveuser@localhost-live ~]$ ~/test.sh
    Hello world.
    [liveuser@localhost-live ~]$ ~/testnox.sh
    bash: /home/liveuser/testnox.sh: Permission denied
    [liveuser@localhost-live ~]$ sh ~/testnox.sh
    Hello world.
    

    Обратите внимание, что вы все равно можете запустить его, вызвав sh напрямую, если у вас есть права на чтение. Также проверьте, относится ли бит x к вам. Если файл принадлежит пользователю root и он отображается как -rwx------. тогда вы должны использовать sudo для запуска.

  2. Применяется правило SELinux, которое запрещает выполнение файла. Я не слишком много знаю об этом, но использование sudo setenforce 0 заранее может помочь в этом случае. Не забудьте использовать sudo setenforce 1 когда закончите.

    [liveuser@localhost-live ~]$ sestatus
    SELinux status:                 enabled
    SELinuxfs mount:                /sys/fs/selinux
    SELinux root directory:         /etc/selinux
    Loaded policy name:             targeted
    Current mode:                   enforcing
    Mode from config file:          enforcing
    Policy MLS status:              enabled
    Policy deny_unknown status:     allowed
    Max kernel policy version:      30
    [liveuser@localhost-live ~]$ sudo setenforce 0
    [liveuser@localhost-live ~]$ sestatus
    SELinux status:                 enabled
    SELinuxfs mount:                /sys/fs/selinux
    SELinux root directory:         /etc/selinux
    Loaded policy name:             targeted
    Current mode:                   permissive
    Mode from config file:          enforcing
    Policy MLS status:              enabled
    Policy deny_unknown status:     allowed
    Max kernel policy version:      30
    [liveuser@localhost-live ~]$ sudo setenforce 1
    [liveuser@localhost-live ~]$ sestatus
    SELinux status:                 enabled
    SELinuxfs mount:                /sys/fs/selinux
    SELinux root directory:         /etc/selinux
    Loaded policy name:             targeted
    Current mode:                   enforcing
    Mode from config file:          enforcing
    Policy MLS status:              enabled
    Policy deny_unknown status:     allowed
    Max kernel policy version:      30
    
  3. Дерево, в котором находится скрипт, было смонтировано с помощью noexec , который во многих случаях используется по умолчанию. Позаботьтесь о том, что имеет значение (no)exec статус монтирования , и что mount --bind иногда не копирует ни статус родителя точки монтирования, ни статус исходного тома.

    [liveuser@localhost-live ~]$ ls -l original
    total 4
    -rwxrwxr-x. 1 liveuser liveuser 28 Mar 25 08:14 test.sh
    [liveuser@localhost-live ~]$ ls -l alias
    total 4
    -rwxrwxr-x. 1 liveuser liveuser 28 Mar 25 08:14 test.sh
    [liveuser@localhost-live ~]$ original/test.sh
    Hello world.
    [liveuser@localhost-live ~]$ alias/test.sh
    bash: alias/test.sh: Permission denied
    [liveuser@localhost-live ~]$ sh alias/test.sh
    Hello world.
    [liveuser@localhost-live ~]$ sudo mount -o remount,exec --bind original alias
    [liveuser@localhost-live ~]$ alias/test.sh
    Hello world.
    

Одна из причин, по которой Linux может разочаровывать, состоит в том, что сообщения об ошибках не дают подробностей, необходимых для поиска решения. По моему мнению, просто Permission denied недостаточно. Должно быть указано фактическая причина, например: Permission denied: /home/liveuser/alias was mounted with noexec . Тогда вы бы знали, как решить проблему.

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

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