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

Ну вы блин даете, strace пытается прочесть ASCII текст как бинарный код...

ms-dos128
()
Ответ на: комментарий от xtraeft

Не верю. noexec на исполнение скриптов не влияет, так как они интерпретируются сторонней программой. У меня вот все работает

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

хоть это ничего и не меняет, но надо было:

# echo '#!/bin/sh'>t ; echo 'echo lol' >>t

-rwxr-xr-x 1 root root 19 Окт 15 16:47 t

теперь все точно

linuxnewb
() автор топика

Если ничего не поможет, стоит посмотреть выхлоп

test@home:~$ strace -oout sh 
$ ./t
lol
$ exit

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

P.S. подозреваю, что что-то напутано в binfmt-support

at ★★
()

bash: ./t: Отказано в доступе

Самое странное — это ошибка «Отказано в доступе». В худшем случае должен быть «Exec format error» или что-то вроде «не могу запустить бинарный файл». Но «Отказано в доступе» — это явно кто-то мешает.

Какой дистрибутив? Установлен ли selinux? Что пишет `sestatus`? Установлен ли AppArmor? Что пишет `apparmor_status`?

Eсли файл удалить и снова проверить? Что пишет:

rm -f t; echo 'echo lol' > t; chmod 755 t; ./t

Бинарные файлы в этом же месте запустить получается? Что пишет:

rm -f t; cat /bin/ls > t; chmod 755 t; ./t

anonymous
()
Ответ на: комментарий от anonymous
# apparmor_status
apparmor module is loaded.
0 profiles are loaded.
0 profiles are in enforce mode.
0 profiles are in complain mode.
0 processes have profiles defined.
0 processes are in enforce mode :
0 processes are in complain mode.
0 processes are unconfined but have a profile defined.
linuxnewb
() автор топика

linux-6:/root # ./t

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

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

Можно также увидеть вывод остальных команд?

cd /root
sestatus
rm -f t; echo 'echo lol' > t; chmod 755 t; ./t
rm -f t; cat /bin/ls > t; chmod 755 t; ./t

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

селинукса нету, все работает, кроме ./t

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

# echo $PATH .:/root:/home/user/bin:/usr/local/bin:/usr/bin:/sbin:/usr/sbin:/bin:/usr/bin/X11:/usr/X11R6/bin:/usr/games

Попробуй так: # /root/t
Должно работать, а "./t" работать не должно.

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

во-первых, с хрена ли не должно, если все время работало? во-вторых:

# /root/t
bash: /root/t: Отказано в доступе

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

С binfmt-support точно все в порядке? Удалось повторить ситуацию

test@home:~$ ./test
bash: ./test: Отказано в доступе
test@home:~$ sh ./test
123
test@home:~$ sh test
123

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

Как уже сказал анонимус, очень странно, что у вас execve() возвращает EACCES (Permission denied), должно быть «ENOEXEC (Exec format error)»

То есть баш сначала всегда делает execve() на файл, если получает в ответ «ENOEXEC», то читает начало файла, если там «#!», то вызывает соотв. интерпретатор, иначе считает, что это shell-скрипт.

Если в начало файла добавить «#!/bin/bash», то начинает работать?

С утра с профилями apparmor что-нибудь делали?

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

Нет, я просто добавил обработчик нового бинарного формата, что то типа:

cat /root/lol
package lol
interpreter /home/test/sh
magic echo
Т.е. заставил все файлы, начинающиеся с echo исполнятся /home/test/sh.

Вначале я подумал, что у рута битый шел. Но тогда бы он не смог залогинится. Хотя, если это убунту, можно сделать sudo bash

Проверяется

getent passwd root
root:x:0:0:root:/root:/bin/bash
Последнее поле это шел рута.

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

# echo $PATH
.:/root: <...>

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

Поставь систему заново и больше не делай того что не положено. Тогда всё будет работать нормально.

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

Нет, я просто добавил обработчик нового бинарного формата [...] Т.е. заставил все файлы, начинающиеся с echo исполнятся /home/test/sh.

Это могло бы объяснить баг с шелл-скриптом. Но не объясняет:

# rm -f t; cat /bin/ls > t; chmod 755 t; ./t
bash: ./t: Отказано в доступе
Ведь, очевидно, cat и ls у него работают.

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

Обработчики бинарных форматов не действуют на elf или a.out. Т.е. (в случае, который я показал) будут нормально работать бинарники и скрипты, которые не начинаются с echo.

Хотя сейчас думаю, что неправильно указан рутовский шел, но ТС переходит под рута через sudo bash, поэтому багов не видит.

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

Обработчики бинарных форматов не действуют на elf или a.out. Т.е. (в случае, который я показал) будут нормально работать бинарники и скрипты, которые не начинаются с echo.

Тогда почему копия ls тоже НЕ запускается?

Хотя сейчас думаю, что неправильно указан рутовский шел, но ТС переходит под рута через sudo bash, поэтому багов не видит.

Тогда почему копия ls тоже НЕ запускается?

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

то есть, даже читать не пробует

Интересно. Мистика. Правда, очень интересно... Может всё-таки есть что-то необычное в текущих опциях монтирования? Что рассказывает?:

awk '$2 == "/" || $2 == "/root"' /proc/mounts

И просто для порядка, что пишет с чистым PATH-ом? Будут ли работать те же самые команды после:

export PATH=/bin:/usr/bin

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

Честно говоря не увидел где ТС пытается запустить копию ls.

Можно предположить что /root это отдельная партиция, монтируемая с noexec, но ИМХО это нереально.

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

Честно говоря не увидел где ТС пытается запустить копию ls.

По моей просьбе, тут: Отказано в доступе (комментарий)

Можно предположить что /root это отдельная партиция, монтируемая с noexec, но ИМХО это нереально.

Да мне тоже в это слабо верится, но мало ли, может у него туда tmpfs с noexec смонтирован. На всякий случай просьба показать нужные строки из /proc/mounts тут.

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

По моей просьбе, тут

Да, ступил.

А apparmor такое выкинуть может? Я им никогда не пользовался. Иначе мистика ;(

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

А apparmor такое выкинуть может?

Вроде, не должен, там же ни один профиль не загружен.

Иначе мистика ;(

В общем, ждем ответа ТС на вопрос про /proc/mounts, а там уже будем дальше гадать. Если в /proc/mounts проблему не найдём, то ТСа надо будет произвести в шаманы за достижение в линуксе невозможного. :)

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

И PATH какой то левый. Случайно это сделать невозможно.

PATH вполне мог быть сделан таким специально. Возможно ТС хранит скрипты в /root-е и часто запускает их оттуда, потому он и заметил баг.

PS: Кроме noexec есть много маловероятных причин таких глюков. Но я надеюсь, что это не они.

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

Нет, ничего такого не делал. И да, я не админ, выхлоп strace не понял, но «EACCES (Permission denied)» мне тоже не понравилось. Шебанг уже обсудили, он не влияет.

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

Так и скажи: ТС — ССЗБ. Это надо ж додуматься, включать в PATH первым номером текущую директорию, да еще в рутовском PATH!

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

echo $PATH .:/root

Ничего себе…

Ничего особенного, вообще-то. PATH=.:/root:$PATH Хорошо тем, что изменения действуют до первого logout.

Я все-таки не совсем идиот, если бы очевидной причиной была моя собственная криворукость, я бы упомянул об этом.

linuxnewb
() автор топика

Я тут подумал, а к тебе на сервер никто не вламывался? Я помню был руткит, который подменял системные top, ls, sh и другие базовые утилиты, после чего все они скрывали зловредные процессы.

Может что-то из этой серии? не родной ls, sh? чексуммы проверить и сравнить с репозиторием?

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

Сочинителям руткитов даже выдумывать ничего не надо: ты сам все сделал за них. И юзер какой-нибудь возьмет, да впихнет в хомяк вайлик ls с содержанием nohup rm -rf /, вот ты и приплывешь, когда попытаешься посмотреть содержимое его директории ☺

И все-таки покажи выхлоп mount

Eddy_Em ☆☆☆☆☆
()
Последнее исправление: Eddy_Em (всего исправлений: 1)
Ответ на: комментарий от linuxnewb

Ничего особенного, вообще-то.

Так всё-таки, что в том магическом рутовом шелле пишет команда?:

awk '$2 == "/" || $2 == "/root"' /proc/mounts

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

Или хотя бы команда:

grep ' / \| /root ' /proc/mounts

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

выхлоп mount

Забыл. Там ext4. В fstabs указан defaults. mount показывает rw, relatime, barrier=1, data=ordered и все. Завтра уточню

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

Т.е. заставил все файлы, начинающиеся с echo исполнятся /home/test/sh

ок, завтра проверю

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