Я только что сделал 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.