Почему пользователю root запрещен доступ к файлу?

Я хотел бы понять, в каких случаях пользователю root может быть отказано в доступе к файлу. Я работаю на машине, которую я не настраивал (на моем персональном ноутбуке у меня, очевидно, нет этой проблемы), и у меня возникла эта проблема, которую можно свести к следующему:

touch test.sh &&\
echo 'echo $PATH' >> test.sh &&\
sudo sh test.sh

будет дать ошибку: sh: 0: Can't open test.sh (bash: test.sh: Permission denied с bash).

  • Я попытался проверить, был ли я под SELinux, запустив getenforce , но команда не была найдена.

  • Я пробовал sudo chown root test.sh, но выдает ошибку: chown: cannot access 'test.sh': Permission denied.

  • То же самое произошло при попытке изменить владельца каталога.

Я не обязательно прошу решение общей проблемы, но я хочу понять, как возможно, что root не имеет доступа.


РЕДАКТИРОВАТЬ

На том же компьютере, если я создаю локального пользователя (все вышеперечисленное было сделано как пользователь, вошедший в систему через общую сеть), все работает нормально.

2
задан 21 May 2019 в 17:14

1 ответ

tl; доктор, если Вы работаете

export PATH=.:$PATH # wrong  

затем Ваш вышеупомянутый набор команд будет ~~ работать, ~~ однако избегают этого решения... Почему?..., когда Вы выполняете исполняемый файл, дающий его любой полный путь

/my/cool/binary

или относительный путь

./../cool/binary # notice this begins with a ./  period slash

Вы непосредственно управляете, куда исполняемый файл прибывает из... однако, если по ошибке или некоторым жуликом обрабатывают Ваш огибающий var, PATH обновляется с предварительно ожиданием dir, который содержит (неправильный или злонамеренный) исполняемые файлы с соответствием именам

export PATH=/wrong/dir:/hackers/own/dir:$PATH

и Вы просто используете

myexecutable_name  # using naked binary name

Вы могли работать

/wrong/dir/myexecutable_name 

когда Вы намеревались работать

/actual/good/dir/myexecutable_name

который является, почему производственный код или что-либо работают, поскольку корень должен явно обстоятельно объяснить, куда двоичный файл прибывает из

Теперь возвращаясь к Вашему исходному вопросу... Ваш код предполагает, что ПУТЬ включает текущий dir '.', который он не должен содержать для идентификаторов напоминания или корня

export PATH=.:$PATH # wrong - bad for root or prod id yet handy for dev folks

вместо этого выполните полный путь использования... проблема - Вы, хотят избежать возможности выполнения неправильного двоичного файла, который, оказывается, находится в Вашем текущем dir, когда Вы намеревались выполнить двоичный файл от стандартного dir, как определено в Вашем ПУТИ

Не убежденный? проведите некоторое качественное время с кодом важной инфраструктуры особенно, который является на пересечении между обязанностями..., где команда B двоичный файл выполняет двоичный файл от команды A, и Вы будете всегда видеть полный путь, используемый... другое вдохновение состоит в том, чтобы увеличить на конфликтах пространства имен

0
ответ дан 21 May 2019 в 17:14

Другие вопросы по тегам:

Похожие вопросы: