2

Вот случай, который я не понимаю.

У меня есть bar групп, и в этой группе два пользователя; foo и bar .

У меня есть файл test.txt foo является пользователем владельца и bar только может прочитать его.

Однако если пользователь bar запустит команду gzip для этого файла, владение изменится с foo на bar .

Поэтому foo не может больше трогать этот файл.

Это дыра в безопасности?

Вы вошли как bar

$ whoami
bar
$ cd /home/foo/test
$ ls -al
total 8
drwxrwxr-x 2 foo bar  4096 Jan  6 15:48 . 
drwxrwxr-- 5 foo bar  4096 Jan  6 15:48 ..
-rwxr-xr-x 1 foo foo    0 Jan  6 15:48 test.txt
$ gzip test.txt    
$ ls -al
total 12
drwxrwxr-x 2 foo bar 4096 Jan  6 15:50 . 
drwxrwxr-- 5 foo bar 4096 Jan  6 15:48 ..
-rwxr-xr-x 1 bar  bar   29 Jan  6 15:48 test.txt.gz
$ uname -a
Linux 2.6.18-xenU-ec2-v1.2 #2 SMP x86_64 x86_64 x86_64 GNU/Linux

Вы вошли как foo:

$ whoami
foo
$ touch test.txt.gz 
touch: cannot touch `test.txt.gz': Permission denied

3 ответа3

8

Это не дыра в безопасности. Gzip создает новый файл и удаляет старый. Это регулируется разрешениями каталога, а не разрешениями для файла. Если вы удалите разрешение на запись из каталога, ваш test.txt будет в безопасности от панели пользователя.

Полный процесс в отношении безопасности выглядит следующим образом:

  1. Gzip использует разрешение на чтение для исходного файла, чтобы получить дескриптор файла только для чтения для исходного файла.
  2. Используйте разрешение на запись в каталог, чтобы создать новый пустой файл.
  3. Чтение данных из исходного файла и запись сжатых данных в новый файл
  4. Удалите старый файл, используя разрешение на запись в каталог.
4

gzip не меняет владельца файла. Он создает новый файл (который по характеру работы Unix-подобных систем принадлежит пользователю, выполняющему команду gzip ) и удаляет исходный файл.

Если вы хотите, чтобы у вновь созданного файла test.txt.gz были те же права пользователя и группы, что и у файла test.txt , вам нужно будет использовать chown - и в большинстве систем это означает, что вам нужен root-доступ. Пользовательская bar обычно не может создать файл, принадлежащий `foo '.

(gzip может и устанавливает биты разрешений во вновь созданном файле .gz же, как и во входном файле, и если вы запустите его как root он также будет использовать chown для установки владельца). Источник: я только что попробовал.)

3

Это означает, что вы являетесь членом другой группы. gzip создает новый файл с вашей группой по умолчанию. Исходный файл удален.

НТН

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .