, почему терминал терминала ubuntu не может выполнить приложение

6

мой телефон buntu - это nexus 4. Следующий код не выполняется.

Код

#include <stdio.h>
#include <stdlib.h>

int main()
{
    printf("Hello world!\n");
    return 0;
}

Compile

$ arm-linux-gnueabihf-g++ -static -o hello main.c
  • Скопируйте файлы в каталог /home/phablet/Downloads
  • открыть терминал терминала ubuntu,
  • Изменить атрибуты файла ( chmod a+x ./hello )
  • выполнить ./hello

но телефон Ubuntu Prompt дает следующую ошибку

./hello permission denied

почему?

    
задан suer 03.12.2014 в 03:56
источник

1 ответ

6

Я что-то понял. Причина, по которой вы не можете запускать двоичные файлы из вашего домашнего каталога, заключается в том, что профиль apparmor терминала предотвращает это. Если вы посмотрите на выход dmesg после попытки запустить двоичный файл, вы должны увидеть что-то вроде этого:

[140792.471956] type=1400 audit(1431182253.050:175): apparmor="DENIED" operation="exec" profile="com.ubuntu.terminal_terminal_0.7.70" name="/home/phablet/apps/git/usr/bin/git" pid=28134 comm="bash" requested_mask="x" denied_mask="x" fsuid=32011 ouid=32011

Что только говорит вам, что apparmor отказал терминалу в запуске вашей программы, и среди прочего он сообщает вам имя профиля apparmor (com.ubuntu.terminal_terminal_0.7.70) терминала. Чтобы разрешить запуск произвольных двоичных файлов, нам нужно изменить этот профиль.

Теперь вы обычно найдете профили apparmor в /etc/apparmor.d, но это не всегда происходит на телефоне ubuntu. Кажется, что особенно пакет кликов (который является одним из терминалов) делает свою собственную вещь и помещает файлы в разные места. Я обнаружил несколько местоположений для профиля терминала apparmor, а правый для редактирования выглядит следующим образом:

sudo vi /var/lib/apparmor/profiles/click_com.ubuntu.terminal_terminal_0.7.70

Должен быть такой раздел:

# autopilot runs things in out of ~/autopilot/fakeenv, so lets allow running
# things pretty much everywhere but avoid exec conflicts with the autopilot
# include file which has this rule:
# owner @{HOMEDIRS}/autopilot/fakeenv/*/.local/share/@{APP_PKGNAME}/** mrwklix,
/[^h]** pix,
/[^h][^o][^m][^e]** pix,
@{HOMEDIRS}/*/autopilot/[^f][^a][^k][^e]*/** pix,

Который уже должен разрешить почти все, что должно быть выполнено под / home, если я понимаю его соответствие. Комментарий, похоже, подразумевает то же самое. Тем не менее, по причинам, которые убегают от меня, это не работает. Чтобы заставить его работать, вы можете просто удалить (или закомментировать) весь этот раздел и заменить его на:

/** pix,

Это должно позволить терминальному приложению всегда запускать все, везде. После этого перезапустите apparmor:

sudo service apparmor restart

и вам должно быть хорошо идти.

    
ответ дан rakete 09.05.2015 в 17:18