전체 그놈 세션에 대해 'umask'를 설정하는 방법은 무엇입니까?


10

그놈 사용하기 3.18. 다른 가족 구성원간에 파일을 공유하지만 배포판 (archlinux)의 기본 umask는 0022입니다. 따라서 생성 된 모든 파일 / 디렉토리는 공통 그룹에 쓸 수 없습니다.

나는 넣어 노력 umask 0002/etc/profile있지만, 그놈 세션은 여전히 사용하고 있습니다 0022. 그래도 로그인 bash 쉘을 위해 노력하고 있습니다.

나는 또한이 라인을 추가하려고 /etc/pam.d/system-auth: session required pam_umask.so umask=0002 그것은에있는 것과 같은 효과를가집니다 /etc/profile. 나는 시도했다

gnome-terminal 쉘에서 수동으로 umask를 변경하면 gedit과 같은 응용 프로그램을 시작하여 응용 프로그램을 시작하면 파일에 원하는 권한이 부여됩니다. 그놈 메뉴에서 gedit를 시작해도 그렇지 않습니다. 그래서 내 문제는 실제로 그놈 세션에 대한 umask를 설정하는 것이며, 어디에서 할 것인지 찾을 수 없습니다.

편집 (길레스의 의견에 대답하기 위해) : gdm 3.18을 DM으로 사용하고 있습니다. 또한 pam_umask 행을에 추가하려고했습니다 /etc/pam.d/gdm-launch-environment. 다른 모든 gdm-*파일의 포함이 들어 session로부터 system-auth그들은 더 많은 필요가 없습니다 있도록 파일. 아무것도 바뀌지 않습니다.

/etc/login.defs포함 UMASK 077뿐만 아니라 USERGROUPS_ENAB yes을 설정해야하는 umask하나에 0077또는 0007그 차 그룹 이름입니다 사용자를위한.

가 포함 된 전용 파일 022에서 umask를 위해이 /etc있다 /etc/profile하지만 내 첫 번째 시도였다.

에 관해서 /etc/Xsession.d는이 디렉토리가 없습니다. 게다가 wayland는 이제 기본 디스플레이 서버이므로, 여전히 직접 사용하더라도 umask를 X 초기화의 일부로 설정해야하는지 잘 모르겠습니다.


어떤 디스플레이 관리자를 사용하십니까? (이것은 사용자 이름과 비밀번호를 입력하는 프로그램입니다.) Gdm, lightdm, slim, xdm, kdm,…? Arch와 DM이 설정되는 방법에 따라에 파일을 추가 /etc/Xsession.d하거나 다른 파일을 추가하십시오 /etc/pam.d(이 시스템 전체를 설정하려고한다고 가정합니다). 아니면 /etc/login.defs.
Gilles 'SO- 악의를 그만두십시오'

두 가지 답변은 유효 tty하거나 ssh로그인하며 기본적으로 동일한 답변입니다 (실제로 사용 pam_umask). 그들은 내 그놈 세션에서 작동하지 않습니다. 그래서 나는 누군가에게 현상금을 줄 수 없습니다. 이것이 archlinux의 Xorg에서 gnome에만 해당되는지 모르겠습니다. 시간이 있으면 다른 배포판으로 테스트하겠습니다.
Christophe Drevet-Droguet

1
archlinux 포럼에서도 비슷한 문제를 다루고 있습니다 : bbs.archlinux.org/viewtopic.php?id=207753 gdm의 버그 인 것 같습니다

ACL을 사용하여 권한을 제어하는 ​​훨씬 좋은 방법입니다. 더 안전한 기본 사용 권한 마스크를 변경할 필요가 없습니다.
Christophe Drevet-Droguet

답변:


6

일부 Gnome 응용 프로그램은에 의해 시작되며 systemd --user,이 경우 umask는 pam_umask에0022 구성된 값에 관계없이 systemd에 의해 설정됩니다 . 해결 방법을 알지 못했지만 systemd github 이슈 트래커에 대한 문제 를 열었습니다 . 이 문제는 Gnome bugzilla 에서도보고되었습니다 .

pam_umask의해 시작되지 않은 응용 프로그램에 대해 사용중인 Umask 세트 가 예상대로 작동합니다 systemd --user.

