Я только что сделал chmod -x chmod


Ответы:


43

В Linux:

/lib/ld-linux.so.2 /bin/chmod +x /bin/chmod

http://www.slideshare.net/cog/chmod-x-chmod


bindbn, я собирался опубликовать ту же ссылку :-), но я читал сам, поскольку я новичок в материалах Unix / Linux!
— Рихатум

2
На 64-битном дистрибутиве вы можете использовать /lib64/ld-linux-x86-64.so.2вместо этого. ldd /bin/chmodдолжен точно указать, какой компоновщик запустить.
— goldPseudo 11.10.10

Я бы написал минимальную программу, которая использует chmod (2), но это круче
— adamo

1
@Stefan: From man ld-linux.so: «ld.so [и ld-linux.so] загружает общие библиотеки, необходимые программе, подготавливает программу к запуску и затем запускает ее». ( ld.soдля a.outформатируемых исполняемых файлов и ld-linux.soдля формата ELF.)
— Приостановлено до дальнейшего уведомления.

1
@Stefan: Ядро на самом деле не знает, как загружать и выполнять динамически связанные исполняемые файлы, потому что оно очень сложное и следует glibc, а не ядру. ld-linux.soявляется своего рода гибридом исполняемых файлов / библиотек, является статически связанным, работает в пользовательском пространстве и отвечает за загрузку динамически связанных исполняемых файлов и всех их зависимостей, а затем их запуск.
— Джулиано


18

Это основывается на том факте, что права доступа к файлу назначения сохраняются, а не к исходному файлу при его копировании. Мы «заимствуем» разрешения ls:

cp /bin/ls /tmp/chmod.tmp
cp /bin/chmod /tmp/chmod.tmp
mv /tmp/chmod.tmp /bin/chmod

Я думаю, что ваш первый cpдолжен иметь флаг -p
— Riking


Это было похоже на решение, которое я придумал, но после cpзапуска исполняемого файла я просто catпоместил содержимое chmodво временный файл.
— SpellingD


7

setfacl -m u::rx /bin/chmod

... предоставит владельцу разрешения на выполнение.

Но /lib/ld-linux.so.2уловка аккуратна. :)


5

Это странно ... Я видел что-то подобное несколько дней назад через чей-то твит ...

http://www.slideshare.net/cog/chmod-x-chmod


Ссылки на другие сайты бесполезны, так как в какой-то момент ссылка станет неработающей. Это все равно что сказать кому-то, чтобы гуглить ответ.
— Фил Ханнент

@Phil Hannent: Я тоже видел это слайд-шоу всего три дня назад, так что это была моя первая мысль, был ли ОП одним из претендентов.
— Болдевин

То же самое, только что видел это на Reddit несколько дней назад ...
— Dentrasi 11.10.10

4

Если вы находитесь в системе, которая /bin/chmodне может быть загружена динамическим компоновщиком:

# /bin/mv /bin/chmod /bin/chmod.tmp
# install -p -m 755 /bin/chmod.tmp /bin/chmod

Это работает в моей системе MacOS X.


2

/ rescue / chmod 555 / bin / chmod

Я думаю, что вы также можете использовать mtree.


Это было бы мое любимое решение. К сожалению, это не работает с Linux.


1

создайте новый chmod и используйте его для оригинала

umask 000
cat chmod > ~/my-chmod
~/my-chmod a+x chmod

Установка umask 000 не даст разрешения на выполнение файла при его создании. В лучшем случае он получит разрешения rw-rw-rw-.
— Барри Браун

2
@Barry: На самом деле это зависит от режима, переданного creat (2) / open (2) / mkdir (2) / etc. Если umask == 0 и системному вызову, который создает файл, дается 0777 для режима, то в файле будут включены биты выполнения. Например, компоновщики / компиляторы пропускают 0777 при записи «исполняемого файла» (например, (umask 000;gcc -o foo foo.c)создаст fooрежим 777). Однако многие (большинство?) Оболочек проходят 0666, когда открывают / создают файлы для перенаправления, что означает, что этот ответ не будет работать под многими оболочками.
— Крис Джонсен
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.