LINUX.ORG.RU

Отказано в доступе


0

1

Не, ну нормально, да?

linux-6:/root # echo 'echo lol' > t
linux-6:/root # chmod 755 t
linux-6:/root # sh t
lol
linux-6:/root # ./t
bash: ./t: Отказано в доступе

Почему могло поломаться? Уже не знаю, что и думать.



Последнее исправление: linuxnewb (всего исправлений: 1)

И да, «с утра все работало»

linuxnewb
() автор топика
Ответ на: комментарий от Eddy_Em

А я думал, что баш без строчки «#!/bin/bash» пошлет нафиг.

по дефолту оно /bin/sh вызывает. А «нет прав» может быть потому, что само /bin/sh не исполняемое. Если его нет, ЕМНИП напишет «не найдено».

drBatty ★★
()
Ответ на: комментарий от Homura_Akemi

нет, это документированное поведение. Вот только не помню где пруф...

drBatty ★★
()
Ответ на: комментарий от drBatty

может мне смайлики ставить?

алсо, $SHELL и есть то самое «оно», которое «по дефолту оно /bin/sh вызывает». И, теоретически, поскольку само является шеллом, может не вызывать sh а попытаться выполнить само.

linuxnewb
() автор топика
Ответ на: комментарий от linuxnewb

алсо, $SHELL и есть то самое «оно», которое «по дефолту оно /bin/sh вызывает». И, теоретически, поскольку само является шеллом, может не вызывать sh а попытаться выполнить само.

вообще-то /bin/sh и /bin/bash это разные вещи на самом деле (у меня /bin/sh это ссылка на bash), а $SHELL это вообще говоря переменная, в которой полный путь к _текущей_ оболочке. Почему ты думаешь, что будет вызвано именно $SHELL - мне непонятно. ЕМНИП должно вызываться /bin/sh, но мне лениво проверять, что вызывается на самом деле (ибо у меня /bin/sh -> bash)

drBatty ★★
()
Ответ на: комментарий от drBatty

А «нет прав» может быть потому, что само /bin/sh не исполняемое.

Не-а. Потому, как

sh t работает, да

NightSpamer
()
Ответ на: комментарий от linuxnewb

noexec на разделе, где файл лежит, не обязательно корень. Смотри:

# touch /dev/shm/test
# ln -s /dev/shm/test ./t
# echo "echo lol" > t
# ./t
-su: ./t: Отказано в доступе
# sh t
lol
# mount | grep shm
shm on /dev/shm type tmpfs (rw,nosuid,nodev,noexec,relatime)

NightSpamer
()
Ответ на: комментарий от drBatty

будет вызвано именно $SHELL

Нет. Он _может_ быть вызван. Теоретически. Поскольку «$SHELL это вообще говоря ... полный путь к _текущей_ оболочке. »

linuxnewb
() автор топика
Ответ на: комментарий от linuxnewb

А я не менее специально написал, что ./t может быть симлинком на файл, который может находиться где угодно. Поведение при этом такое, как и описано. ./t - отказано в доступе; sh t - выполняется.

NightSpamer
()
Ответ на: комментарий от Cancellor

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

и да, GoboLinux не FHS

linuxnewb
() автор топика
Ответ на: комментарий от NightSpamer

А я не менее специально написал, что ./t может быть симлинком на файл, который может находиться где угодно. Поведение при этом такое, как и описано. ./t - отказано в доступе; sh t - выполняется.

в принципе да, sh t выполнится в любом случае, если конечно sh - это исполняемый файл. Что такое t роли не играет. А вот ./t - тут важно и исполняемость sh и /bin/sh (тоже разные вещи на самом деле, у меня /bin почти в конце $PATH)

drBatty ★★
()
Ответ на: комментарий от Homura_Akemi

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

at ★★
()
Ответ на: комментарий от mopsene

Эти погромисты ничего не понимают в кампутерах и системах под которые пишут. Ок.

anonymous
()
Ответ на: комментарий от linuxnewb

А что за система/ядро? Слышал, что в 3.5 что-то изменилось. Проверить не могу.

at ★★
()
Ответ на: комментарий от BaBL
# strace ./t
execve("./t", ["./t"], [/* 89 vars */]) = -1 EACCES (Permission denied)
dup(2)                                  = 3
fcntl(3, F_GETFL)                       = 0x8002 (flags O_RDWR|O_LARGEFILE)
fstat(3, {st_mode=S_IFCHR|0600, st_rdev=makedev(136, 0), ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7facb9145000
lseek(3, 0, SEEK_CUR)                   = -1 ESPIPE (Illegal seek)
write(3, "strace: exec: Permission denied\n", 32strace: exec: Permission denied
) = 32
close(3)                                = 0
munmap(0x7facb9145000, 4096)            = 0
exit_group(1)                           = ?

Как это прочитать?

linuxnewb
() автор топика
Ответ на: комментарий от Homura_Akemi

Тяжелое наследие unix-ов ;) Меня на соляре это достало, но ничего не сделаешь из-за обратной совместимости.

at ★★
()
Ответ на: комментарий от linuxnewb

реально очень похоже что у тебя execute не стоит на файле.

давай

ls -lh ./t

я его в теме не видел пока

BaBL ★★★★★
()
Ответ на: комментарий от linuxnewb

чет он у тебя много весит... «echo lol» - это 8 байт

вообще хрень какая-то... должно бы работать. Разве что действительно selinux какой-нибудь блокирует.

BaBL ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.