chmod -x /bin/chmod

chmod -x /bin/chmod

Представьте, что вы управляете веб-сервером, root-доступ к которому имеют еще несколько человек. Кому-то из них в голову приходит "превосходная" идея выполнить команду "chmod -x /bin/chmod". Как теперь вернуть все на свои места без использования интернета?

Правильные ответы

Если пакет coreutils остался в кэше apt, его можно переустановить:

$ sudo apt-get install --reinstall coreutils

Также можно использовать различные реализации chmod в скриптовых языках программирования:

$ perl -e ‘chmod 0755, “chmod”’
$ python -c "import os;os.chmod('/bin/chmod', 0777)"
$ node.js: require("fs").chmodSync("/bin/chmod", 0755);

Либо написать новый chmod на Си и скомпилировать его:

$ cat - > chmod.c
int main () { }
^D
$ cc chmod.c
$ cat /bin/chmod > a.out

$ cat chmod > new_chmod
$ cat - > restore_chmod.c
#include <sys/types.h>
#include <sys/stat.h>
int main () { 
chmod( "/bin/chmod", 0000777 );
}
^D
$ cc restore_chmod.c
$ ./a.out

Можно использовать BusyBox, который имеет свою версию chmod в составе

$ busybox chmod +x /bin/chmod

Или использовать GNU tar:

$ tar --mode 0777 -cf chmod.tar /bin/chmod
$ tar xvf chmod.tar

$ tar --mode 555 -cvf - chmod | tar xvf -

$ tar -cvf chmod.tar chmod

Так же вы можете воспользоваться соседней машиной и выполнить такую команду:

$ tar --preserve-permissions -cf chmod.tar chmod

Затем передать файл на локальную машину и распаковать chmod:

$ tar xvf chmod.tar

Также вы можете запаковать chmod в cpio-архив, а затем исправить заголовок архива изменив права доступа к файлу (они хранятся в байтах с 19 по 24 архива:

$ echo chmod | cpio -o |\
perl -pe 's/^(.{21}).../${1}755/' | cpio -i -u

Вы можете использовать линкер для запуска команды:

$ alias chmod='/lib/ld-2.11.1.so ./chmod'

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

Используйте Emacs:

Ctrl+x b > *scratch*
(set-file-modes "/bin/chmod" (string-to-number "0755" 8))
Ctrl+j

Источник

Ваша работа или увлечение связаны freebsd? Тогда загляните на форум программистов и сисадминов cyberforum.ru. Здесь вы сможете задать любой вопрос по теме установки, настройки и администрирования этой ОС.


Next entry

Previous entry

Similar entries

Комментарии

  1. Alex Efros
    Alex Efros 12/30/2012 15:56

    Самый простой вариант - запуск через линкер. Но там во-первых непонятно зачем приведён alias (это вроде как одноразовая операция) и во-вторых опечатка: chown вместо chmod.

  2. Free0N
    Free0N 01/09/2013 23:06

    Сдается мне, скопировать содержимое chmod-а в файл, уже имеющий +x будет попроще: mv chmod{,.bak} && cp cp chmod && cat chmod.bak > chmod

Добавить комментарий