Chmod: Permission denied

Series: publications July 21, 2016

Jak zmienić uprawnienia do pliku/katalogu bez dostępu do polecenia chmod? Co znaczy w tym przypadku brak dostępu? Dokładniej mówiąc brak praw wykonywania. Oczywiście zakładamy, że mamy możliwość użycia innych narzędzi systemowych za pomocą których istnieje możliwość przywrócenie poprawnych uprawnień.

W przypadku problemów przy próbie zmiany uprawnień pojawia się następująca informacja:

ls -l
-rw------- 1 root root     0 Feb 19 09:21 file

chmod 0700 file
bash: /bin/chmod: Permission denied

Całe szczęście chmod to nie jedyne narzędzie do zmiany uprawnień. Aby rozwiązać ten problem system dostarcza kilka sposobów, które omówię poniżej.

Spis treści

Możliwe rozwiązania

Polecenie cp

Pierwszym sposobem poradzenia sobie z problemem jest wykorzystanie właściwości polecenia cp. Otóż można wykorzystać jakikolwiek plik czy polecenie mające prawa wykonywania i na jego podstawie zmienić uprawnienia dla chmod:

cp /bin/ls chmod.01
cp /bin/chmod chmod.01
./chmod.01 700 file

Polecenie cat

Drugi sposób jest podobny choć tutaj wykorzystany jest narzędzie cat:

cp -a /bin/ls chmod.01
cat /bin/chmod > chmod.01
./chmod.01 700 file

Perl/Python

Trzecim sposobem jest wykorzystanie interfejsu systemowego dostępnego w narzędziach takich jak perl czy python:

perl -e 'chmod 0700, "/root/file";'
>>> import os
>>> os.chmod("/root/file", 0700)

Polecenie install

Czwarty sposób wykorzystuje narzędzie install, które służy m.in. do kopiowania plików i ustawiania atrybutów (dwa sposoby wykorzystania):

install -o root -g root -m 0700 /bin/chmod chmod.01
install -m +rwx /bin/chmod chmod.01

Busybox

Na pomoc może przyjść także busybox:

/bin/busybox chmod 0700 file

Coreutils (Debian)

Kolejnym sposobem jest przeinstalowanie paczki coreutils (w dystrybucji Debian) zawierającej m.in. program chmod:

apt-get install --reinstall coreutils

ACL

Można także wykorzystać rozszerzone atrybuty i dostępne dla nich polecenie setfacl:

setfacl --set u::rwx,g::---,o::--- /root/file

built with Jekyll and trimstray blog — read the fine print