Вопрос или проблема
Из скрипта оболочки bash я создаю папку и сохраняю mysqldump там. Я уверен, что в моем скрипте нет команд, связанных с правами доступа. Чтобы предоставить другому пользователю доступ к этим файлам, я использовал ACL, но когда он попытался получить доступ к файлу, он получил сообщение об отказе в разрешении, и проблема заключается в эффективных
правах доступа ACL.
Владелец директории – ola
, а новый пользователь, который пытается получить доступ к папке – uber
, и папка – gettaxi
.
Права доступа родительской директории
[/omega/olabooktmp]# getfacl .
# файл: .
# владелец: ola
# группа: ola
user::rwx
user:uber:rwx
group::r-x
mask::rwx
other::r-x
default:user::rwx
default:user:uber:rwx
default:group::r-x
default:mask::rwx
default:other::r-x
Права доступа дочерней директории
[/omega/olabooktemp]# getfacl gettaxi/
# файл: gettaxi/
# владелец: ola
# группа: ola
user::rwx
user:uber:rwx #эффективный:---
group::r-x #эффективный:---
mask::---
other::---
default:user::rwx
default:user:uber:rwx
default:group::r-x
default:mask::rwx
default:other::r-x
Я вижу, что для новой директории gettaxi
маска прав доступа mask::---
, так что думаю, что это вызывает проблему, но я не могу полностью понять, как решить эту проблему.
Любые предложения были бы очень полезны.
Спасибо.
Вы можете изменить маску с помощью следующей команды:
setfacl -m m:rwx filename/directory
Если я правильно понял ваш вопрос, пользователь ola
создает файлы в директории: /omega/olabooktmp/gettaxi
.
И вы хотите ограничить доступ к этим файлам, предоставив доступ пользователю uber
.
Примечание: /omega/olabooktmp/gettaxi
принадлежит ola
.
Начнем без ACL:
ls -ld /omega/olabooktmp/gettaxi
drwxr-x--- 2 ola ola 4096 мар 21 08:16 /omega/olabooktmp/gettaxi
Для того чтобы предоставить пользователю uber
права rwx
, используя ACL, вы можете использовать:
setfacl -m u:uber:rwx,d:u:uber:rwX,o:--- /omega/olabooktmp/gettaxi
Это позволит пользователю uber
иметь права rwx
на папку /omega/olabooktmp/gettaxi
и также предоставит rwx
как по умолчанию
для d:
и X
. Это предоставляет разрешения на файлы, ранее находившиеся в папке, и дает унаследованные разрешения для файлов. А также удаляет все другие разрешения для other
для ограничения, конечно. Владелец все еще имеет свои собственные разрешения.
Результат:
getfacl /omega/olabooktmp/gettaxi
getfacl: Удаление ведущего "https://unix.stackexchange.com/" из абсолютных путей
# файл: omega/olabooktmp/gettaxi
# владелец: ola
# группа: ola
user::rwx
user:uber:rwx
group::r-x
mask::rwx
other::---
default:user::rwx
default:user:uber:rwx
default:group::r-x
default:mask::rwx
default:other::---
Тестирование:
ola
создает несколько файлов (выполнено от имени root):
su - ola -c "for i in {1..3}; do date > /omega/olabooktmp/gettaxi/$RANDOM; done"
Результат:
ls -l /omega/olabooktmp/gettaxi/
total 32
-rw-r----- 1 ola users 32 мар 21 08:43 17606
-rw-r----- 1 ola users 32 мар 21 08:43 22286
-rw-r----- 1 ola users 32 мар 21 08:42 31484
-rw-r----- 1 ola users 32 мар 21 08:43 31848
-rw-r----- 1 ola users 32 мар 21 08:42 667
-rw-r----- 1 ola users 4 мар 21 08:16 one
-rw-r----- 1 ola users 6 мар 21 08:16 three
-rw-r----- 1 ola users 4 мар 21 08:16 two
Не может быть доступен обычным пользователем (выполнено от имени root):
su - debian -c "ls -l /omega/olabooktmp/gettaxi"
ls: не удается открыть директорию '/omega/olabooktmp/gettaxi': Permission denied
Но uber
может (выполнено от имени root):
su - uber -c "ls -l /omega/olabooktmp/gettaxi"
total 32
-rw-r----- 1 ola users 32 Мар 21 08:43 17606
-rw-r----- 1 ola users 32 Мар 21 08:43 22286
-rw-r----- 1 ola users 32 Мар 21 08:42 31484
-rw-r----- 1 ola users 32 Мар 21 08:43 31848
-rw-r----- 1 ola users 32 Мар 21 08:42 667
-rw-r----- 1 ola users 4 Мар 21 08:16 one
-rw-r----- 1 ola users 6 Мар 21 08:16 three
-rw-r----- 1 ola users 4 Мар 21 08:16 two
Если вы испробовали свои ACL с некоторыми тестами, вы можете удалить все acl с помощью:
setfacl -R -b /omega/olabooktmp/gettaxi
И начать заново.
Да, маска снижает права доступа. Эффективное разрешение – это и, а разрешение и маска. (user::
(владелец пользователя) и other
не затрагиваются маской).
Вы можете изменить маску с помощью: например, setfacl -m m:r-x file-name
.
Когда вы выполняете ls -l
, если режим заканчивается на +
, тогда средние биты режима (традиционно биты группы) являются маской.
Иногда биты режима устанавливаются в соответствии с битами группы в umask
. Я еще не разобрался в правилах, когда это происходит, и когда используется маска по умолчанию. Использование cp
для копирования файла, похоже, использует umask
.
Обходной путь
Убедитесь, что у пользователей есть свои собственные группы, и что это установлено в группу по умолчанию. Затем установите umask
на 007
.
Я предполагаю, что это поведение является ошибкой. Я писал об этом в прошлом месяце (см. unix.stackexchange.com/questions/570795). Что происходит, так это то, что права доступа к исходному файлу копируются в маску acl командой cp. Это то, что я ожидал для cp -p, а не для cp. Я обнаружил, что могу делать копии, используя cat
cat afile > bfile
или пропуская через tar
(cd A; tar -cf -)|(cd B; tar-xf -)
И acl уважаются, как и ожидалось.
Я также выставил вознаграждение за объяснение этого поведения cp. Никто это не объяснил. Я подумываю о том, чтобы подать отчет об ошибке. То есть, что это должно быть поведение ´cp -p´, а не обычное поведение cp. (И система вычла баллы вознаграждения, хотя никто не смог предоставить ответ. Мне это тоже удивительно.)
Ответ или решение
Эффективные права доступа ACL: Как изменить разрешения
Введение
Настройка разрешений в Linux может быть несколько сложной, особенно когда речь идет о списках контроля доступа (ACL). В данной статье рассматривается вопрос об изменении разрешений для пользователя на доступ к папке и файлам с учётом эффективных прав доступа. Мы проанализируем конкретный сценарий, в котором пользователь uber
сталкивается с проблемой доступа к папке gettaxi
, принадлежащей пользователю ola
.
Описание проблемы
Вы запускаете скрипт на bash, который создает каталог gettaxi
и помещает в него дампы MySQL. Ваша задача – предоставить пользователю uber
доступ к этому каталогу. Однако, несмотря на установленные ACL, uber
получает сообщение о запрещенном доступе.
На основании вывода команды getfacl
, ключевыми моментами являются:
- Владелец каталога:
ola
- Пользователь, которому требуется доступ:
uber
- Права каталога
gettaxi
: разрешения дляuber
не активны, так как маска (mask) установлена в---
.
Понимание маски ACL
Маска (mask) в ACL представляет собой ограничение прав доступа для членов группы, указанных в ACL. Эффективные права (effective permissions) вычисляются как пересечение прав пользователя и маски. В вашем случае, поскольку маска ---
, это означает, что ни один из пользователей, включая uber
, не имеет прав на доступ к папке, даже если открыты права для него – rwx
— в действительности эти права не реализуются.
Решение
Чтобы устранить проблему с доступом пользователя uber
, необходимо изменить маску ACL на более подходящие разрешения.
-
Перейдите в каталог
gettaxi
:cd /omega/olabooktmp/gettaxi
-
Измените маску ACL для каталога, используя следующую команду:
setfacl -m m:rwx /omega/olabooktmp/gettaxi
Это установит маску на
rwx
, что предоставит пользователюuber
соответствующие права. -
Проверьте итоговые разрешения:
getfacl /omega/olabooktmp/gettaxi
Ожидается вывод, показывающий:
# file: gettaxi/ # owner: ola # group: ola user::rwx user:uber:rwx group::r-x mask::rwx other::---
Проверка доступа
Теперь пользователь uber
должен иметь возможность получить доступ к каталогу и файлам внутри него. Попробуйте выполнить команду от имени uber
:
su - uber -c "ls -l /omega/olabooktmp/gettaxi"
Результаты должны показать список файлов, созданных пользователем ola
.
Заключение
Изменение маски в ACL — это эффективный способ управления доступом к файлам и каталогам в Linux. Убедитесь в том, что вы понимаете, как маска влияет на эффективные права доступа, чтобы избежать таких проблем в будущем. Если возникнут дополнительные вопросы или задачи по настройке ACL, вы всегда можете обратиться за помощью.