Ubuntu bugzilla  에서 영향을받는 모든 응용 프로그램에 시스템화 된 서비스 재정의를 배치 하는 한 가지 해결 방법이 제안됩니다 .


이것을 직접 조사하려면

다음을 사용하여 시스템에서 실행중인 프로세스를 트리 형식 (부모 / 자식 프로세스)으로 나열 할 수 있습니다.

pstree -Tapu

다음에 대한 PID 찾기 : (1) 세션의 systemd --user 인스턴스 ; (2) gedit와 같이 시작된 응용 프로그램 으로 systemd --user에 대한 자식 프로세스로 표시됩니다 . 및 (3) 세션에서 프로세스가 없습니다 systemd --user에 의해 시작 .

procfs 에보 고 된 umask를 비교하십시오 .

grep Umask /proc/<pid>/status

systemd --user 자체 (1) 와 그것에 의해 시작 되지 않은 프로세스 (3) 에는 pam_umask에 의해 설정된 올바른 umask 가 있어야합니다 . systemd --user (2)에 의해 시작된 프로세스 에는 umask가 있습니다. 0022


3

문제는 Sebasth가 언급 한 것입니다. 나는 많은 것을 시도했지만 dbus의 (사용자 당) UMask를 덮어 쓰는 해결 방법을 찾았습니다.

$ systemctl --user edit dbus

열린 파일에서 다음과 같이 작성하십시오.

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

파일은 .config / systemd / user / dbus.service.d / override.conf에 저장되고 dbus가 실행되기 때문에 systemd --user에서 상속 된 dbus 기본 umask를 재정의합니다. 로그 아웃 한 후 다시 로그인하면 그놈 응용 프로그램에서 지정된 umask를 사용해야합니다. 그냥 해결 방법이지만 그것은 나를 위해 작동합니다.


2

대신 umaskusergroups옵션을 사용하면 pam_umask이 사용자 및 그룹에 기존의 Unix 방식의 폴더 공유 방법과 동일한 권한이 있습니다.

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

1
사용자가 루트가 아니고 사용자 이름이 기본 그룹 이름과 동일한 경우 umask 그룹 비트는 소유자 비트와 동일하게 설정됩니다 (예 : 022-> 002, 077-> 007).
Christophe Drevet-Droguet

기본 그룹을 공유 그룹으로 사용합니다. 사용자 그룹을 사용하면 기본적으로이 사용자 그룹으로 파일이 작성되며 다른 사용자가 편집 할 수 없습니다.
Christophe Drevet-Droguet

1
그래도 방법이 있습니다. 사용자 그룹과 공통 보조 그룹을 사용한 다음 공유 트리에서 "그룹 설정"비트를 추가하여 생성 된 모든 파일과 폴더에이 공통 그룹을 적용 할 수 있습니다. 어쨌든 나중에 PC에서 시도하겠습니다. gnome이 tty 세션에서 작동하는 내용에 관계없이 항상 0022를 umask로 사용하기 때문에 그놈이 신경 쓰지 않을 것이라고 확신하지 않습니다.
Christophe Drevet-Droguet

1

시스템 전체에서 기본 umask를 설정하려면 먼저 활성화해야합니다. 여기에 잘 설명되어 있습니다.

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

위의 링크는 데비안과 우분투 용이지만 다른 모든 리눅스 시스템에서도 동일합니다.

umask (아마도 이미 위치에 있음)를 활성화하려면 다음에 줄을 추가해야합니다 /etc/pam.d/common-session.

session optional pam_umask.so

활성화되면 다음에서 설정할 수 있습니다.

/etc/login.defs

이미이 파일을 찾았으므로 설정하기 만하면됩니다.

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

그리고 UMASK를 0002 또는 원하는대로 설정하십시오.

이렇게하면 시스템 전체에 기본값이 설정됩니다. 즉, .profile 또는 .bashrc에 별도로 설정하지 않은 한 모든 사용자가 거기에서 umask를 선택합니다.


답변 주셔서 감사합니다. 나는 그것을 시도해야 할 것이다. 인라인 매개 변수 "umask = 0002"로이 PAM 모듈을 이미 시도했지만 작동하지 않았기 때문에 그다지 낙관적이지 않습니다 (Gnome의 경우 다른 로그인 셸에서도 작동 함). 나는 당신의 제안을 시도 할 것입니다.
Christophe Drevet-Droguet

