Действительно ли изменение является владением/полномочиями блочного устройства, эквивалентным изменению ownrshp/perms файловой системы? Это - что-то, что можно было бы хотеть сделать?

Я пытался ответить на этот вопрос: не Может fsck диск ни из-за какого r/w доступа. На который я ответил:

Ответ подразумевается в fsckвывод.

Измените ownsership с:

# chown username /dev/sdb5
$ fsck /dev/sdb5

Или не изменяйте его и становитесь корнем вместо этого (вероятно, лучше):

# fsck /dev/sdb5

Если устройство смонтировано, размонтируйте его прежде.

Сосланный fsck вывод быть:

Вы должны иметь r/w доступ к файловой системе или быть корнем.

Затем другой пользователь прокомментировал в моем ответе следующее:

Никогда не изменяйте владение blockdevice. Это открывает дыры в системе безопасности, и это обычно также препятствует тому, чтобы обычный пользователь делал что-то глупое. Таким образом, sudo опция, которую Вы описываете, была бы способом пойти. Возможно, Вы хотите принять свой ответ.

И это смущает меня, потому что обычно, я создал бы файловую систему путем выполнения mkfs на блочном устройстве, например. sudo mkfs.ext4 /dev/block_device. Таким образом, я предположил, что для взаимодействия с той файловой системой я должен сделать это через файл блочного устройства. Теперь, если файловая система находится в/dev/block_device, когда я изменяю владение или полномочия блочного устройства, который означает, что я изменяю владение или полномочия файловой системы?

Если я сделал неправильное предположение, и эти вещи не эквивалентны, то, как каждый изменяет владение или полномочия файловой системы?

Или это - что-то, что просто нельзя делать? Почему?

3
задан 26 July 2017 в 07:25

2 ответа

При изменении владельца или владения блочного устройства Вы ничего не изменяете в файловой системе. Что происходит если Вы chown блочное устройство обычному пользователю, что Вы полностью обходите права доступа к файловой системе.

Блочное устройство является просто контейнером, который содержит неструктурированные данные. Файловая система делает, это структурировало и применимый. Обычно все пользователи получают доступ к блочному устройству косвенно через файловую систему, прося читать/открывать/писать файлы или папки. Все на основе прав доступа, которые сохраняются файловой системой, предоставляя или запрещая доступа к файлу или папке.

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

Давайте идти через.

Сначала мы создаем папку и файл, который только доступен root, Начиная с блочного устройства, как это должно быть.

root@host:~# ll /dev/vda1
brw-rw---- 1 root disk 253, 1 Jul 26 18:52 /dev/vda1

root@host:~# mkdir /secure-folder
root@host:~# chmod 700 /secure-folder/
root@host:~# ll -d /secure-folder
drwx------ 2 root root 4096 Jul 27 20:06 /secure-folder/

root@host:~# echo "MySuperSecretText" > /secure-folder/my-secure-file
root@host:~# chmod 400 /secure-folder/my-secure-file
root@host:~# ll /secure-folder/my-secure-file
-r-------- 1 root root 9 Jul 27 19:19 /secure-folder/my-secure-file

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

user@host:~$ ll /secure-folder/
ls: cannot open directory /secure-folder/: Permission denied
user@host:~$ ll /secure-folder/my-secure-file
ls: cannot access /secure-folder/my-secure-file: Permission denied

root@host:~# chown user /dev/vda1 
root@host:~# ll /dev/vda1 
brw-rw---- 1 user disk 253, 1 Jul 27 20:16 /dev/vda1

user@host:~$ ll /secure-folder/
ls: cannot open directory /secure-folder/: Permission denied
user@host:~$ ll /secure-folder/my-secure-file
ls: cannot access /secure-folder/my-secure-file: Permission denied

В этом случае Ваша файловая система предотвращает user из файлов доступа, к которым это не имеет прав доступа.
Но начиная с user имеет доступ для чтения-записи к блочному устройству, мы можем обойти файловую систему. vda1 вот раздел, который смонтирован на / и debugfs идет e2fsprogs, так вполне уверен предварительно установленный.

