Включен липкий бит Сценарий не может записывать в корневой файл

У меня есть 2 файла в /tmp/.

  • . Первый - пустой файл с именем «файл» с разрешением -rw ------- и владелец root: root .

  • Второй файл называется «script», который представляет собой простой сценарий Ruby с разрешением -rwsr-xr -x и владелец root: root . Содержимое файла сценария:

#!/usr/bin/env ruby
$-v = true

IO.write( File.join(Dir.pwd, 'file'), 100.times.map { rand(97..122).chr }.join << ?\n )

Файл "file" имеет те же права доступа, что и файл / etc / shadow :

# ls -l /etc/shadow
-rw------- 1 root root 1045 Sep 22 04:13 /etc/shadow

# ls -l file
-rw------- 1 root root 6 Nov 29 12:22 file

Рубиновый сценарий "script" имеет те же права, что и passwd команда:

$ ls -l $(type -p passwd)
-rwsr-xr-x 1 root root 63624 Nov 13 22:28 /usr/bin/passwd

# ls -l script
-rwsr-xr-x 1 root root 78 Nov 29 12:22 script

Я могу запустить ./ script как root, который заменяет содержимое файла «file» некоторой случайной строкой.

Но когда я запускаю ./script как пользователь без полномочий root, Ruby вызывает Errno :: EACCES .


Могу ли я записать в корневой записываемый файл "file" как пользователь без полномочий root, правильно настроив разрешение SUID?

0
задан 29 November 2019 в 17:26
1 ответ

Вы могли попытаться использовать Список управления доступом (ACL) вместо этого. В команде ниже я (dmo) даю пользователю боб доступ для чтения-записи к файлу, названному тест :

$ setfacl -m u:bob:rw test

Теперь ls шоу + знак в конце полномочий указать, что ACL находится в действительности на файле.

$ ls -l
total 4
-rw-rw-r--+ 1 dmo dmo 0 Nov 29 07:22 test

Для наблюдения то, что ACL позволяет использованию getfacl:

$ getfacl test
# file: test
# owner: dmo
# group: dmo
user::rw-
user:bob:rw-
group::rw-
mask::rw-
other::r--

, Как Вы видите , боб теперь имеет доступ для записи, в котором он нуждается.

, Если Вы хотите удалить ACL, можно использовать setfacl --remove-all:

$ setfacl --remove-all test
$ ls -l
total 0
-rw-rw-r--. 1 dmo dmo 0 Nov 29 07:22 test

существуют некоторые хорошие учебные руководства вокруг на ACL, которые являются часто пропускаемой функцией: https://linuxconfig.org/how-to-manage-acls-on-linux

Наконец, очень остерегаться того, кого Вы позволяете писать в файлы, владел/читал корень пользователь.

2
ответ дан 4 December 2019 в 13:18

Теги

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