Đặt tên người dùng và nhóm mặc định cho các tệp trong thư mục


13

Sử dụng bài đăng hữu ích này, tôi có thể đặt quyền nhóm và tệp mặc định trong một thư mục.

Tôi gặp sự cố khi đặt chủ sở hữu mặc định (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

Với:

[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

Vì vậy, nhóm bên phải được chỉ định, nhưng tệp mới có quyền sở hữu của người dùng tạo tệp. Tôi muốn các tệp mới được tạo để có teamlead: chủ sở hữu / nhóm web_prod.

Dường như setfaclcũng có thể được sử dụng để đặt người dùng mặc định. Với thư mục acl config hiện có (ở trên):

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

Bây giờ để tạo một tập tin như một người dùng khác. Tôi hy vọng nó sẽ có quyền sở hữu 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

Tệp mới vẫn có quyền sở hữu của chủ sở hữu tạo tệp, không phải là 1234 (teamlead).

Là những gì tôi sau khi thậm chí có thể, hoặc là cách tôi đi về điều này sai?

Câu trả lời:


18

Với setfacl, bạn có thể đặt quyền mặc định nhưng không phải chủ sở hữu / nhóm mặc định cho các tệp mới được tạo.

Để có được các tệp mới được sở hữu bởi một người dùng cụ thể, bạn cần một bit setuid hoạt động giống như bit setgid trên các thư mục. Thật không may, điều đó không được thực hiện.

Với setfacl, bạn có thể làm một cái gì đó gần tương đương trong hầu hết các trường hợp: Bạn có thể đặt ACL như thế nào default:user:teamlead:rwx. Bằng cách đó, người dùng được đặt tên có thể viết các tệp mới, ngay cả khi ai đó sở hữu nó.


Vui lòng cập nhật câu trả lời này bằng lệnh để áp dụng 'default: user: teamlead: rwx' vào thư mục '/ foo'
user319862

10

Một tệp mới luôn được tạo thuộc về người dùng mà quá trình tạo tệp đang chạy. (Chính xác là ID người dùng hiệu quả.) Điều này không thể thay đổi, bởi vì việc cho phép người dùng tạo các tệp thuộc về người dùng khác sẽ là lỗ hổng bảo mật, tương tự như cho phép người dùng không phải root cung cấp một tệp .

Dù bạn đang cố gắng làm gì, bạn không cần phải làm điều này. ACL là đủ để đảm bảo rằng bất cứ điều gì sẽ cần để đọc tệp sau này sẽ có đủ quyền. Để lại tập tin thuộc sở hữu của người dùng đã tạo ra nó.


"ACL là đủ để đảm bảo rằng bất cứ điều gì cần đọc tệp sau này sẽ có đủ quyền." Sai. Nhóm tệp mới của bạn sẽ là nhóm mặc định của người dùng. Nếu người dùng cộng tác có các nhóm mặc định khác nhau, bạn sẽ không thể truy cập các tệp của nhau. Bạn cần setgid để làm cho nhóm của thư mục mẹ "gắn bó" với tất cả trẻ em.
bviktor

@bviktor Bạn có thể đạt được hiệu quả tương tự với ACL.
Gilles 'SO- ngừng trở nên xấu xa'

Làm thế nào để bạn chỉ định chủ sở hữu và nhóm cho các tệp mới với ACL?
bviktor

@bviktor Chủ sở hữu là bất cứ ai tạo tệp, điều đó không thay đổi. Nhóm sở hữu tệp trong các quyền truyền thống là không liên quan. ACL trên các tệp mới là ACL mặc định của thư mục, giống như cách nhóm sở hữu trên các tệp mới là nhóm sở hữu thư mục có ngữ nghĩa BSD ( g+s).
Gilles 'SO- ngừng trở nên xấu xa'

@Gilles không. Nhóm các tệp mới sẽ là "nhóm đăng nhập ban đầu" của người tạo, không phải nhóm của thư mục mẹ. Hành vi bạn mô tả (tức là tệp mới nhận được nhóm thư mục gốc) yêu cầu setgid được đặt trên cha mẹ. Và nhóm rất phù hợp vì khi người dùng cộng tác, họ không thể truy cập các tệp của nhau nếu nhóm khác. Trừ khi các tệp của bạn có thể truy cập được trên thế giới, đây không phải là một ý tưởng tuyệt vời.
bviktor

1

Nếu bạn muốn các tệp mới sẽ được tạo với nhóm mới, bạn cần thay đổi nhóm chính.

Đối với điều này, bạn có thể sử dụng usermod và tham số -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.

ví dụ

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

0

Trên Linux, bạn phải có sgid trên thư mục cha để kế thừa nhóm cho các tệp. (Mặc dù bạn không cần sgid trên thư mục trên các hệ thống BSD.)


Câu hỏi là về việc giao quyền sở hữu cho các tệp mới được tạo. Nhóm đã được chỉ định chính xác.
một lập trình viên
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.