Чому не можна виконати root, якщо виконувані біти не встановлені?


26

rootКористувач може записати у файл, навіть якщо його writeдозволи не встановлені.

rootКористувач може прочитати файл, навіть якщо його readправа не встановлені.

rootКористувач може cd потрапити в каталог, навіть якщо його executeдозволи не встановлені.

rootКористувач не може виконати файл, якщо його executeправа не встановлені.

Чому?

user$ echo '#!'$(which bash) > file
user$ chmod 000 file
user$ ls -l file
---------- 1 user user 12 Jul 17 11:11 file
user$ cat file                      # Normal user cannot read
cat: file: Permission denied
user$ su
root$ echo 'echo hello' >> file     # root can write
root$ cat file                      # root can read
#!/bin/bash
echo hello
root$ ./file                        # root cannot execute
bash: ./file: Permission denied

Відповіді:


25

Якщо коротко, тому що біт виконання вважається спеціальним; якщо він не встановлений взагалі , то файл вважається не є виконуваним і , таким чином , не може бути виконана.

Однак якщо встановлено навіть ОДИН БІТ виконуваного біта, він може і виконає його.

Дотримуйтесь:

caleburn: ~/ >cat hello.sh
#!/bin/sh

echo "Hello!"

caleburn: ~/ >chmod 000 hello.sh
caleburn: ~/ >./hello.sh
-bash: ./hello.sh: Permission denied
caleburn: ~/ >sudo ./hello.sh 
sudo: ./hello.sh: command not found

caleburn: ~/ >chmod 100 hello.sh
caleburn: ~/ >./hello.sh
/bin/sh: ./hello.sh: Permission denied
caleburn: ~/ >sudo ./hello.sh 
Hello!

0

У старих інструментах днів системного адміністрування жили в /etcтаких , як /etc/restore, /etc/rrestore, /etc/init, /etc/haltі т.д. Уявіть собі , що б сталося , якби root«s PATHбув встановлений /etc:/binі rootпобіг passwd.

Це не спрацювало б правильно.

Що ще гірше, у старі часи двійкові виконувані файли не мали магічних заголовків, тому перевірити, чи двійковий файл був виконуваним, насправді неможливо, окрім перевірки бітів дозволу. Таким чином, вони робили файли недійсними цілями exec*, якщо вони насправді не були файлами (без каталогів тощо) і мали принаймні один біт виконання.

* Перевірка могла бути в execvp, що є функцією в режимі користувача.

Це все ще корисна перевірка, оскільки теоретично що-небудь може бути сценарієм оболонки, так навіщо брати це?

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.