Làm cách nào để đặt `umask` cho toàn bộ phiên gnome?


10

Sử dụng Gnome 3.18. Tôi chia sẻ các tập tin giữa các thành viên khác trong gia đình, nhưng ô mặc định trên distro của tôi (archlinux) là 0022. Vì vậy, mọi tệp / thư mục được tạo không thể ghi được cho nhóm chung của chúng tôi.

Tôi đã cố gắng để đưa umask 0002vào /etc/profilenhưng phiên gnome vẫn đang sử dụng 0022. Mặc dù vậy, nó đang hoạt động cho một vỏ bash đăng nhập.

Tôi cũng đã cố gắng thêm dòng này vào /etc/pam.d/system-auth: session required pam_umask.so umask=0002 Nó có tác dụng tương tự như trong /etc/profile. Tôi đã thử

Nếu tôi thay đổi ô thủ công trong trình bao gnome-terminal, thì tôi khởi chạy một ứng dụng từ nó, giả sử là gedit, sau đó các tệp được tạo bởi nó có quyền mong muốn. Nếu tôi khởi chạy gedit từ các menu gnome, thì không. Vì vậy, vấn đề của tôi thực sự là thiết lập ô cho phiên gnome và tôi không thể tìm thấy nơi nào để làm điều đó.

EDIT (để trả lời nhận xét của Gilles): Tôi đang sử dụng gdm 3.18 làm DM. Tôi cũng đã cố gắng thêm dòng pam_umask vào /etc/pam.d/gdm-launch-environment. Tất cả các gdm-*tệp khác chứa bao gồm sessiontừ system-authtệp, vì vậy chúng không cần nhiều hơn. Nó không thay đổi bất cứ điều gì.

/etc/login.defschứa UMASK 077nhưng cũng USERGROUPS_ENAB yesnên đặt thành umaskmột 0077hoặc 0007cho người dùng có nhóm chính là tên người dùng.

Tệp duy nhất chứa 022umask in /etc/etc/profilenhưng đó là lần thử đầu tiên của tôi.

Đối với /etc/Xsession.d, tôi không có thư mục này. Ngoài ra, vì wayland hiện là máy chủ hiển thị mặc định, tôi không chắc chắn nên đặt ô như là một phần của việc khởi tạo X, ngay cả khi tôi vẫn đang sử dụng nó.


Bạn sử dụng trình quản lý hiển thị nào? (Đó là chương trình nơi bạn nhập tên người dùng và mật khẩu.) Gdm, lightdm, slim, xdm, kdm, khắc? Tùy thuộc vào cách Arch và DM của bạn được thiết lập, hãy thử thêm một tệp vào /etc/Xsession.dhoặc một tệp khác trong /etc/pam.d(Tôi giả sử bạn muốn đặt toàn bộ hệ thống này). Hoặc có thể /etc/login.defs.
Gilles 'SO- ngừng trở nên xấu xa'

Hai câu trả lời là hợp lệ cho ttyhoặc sshđăng nhập, và về cơ bản chúng là cùng một, thực sự (sử dụng pam_umask). Họ không làm việc với phiên gnome của tôi. Vì vậy, tôi không thể đưa tiền thưởng cho bất cứ ai. Tôi không biết nếu điều này là cụ thể cho gnome trên Xorg trên archlinux. Tôi sẽ kiểm tra với các bản phân phối khác khi tôi có thời gian.
Barshe Drevet-Droguet

1
Có một chủ đề tương tự trên diễn đàn archlinux xử lý vấn đề này: bbs.archlinux.org/viewtopic.php?id=207753 Có vẻ như một lỗi trong gdm ...

Tôi đã kết thúc bằng cách sử dụng ACL, đó là một cách tốt hơn để kiểm soát các quyền. Không cần phải thay đổi mặt nạ quyền an toàn mặc định.
Barshe Drevet-Droguet

Câu trả lời:


6

Một số ứng dụng Gnome được khởi chạy bởi systemd --user, trong trường hợp đó, ô được đặt bởi systemd thành 0022bất kể giá trị được cấu hình cho pam_umask . Tôi không biết về bất kỳ cách giải quyết nào, nhưng tôi đã mở một vấn đề về trình theo dõi vấn đề github của systemd. Vấn đề này cũng được báo cáo trên Gnome bugzilla .

Bộ Umask sử dụng pam_umaskđang hoạt động như mong đợi cho các ứng dụng không được khởi chạy systemd --user.

Một cách giải quyết được đề xuất trên Ubuntu bugzilla  để đặt dịch vụ systemd ghi đè lên tất cả các ứng dụng bị ảnh hưởng.


Để tự điều tra việc này

Bạn có thể liệt kê các quy trình đang chạy trên hệ thống của bạn ở định dạng cây (quy trình cha / con) bằng cách sử dụng:

pstree -Tapu

Tìm các PID cho: (1) phiên bản systemd --user của phiên của bạn ; (2) một ứng dụng được khởi chạy bởi nó , chẳng hạn như gedit, sẽ hiển thị dưới dạng tiến trình con cho systemd --user ; và (3) một quy trình trong phiên của bạn không được systemd --user khởi chạy .

So sánh các nhiệm vụ được báo cáo trong Procfs :

grep Umask /proc/<pid>/status

systemd --user bản thân (1) và quy trình không đưa ra bởi nó (3) nên có đúng umask được thiết lập bởi pam_umask . Các tiến trình được khởi chạy bởi systemd --user (2) sẽ có các ô 0022.


3

Vấn đề là được đề cập bởi Sebasth. Tôi đã thử nhiều thứ, nhưng sau đó tôi tìm thấy một cách giải quyết bao gồm ghi đè UMask (trên mỗi người dùng) của dbus:

$ systemctl --user edit dbus

Trong tệp được mở, chỉ cần viết:

[Service]
UMask=002 # This is the umask I want to use

Tệp được lưu trong .config / systemd / user / dbus.service.d / override.conf và ghi đè ô mặc định dbus, mà tôi đoán là được kế thừa từ systemd --user, do dbus được khởi chạy bởi nó. Chỉ cần đăng xuất và đăng nhập lại và các ứng dụng gnome nên sử dụng ô được chỉ định. Chỉ là một cách giải quyết, nhưng nó làm việc cho tôi.


2

Thay vì thay đổi, umaskbạn có thể sử dụng usergroupstùy chọn cho pam_umask, với người dùng và nhóm này có cùng quyền, như cách unix cổ điển để chia sẻ thư mục.

# /etc/pam.d/login or
# /etc/pam.d/common-session or system-auth
session optional pam_umask.so usergroups

1
Nếu người dùng không phải là root và tên người dùng giống như tên nhóm chính , các bit nhóm umask được đặt giống như bit chủ sở hữu (ví dụ: 022 -> 002, 077 -> 007).
Barshe Drevet-Droguet

Tôi sử dụng nhóm chính làm nhóm chia sẻ. Với các nhóm người dùng, các tệp sẽ được tạo với nhóm người dùng này theo mặc định và không thể chỉnh sửa bởi người dùng khác.
Barshe Drevet-Droguet

1
Mặc dù vậy, tôi thấy một cách: Tôi có thể sử dụng các nhóm người dùng và một nhóm thứ cấp chung, sau đó, trên cây được chia sẻ, thêm một bit "nhóm nhóm" để buộc nhóm chung này trên tất cả các tệp và thư mục đã tạo. Dù sao, tôi sẽ thử trên PC của tôi sau. Tôi không chắc chắn gnome sẽ quan tâm đến điều đó dù thế nào đi nữa, bởi vì nó luôn lấy 0022 làm ô, bất kể điều gì đang làm việc cho các phiên tty.
Barshe Drevet-Droguet

1

Để đặt ô mặc định trên toàn hệ thống, bạn sẽ phải bật nó ở vị trí đầu tiên, điều này được giải thích khá rõ ở đây:

http://manpages.debian.org/cgi-bin/man.cgi?query=pam_umask&sektion=8

Liên kết trên dành cho debian và ubfox nhưng giống nhau cho tất cả các hệ thống linux khác.

Để kích hoạt tính năng này (có thể đã có), bạn cần thêm một dòng vào /etc/pam.d/common-session:

session optional pam_umask.so

Sau khi kích hoạt, bạn có thể thiết lập nó trong:

/etc/login.defs

Tôi thấy bạn đã tìm thấy tệp này vì vậy tất cả những gì bạn cần làm là đặt:

# The permission mask is initialized to this value. If not specified,
# the permission mask will be initialized to 022.
UMASK           077

Và đặt UMASK thành 0002 hoặc bất cứ điều gì bạn muốn.

Điều này sẽ đặt giá trị mặc định trên toàn hệ thống, điều đó có nghĩa là tất cả người dùng sẽ nhận được ô từ đó trừ khi họ không đặt cụ thể khác trong .profile hoặc .bashrc của họ


Cảm ơn bạn vì câu trả lời. Tôi sẽ phải thử điều đó. Tôi không lạc quan lắm vì tôi đã thử mô-đun PAM này với tham số nội tuyến "umask = 0002" và nó không hoạt động (đối với Gnome, mặc dù vậy, nó đã hoạt động với các shell đăng nhập khác). Tôi sẽ thử đề xuất của bạn.
Barshe Drevet-Droguet

bạn đã thử mô-đun pam cho hệ thống-auth không phổ biến-auth :-)
Ostendali

