У меня есть 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?
Вы могли попытаться использовать Список управления доступом (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
Наконец, очень остерегаться того, кого Вы позволяете писать в файлы, владел/читал корень пользователь.