Если я наберу:
ls -l file.txt
Я вижу, что права для этого файла эквивалентны «456»:
- 4 = владелец (р--)
- 5 = группа (прием)
- 6 = другие (rw-)
Каковы права длякореньв этом случае? Имеет ли он 777?
Можно ли изменить права так, чтобы у пользователя root было меньше прав, чем у владельца?
решение1
Я бы проверилэта страница из. В нем подробно рассматриваются права доступа к файлам.
Но если отвечать на ваш вопрос напрямую, то нет:
Суперпользователь «root» имеет возможность доступа к любому файлу в системе.
В вашем примере, например, если владельцем файла является, скажем, bob
и владельцем группы также является bob
, то вы увидите что-то вроде этого:
-r--r-xrw-. 1 bob bob 8 Jan 29 18:39 test.file
Третья битовая группа (rw) также будет применяться к root, поскольку root является частью others
группы. Если вы попытаетесь редактировать этот файл как root, вы увидите, что у вас нет проблем с этим.
Но чтобы еще больше проверить вашу теорию, предположим, что владельцем файла является пользователь root:
-r--r-xrw-. 1 root root 8 Jan 29 18:40 test.file
И вы снова пошли редактировать файл, вы бы увидели, что у вас по-прежнему нет проблем с его редактированием.
Наконец, если вы прибегли к крайним мерам:
chmod 000 test.file
ls -lh test.file
----------. 1 root root 8 Jan 29 18:41 test.file
И вы снова пошли редактировать файл, который вы увидите (по крайней мере в vi/vim) "test.file" [readonly]
. Но вы все еще можете редактировать файл и принудительно сохранить его с помощью :wq!
.
Проверка заявления @Stéphane Chazelas с помощью файла скрипта оболочки:
#!/bin/sh
echo "I'm alive! Thanks root!"
[root ~]# ls -lh test.sh
----------. 1 atgadmin atgadmin 31 Jan 30 10:59 test.sh
[root ~]# ./test.sh
-bash: ./test.sh: Permission denied
[root ~]# sh test.sh
I'm alive! Thanks root!
@Shadur уже сказал это, поэтому я просто процитирую, а не буду пересказывать:
Примечание: проверяется наличие бита выполнения, а не его применимость к root.
решение2
Root имеет полный доступ к каждому файлу в системе по замыслу. Если вы хотите защитить файл от случайного удаления, вы можете использовать
chattr +i file
Это установит флаг неизменяемости на GNU/Linux. Вы можете снять его с помощью -i
вместо +i
.
На FreeBSD вы можете использовать
chflags schg file
Замените на noschg
, чтобы schg
отменить это.
Если вы хотите защитить файл от просмотра пользователем root, вам следует сохранить его в другой системе или использовать шифрование в качестве крайней меры.
Смотрите также:https://superuser.com/questions/104015/удаление-разрешения-на-запись-не-предотвращает-запись-файла-пользователем-root
решение3
Можно ли изменить права так, чтобы у пользователя root было меньше прав, чем у владельца?
Shure, это просто, просто измените файл passwd так, чтобы uid root был не равен нулю. С другой стороны, не делайте этого, это плохая идея.
Вы не первый, кто задает этот вопрос, и некоторые из этих людей придумали идею полномочий, но мы вернемся к этому немного позже, а для начала давайте разберемся, как работает система разрешений.
Для начала, та часть компьютера, которая проверяет доступ, не знает вашего имени, она знает вас по номеру, и этот номер называется uid или идентификатором пользователя. Аналогичным образом она не знает имен групп, членом которых вы являетесь, только gid. Сопоставление между uid и именем находится в файле passwd, а gid отображается в файле groups.
Теперь, когда вы хотите открыть файл, выполняются четыре проверки: есть ли у вас разрешение пропустить проверки, разрешено ли вам как пользователю, разрешено ли вам как члену группы и разрешено ли вам как кому-то другому. Я пропускаю некоторые вещи, такие как переключение службы имен, списки контроля доступа и чтение/запись, но часть, которая вас интересует, — это первый тест.
Иногда вам разрешается пропускать проверки прав доступа к файлам. Почему? и (очень важно) Когда? Теперь есть некоторые вещи, которые иногда нужно сделать, но вы не хотите, чтобы кто-то их делал, и которые не очень хорошо вписываются в модель прав доступа к файлам. Всевозможные вещи, такие как открытие сетевого соединения на низком порту, монтирование раздела или пропуск проверок прав доступа. В наши дни эти вещи известны как полномочия. В старые времена у UID0 было все это, и с этим ничего нельзя было поделать, в наши дни вы можете давать полномочия другим пользователям или отменять их, но по умолчанию используется старое поведение.
Другой способ ограничить права root — использовать что-то вроде selinux, но это уже другая ерунда.
решение4
Какие права у root в этом случае? 777?
Да.
Как уже было сказано, разрешения на чтение и запись не применяются для root. Однако разрешение на выполнение все равно проверяется на наличие, поэтому root не сможет выполнить файл, если не установлен флаг выполнения. В данном случае это не так, поскольку флаг установлен у группы x
.
Также следует отметить, что независимо от того, предоставлено ли разрешение на запись или нет, пользователю root или любому другому пользователю будет отказано в доступе на запись в файл, хранящийся в файловой системе, доступной только для чтения.
У пользователя root также может быть меньше прав, чем у владельца, если файл хранится в удаленно смонтированном каталоге, например NFS.
Наконец, обратите внимание, что разрешения на символические ссылки по сути бессмысленны.