3
Đó chỉ là vấn đề lựa chọn phân phối tên tệp. Tôi biết sử dụng debian common-*cho các cài đặt phổ biến. Arch, như RedHat, sử dụng một system-authtệp cho việc này. Dù sao, tôi đã thử đề xuất của bạn về việc thêm session optional pam_umask.soUMASK 002vào /etc/login.defsnhư tôi mong đợi, và như với pam_umask.so umask=0002, nó đã hoạt động cho một loginphiên tty (hoặc thông qua SSH) nhưng Gnome luôn đặt một cái ô 0022như mọi khi. Gnome phải sử dụng cài đặt ô bên trong hoặc archlinux đang sử dụng một bản Tôi sẽ thử phân phối khác để xem vấn đề có phát sinh không.
Barshe Drevet-Droguet

1

Đối với phiên đăng nhập: thêm umask 0002vào $HOME/.profile(hoặc /etc/profile) của bạn .

Đối với phiên Gnome: thêm umask 0002vào của bạn$HOME/.gnomerc


1

EDIT: Để có được systemd để đặt umask của phiên gnome, tôi đã tạo một tệp umask.conf trong /etc/systemd/system/display-manager.service.d/ với các dòng sau:


[Service]
UMask=0002

Sau khi khởi động lại máy, điều này bây giờ cho phép tất cả các quy trình theo user.slicephù hợp với ô bạn muốn. Đăng xuất không đủ để thay đổi diễn ra, vì vậy tôi khuyên bạn nên khởi động lại máy trước khi thực hiện các thử nghiệm trên quy trình xử lý.

Thông tin bổ sung:

  • HĐH: CentOS7.4
  • DE: Gnome3

3
Nếu nó hoạt động, thì một tệp như /etc/systemd/system/gdm.service.d/umask.confchỉ chứa [Service]\nUMask=0002là đủ.
Barshe Drevet-Droguet

Và thực sự nó làm! Chỉ cần thử nó ở đó. thư mục / etc / systemd / system / của tôi chứa một liên kết tượng trưng đến gdm.service vì vậy tôi đã tạo một display-manager.service.d / umask.conf và thêm dòng, điều này hoạt động hoàn hảo, sẽ cập nhật câu trả lời để bao gồm nó. bạn @ BarsheDrevet-Droguet
jamalm

0

Chỉ muốn thêm rằng các pam_umasktrang web cung cấp một số thông tin khá tốt để giúp bạn tìm ra nơi mà chiếc ô của bạn đến từ đâu. Đặc biệt:

pam_umask là mô-đun PAM để đặt mặt nạ tạo chế độ tệp của môi trường hiện tại. Các ô ảnh hưởng đến các quyền mặc định được gán cho các tệp mới được tạo.

Mô-đun PAM cố gắng lấy giá trị umask từ các vị trí sau theo thứ tự sau:

·   umask= argument
·   umask= entry of the users GECOS field
·   pri= entry of the users GECOS field
·   ulimit= entry of the users GECOS field
·   UMASK= entry from /etc/default/login
·   UMASK entry from /etc/login.defs

Như ai đó đã nêu, bạn nên thiết lập điều này trong common-sessiontệp trong thư mục /etc/pam.d.

Xin lưu ý rằng các thông tin đăng nhập không sử dụng pam (chẳng hạn như những thông tin sử dụng gettyhoặc loginsẽ được đặt trong đó login.defs.


0

Khi cài đặt Fedora 29 với Gnome, tôi thấy rằng, các chương trình được khởi chạy từ trình khởi chạy Gnome để lại các tệp khác có thể đọc được, 0022. Pam dường như trì hoãn /etc/login.defs như đã lưu ý ở trên. Tuy nhiên, chỉnh sửa mặt nạ ở đó, 0077, không thay đổi hành vi của Gnome. Tôi cũng đã phải chỉnh sửa / etc / profile và thành / etc / bashrc - cả hai đều đặt nó trở về 0022.

Sẽ thật tuyệt nếu Fedora có một vị trí cho việc này, nhưng các mục trong / etc / profile và / etc / bashrc đặt mặt nạ khác cho những người dùng có ID trên hoặc dưới 200, vì vậy có vẻ như một mặt nạ không phù hợp với tất cả.

Mặc dù hiện tại đây là một bản sửa lỗi, nhưng vấn đề vẫn chưa được giải quyết hoàn toàn, vì người dùng gnome vẫn không có cách nào để thiết lập ô riêng của mình vì nó được áp dụng cho các ứng dụng chạy từ trình khởi chạy gnome. Có vẻ như Gnome nên có một tùy chọn cấu hình cho ô đó. (Có thể là vậy, nhưng tôi đã không tìm thấy nó.)


0

Tôi có cách giải quyết ít nhất trên Fedora 31:

sudo vi /etc/profile.d/umask.sh
umask <your_umask>

sudo vi /etc/login.defs
UMASK <your_umask>

sudo vi /usr/local/bin/systemd-user
/usr/lib/systemd/systemd --user

sudo chmod a+x /usr/local/bin/systemd-user

sudo vi /usr/lib/systemd/system/user@.service
ExecStart=-/usr/local/bin/systemd-user
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.