시스템 인증을 위해 pam 모듈을 사용해 보았습니다 : common-auth :-)
ostendali

3
파일 이름의 배포 선택 문제입니다. 데비안 common-*이 일반적인 설정에 사용한다는 것을 알고 있습니다. Arch는 RedHat로서이를 위해 system-auth파일을 사용합니다. 어쨌든, 나는 추가 귀하의 제안을 시도 session optional pam_umask.so하고와 UMASK 002/etc/login.defs로 I 예상과와 마찬가지로 pam_umask.so umask=0002, 그것은 청각 장애 근무 login(SSH 또는 통해) 세션하지만 그놈은 설정 0022언제나처럼의 umask를. Gnome은 내부 umask 설정을 사용해야합니다. 또는 archlinux가 하나를 사용하고 있습니다. 문제가 발생하는지 확인하기 위해 다른 배포판을 시도 할 것입니다.
Christophe Drevet-Droguet

1

로그인 세션 : (또는 )에 추가 umask 0002하십시오 .$HOME/.profile/etc/profile

그놈 세션의 경우 : 추가 umask 0002$HOME/.gnomerc


1

편집 : 그놈 세션의 umask를 설정하기 위해 systemd를 얻으려면 다음 줄을 사용하여 /etc/systemd/system/display-manager.service.d/ 아래에 umask.conf 파일을 만들었습니다.


[Service]
UMask=0002

머신을 재부팅 한 후 모든 프로세스 user.slice가 원하는 umask를 준수 할 수 있습니다. 로그 아웃하는 것만으로는 충분하지 않으므로 프로세스 umask에 대한 테스트 를 수행하기 전에 시스템을 재부팅하는 것이 좋습니다.

추가 정보 :

  • 운영체제 : CentOS7.4
  • DE : 그놈 3

3
작동하면 /etc/systemd/system/gdm.service.d/umask.conf포함 과 같은 파일 [Service]\nUMask=0002이면 충분합니다.
Christophe Drevet-Droguet

그리고 실제로 그렇습니다! 방금 테스트했습니다. 내 / etc / systemd / system / 폴더에는 gdm.service에 대한 심볼릭 링크가 포함되어 있으므로 display-manager.service.d / umask.conf를 만들고 행을 추가했습니다. @ ChristopheDrevet-Droguet
jamalm

0

그냥 것을 추가하고 싶었 pam_umask맨이 당신의 umask가 어디에서 오는 당신이 파악하는 데 도움이되는 몇 가지 꽤 좋은 정보를 제공합니다. 구체적으로 특별히:

pam_umask는 현재 환경의 파일 모드 작성 마스크를 설정하는 PAM 모듈입니다. umask는 새로 작성된 파일에 지정된 기본 권한에 영향을줍니다.

PAM 모듈은 다음 위치에서 다음 순서로 umask 값을 가져 오려고 시도합니다.

·   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

누군가가 말했듯이, 당신은이를 설정해야 common-session디렉토리에 파일 /etc/pam.d.

pam을 사용하지 않는 로그인 (예 :을 통해 umask를 설정 getty하거나 사용하는 로그인)에 유의하십시오 .loginlogin.defs


0

Gnome과 함께 Fedora 29를 설치했을 때, Gnome 런처에서 시작된 프로그램은 다른 파일을 읽을 수있는 0022로 남겨 두었습니다. Pam은 위에서 언급 한 것처럼 /etc/login.defs를 분명히 연기합니다. 그러나 0077에서 마스크를 편집해도 Gnome의 동작은 변경되지 않았습니다. 또한 / etc / profile 및 / etc / bashrc를 편집해야했습니다. 둘 다 0022로 다시 설정했습니다.

Fedora에 한곳이 있다면 좋겠지 만 / etc / profile 및 / etc / bashrc의 항목은 ID가 200보다 크거나 작은 사용자의 마스크를 다르게 설정했기 때문에 하나의 마스크가 모두 맞지 않는 것 같습니다.

이것은 현재 수정 사항이지만, 그놈 사용자는 그놈 실행기에서 실행되는 응용 프로그램에 적용될 때 자신의 umask를 설정할 방법이 없으므로 문제가 완전히 해결되지는 않습니다. 그놈에 해당 umask에 대한 구성 옵션이 있어야합니다. (아마도 있지만 찾지 못했습니다.)


0

적어도 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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.