user@host:~$ debugfs /dev/vda1 -R "ls -l /secure-folder"
  67344   40700 (2)      0      0    4096 27-Jul-2017 19:33 .
      2   40755 (2)      0      0    4096 27-Jul-2017 19:16 ..
  45137  100400 (1)      0      0      18 27-Jul-2017 19:43 my-secure-file

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

user@host:~$ debugfs /dev/vda1 -R "cat /secure-folder/my-secure-file"
debugfs 1.42.9 (4-Feb-2014)
MySuperSecretText

Хорошо, я могу считать содержание файлов этот путь.Круто. Что еще я мог сделать? Давайте создадим папку в месте, я обычно не мог.

user@host:~$ debugfs -w /dev/vda1 -R "mkdir /secure-folder/attack"
debugfs 1.42.9 (4-Feb-2014)

root@host:~# ll /secure-folder/
total 16
drwx------  2 root root 4096 Jul 27 19:33 ./
drwxr-xr-x 25 root root 4096 Jul 27 19:16 ../
drwxr-xr-x  2 root root 4096 Jul 27 20:29 attack/
-r--------  1 root root   18 Jul 27 19:43 my-secure-file

Ooops. Это даже принадлежит root хотя я создал его как user. Гм, что еще было бы возможно? Давайте попробуем.

Сначала нам нужен номер блока /secure-folder/my-secure-file.

user@host:~$ debugfs /dev/vda1 -R "blocks /secure-folder/my-secure-file"
debugfs 1.42.9 (4-Feb-2014)
913939 

Хорошо, номер блока 913939 содержит данные файла /secure-folder/my-secure-file. Давайте использовать dd получить содержание, 4096 размер блока по умолчанию ext4 или xfs файловых систем. Снова возможный, потому что я могу воздействовать на блочное устройство как обычный пользователь.

user@host:~$ dd if=/dev/vda1 of=/tmp/secure-file skip=913939 bs=4096 count=1
1+0 records in
1+0 records out
4096 bytes (4.1 kB) copied, 0.0214174 s, 191 kB/s

Теперь мы можем изменить /tmp/secure-file и dd это назад на блочном устройстве.

user@host:~$ cat /tmp/secure-file
XxXxxxxSecretText

user@host:~$ dd if=/tmp/secure-file of=/dev/vda1 seek=913939 bs=4096 count=1
1+0 records in
1+0 records out
4096 bytes (4.1 kB) copied, 0.000356448 s, 11.5 MB/s

Наконец, как root пользователь позволяет нам взглянуть на файл от представления файловой системы. Для создания этого безопасным, мы сначала делаем недействительным все кэши для получения содержания диска.

root@host:~# echo 3 > /proc/sys/vm/drop_caches
root@host:~# cat /secure-folder/my-secure-file
XxXxxxxSecretText

root@host:~# ll /secure-folder/my-secure-file
-r-------- 1 root root 18 Jul 27 20:39 /secure-folder/my-secure-file

Я изменил файл, который принадлежит root как обычный пользователь и не должен был изменять права доступа. Все на основе того, что у меня был доступ для чтения-записи к базовому блочному устройству.
Это - только простой пример, и усовершенствованный взломщик мог поместить двоичный код в Вашу файловую систему или обмениваться известными двоичными файлами со злонамеренными. Обычно используемые инструменты предварительно установлены почти на любом распределении.

Ну, я должен признать, что права доступа на блочном устройстве задержаны, когда Вы перезагружаете udev, но это открывает проблему безопасности, когда Вы даете доступ для чтения-записи обычному пользователю к блочному устройству.

Надежда это не слишком сбивает с толку и помогает понять различие между файловой системой и блочным устройством.

2
ответ дан 1 December 2019 в 16:19

Я думаю, что Вы неправильно понимаете импликацию. как член sudo группы у Вас есть доступ R/W по умолчанию. Это не подразумевает, что Вы - на самом деле корень, просто что у Вас есть подобный доступ в зависимости от того, как sudo настроен.

Дальнейшее чтение:

https://help.ubuntu.com/community/Sudoers

https://www.tecmint.com/su-vs-sudo-and-how-to-configure-sudo-in-linux/

1
ответ дан 1 December 2019 в 16:19

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

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