Установка имени пользователя и группы по умолчанию для файлов в каталоге

13

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

У меня проблемы с установкой владельца по умолчанию (teamlead uid 1234).

setfacl -d -m g::rwx /my/test/folder
setfacl -d -m o::rx /my/test/folder

getfacl /my/test/folder

# file: /my/test/folder
# owner: teamlead
# group: web_prod
# flags: -s-
user::rwx
group::r-x
other::r-x
default:user::rwx
default:group::rwx
default:other::r-x

С этим:

[mary@boxen]# touch /my/test/folder/somefile
[mary@boxen]# ll /my/test/folder/somefile
-rw-rw-r--. 1 mary web_prod 0 Nov  6 08:58 somefile

Таким образом, правая группа назначена, но новый файл принадлежит пользователю, создавшему этот файл. Я хотел бы, чтобы вновь созданные файлы имели teamlead: владелец / группа web_prod.

Похоже, что setfaclможно использовать и для установки пользователя по умолчанию. С существующей папкой acl config (выше):

[mary@boxen]# setfacl -d -m u:1234:rwx /my/test/folder

Теперь для создания файла от имени другого пользователя. Я ожидаю, что у него будет команда teamlead: web_prod.

[mary@boxen]# touch /my/test/folder/anotherfile
[mary@boxen]# ll /my/test/folder/anotherfile
-rw-rw-r--+ 1 mary web_prod 0 Nov  6 08:58 somefile

Новый файл все еще принадлежит владельцу, создавшему файл, а не uid 1234 (teamlead).

Возможно ли то, что я преследую, или я ошибаюсь?

кодер
источник

Ответы:

18

С помощью setfacl вы можете установить разрешения по умолчанию, но не владельца / группу по умолчанию для вновь создаваемых файлов.

Чтобы новые файлы принадлежали конкретному пользователю, вам понадобится бит setuid, который работает как бит setgid для каталогов. К сожалению, это не реализовано.

С setfacl вы можете сделать что-то, что почти эквивалентно в большинстве сценариев: вы можете установить ACL как default:user:teamlead:rwx. Таким образом, указанный пользователь может записывать новые файлы, даже если он принадлежит кому-то другому.

Майкл Зельманн
источник
Пожалуйста, обновите этот ответ командой, чтобы применить 'default: user: teamlead: rwx' к каталогу '/ foo'
user319862
10

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

Что бы вы ни пытались сделать, вам не нужно этого делать. Списки ACL достаточны для того, чтобы все, что потребуется для чтения файла позже, имело достаточные разрешения. Оставьте файл, принадлежащий пользователю, который его создал.

Жиль "ТАК - перестань быть злым"
источник
«Списки ACL достаточны для того, чтобы все, что потребуется для чтения файла позже, имело достаточные разрешения». Ложь. Группа вашего нового файла будет группой вашего пользователя по умолчанию. Если у сотрудничающих пользователей разные группы по умолчанию, вы не сможете получить доступ к файлам друг друга. Вам нужно установить setgid, чтобы группа родительских папок «прилипла» ко всем дочерним элементам.
bviktor
@bviktor Вы можете добиться того же эффекта с помощью ACL.
Жиль "ТАК - перестать быть злым"
Как указать владельца и группу для новых файлов с помощью ACL?
bviktor
@bviktor Владелец - это тот, кто создает файл, но он не меняется. Группа, которой принадлежит файл в традиционных разрешениях, не имеет значения. ACL для новых файлов является списком ACL по умолчанию для каталога, так же как группа-владелец для новых файлов является группой-владельцем каталога с семантикой BSD ( g+s).
Жиль "ТАК - перестать быть злым"
@ Жиль Нету. Группа новых файлов будет исходной группой входа пользователя, а не группой родительской папки. Поведение, которое вы описываете (т. Е. Новый файл получает группу родительского каталога), требует, чтобы setgid был установлен для родителя. И группа очень важна, потому что, когда пользователи сотрудничают, они не могут получить доступ к файлам друг друга, если группа отличается. Если ваши файлы не доступны для всех, что не очень хорошая идея.
bviktor
1

Если вы хотите, чтобы новые файлы были созданы с новой группой, вам нужно изменить основную группу.

Для этого вы можете использовать usermod и параметр -g

   -g, --gid GROUP
       The group name or number of the user's new initial login group. The group must exist.
       Any file from the user's home directory owned by the previous primary group of the user will be owned by this new group.
       The group ownership of files outside of the user's home directory must be fixed manually.

например

test2@kinakuta:/tmp$ id
uid=1002(test2) gid=1002(test2) grupos=1002(test2),1003(testgroup)
test2@kinakuta:/tmp$ touch test2
test2@kinakuta:/tmp$ ls -la test2
-rw-r--r-- 1 test2 test2 0 nov 23 22:26 test2
root@kinakuta:/tmp# usermod -g testgroup test2
root@kinakuta:/tmp# su test2
test2@kinakuta:/tmp$ touch test2_1
test2@kinakuta:/tmp$ ls -la test2_1 
-rw-r--r-- 1 test2 testgroup 0 nov 23 22:27 test2_1
sinkmanu
источник
0

В Linux вы должны иметь sgid для родительского каталога, чтобы наследовать группу для файлов. (Хотя вам не нужен sgid для каталога в системах BSD.)

jirib
источник
Речь идет о присвоении прав собственности на вновь созданные файлы. Группа уже правильно назначена.
кодер