gnomeセッション全体に「umask」を設定するにはどうすればよいですか?


10

Gnome 3.18の使用。他の家族とファイルを共有していますが、私のディストリビューション(archlinux)のデフォルトのumaskは0022です。したがって、作成されたすべてのファイル/ディレクトリは、私たちの一般的なグループに書き込み可能ではありません。

入れようとしましumask 0002/etc/profileが、gnomeセッションはまだ使用してい0022ます。ただし、ログインbashシェルでは機能します。

私もこの行を追加しようとしました/etc/pam.d/system-auth session required pam_umask.so umask=0002 これはと同じ効果があり/etc/profileます。私は試した

gnome-terminalシェルでumaskを手動で変更した場合、geditなどのアプリケーションを起動して、作成したファイルに必要な権限が付与されます。gnomeメニューからgeditを起動しても、起動しません。だから私の問題は本当にgnomeセッションのumaskを設定することであり、それをどこで行うべきかを見つけることができません。

編集(Gillesのコメントに答えるため):DMとしてgdm 3.18を使用しています。また、pam_umask行をに追加しようとしました/etc/pam.d/gdm-launch-environment。他のすべてのgdm-*ファイルにはsessionsystem-authファイルからのインクルードが含まれているため、追加のファイルは必要ありません。何も変わりません。

/etc/login.defsが含まれますUMASK 077が、プライマリグループがユーザー名であるユーザーまたはユーザーのいずれかにUSERGROUPS_ENAB yes設定する必要があります。umask00770007

022でumask が含まれている唯一のファイルです/etc/etc/profile、それは私の最初の試みでした。

に関しては/etc/Xsession.d、私はこのディレクトリを持っていません。その上、ウェイランドがデフォルトのディスプレイサーバーになっているので、自分でまだ使用している場合でも、umaskをX初期化の一部として設定する必要があるかどうかはわかりません。


どのディスプレイマネージャを使用していますか?(これは、ユーザー名とパスワードを入力するプログラムです。)Gdm、lightdm、slim、xdm、kdm、…?ArchとDMの設定方法に応じて、にファイルを追加する/etc/Xsession.dか、別のファイルを追加してみます/etc/pam.d(システム全体に設定することを想定しています)。または多分/etc/login.defs
Gilles「SO-邪悪なことをやめなさい」

2つの回答はttyまたはsshログインに対して有効であり、基本的に同じですが、実際には(を使用pam_umask)です。彼らは私のgnomeセッションでは動作しません。だから私は誰にも賞金をあげることはできません。これがarchlinuxのXorgのgnomeに固有のものかどうかはわかりません。時間があれば他のディストリビューションでテストします。
Christophe Drevet-Droguet 2016年

1
問題を処理するarchlinuxフォーラムに同様のスレッドがあります:bbs.archlinux.org/viewtopic.php?id=207753は GDMのバグのように思える...

最終的にACLを使用することになりました。これは、アクセス許可を制御するはるかに優れた方法です。デフォルトのより安全な許可マスクを変更する必要はありません。
Christophe Drevet-Droguet

回答:


6

一部のGnomeアプリケーションはによって起動されます。systemd --userこの場合0022pam_umaskの設定値に関係なく、umaskはsystemdによってに設定されます。私は回避策を認識していませんが systemd github issue trackerで問題を開きまし。この問題はGnome bugzillaでも報告されています。

を使用してUmaskセットを使用するpam_umaskと、で起動されないアプリケーションで期待どおりに機能しますsystemd --user

Ubuntu Bugzillaでは  、影響を受けるすべてのアプリケーションにsystemdサービスのオーバーライドを配置するための1つの回避策が提案されています。


これを自分で調査するには

次のコマンドを使用して、システムで実行中のプロセスをツリー形式(親/子プロセス)で一覧表示できます。

pstree -Tapu

次のPIDを見つけます:(1)systemd --userのセッションのインスタンス。(2) systemd --userに子プロセスとして表示されるgeditなどのアプリケーションによって起動されたアプリケーション。そして(3)あなたのセッションでの処理にsystemd --userによって起動ません

procfsで報告されたumaskを比較します

grep Umask /proc/<pid>/status

systemd --user自体(1)およびそれによって起動されないプロセス(3)には、pam_umaskによって設定された正しいumask必要です。systemd --user (2)によって起動されたプロセスのumaskはになり0022ます。


3

問題はセバストが述べたものです。多くのことを試しましたが、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を上書きします。ログアウトして再度ログインするだけで、gnomeアプリケーションは指定されたumaskを使用する必要があります。単なる回避策ですが、私にとってはうまくいきます。


2

代わりにumask、のusergroupsオプションを使用することができます。pam_umaskこのユーザーとグループには、フォルダを共有する従来のUNIXの方法と同じ権限があります。

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

1
ユーザーがrootではなく、ユーザー名がプライマリグループ名と同じである場合、umaskグループビットは所有者ビットと同じになるように設定されます(例:022-> 002、077-> 007)。
Christophe Drevet-Droguet 2016年

プライマリグループを共有グループとして使用します。ユーザーグループを使用すると、ファイルはデフォルトでこのユーザーグループで作成され、他のユーザーは編集できません。
Christophe Drevet-Droguet

1
しかし、方法はわかります。ユーザーグループと共通のセカンダリグループを使用してから、共有ツリーに「セットグループ」ビットを追加して、作成したすべてのファイルとフォルダーにこの共通グループを強制します。とにかく、後でPCで試します。ttyセッションで何が機能しているかに関係なく、常に0022をumaskとして取るので、とにかくgnomeがそれを気にするかどうかはわかりません。
Christophe Drevet-Droguet

1

システム全体でデフォルトのumaskを設定するには、最初にそれを有効にする必要があります。

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

上記のリンクはdebianとubuntu用ですが、他のすべてのLinuxシステムでも同じです。

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 2016年

common-authではなくsystem-authのpamモジュールを試しました:-)
ostendali '15年

3
それはファイル名の配布選択の問題です。common-*一般的な設定でのdebianの使用法を知っています。ArchはRedHatと同様に、system-authこのためにファイルを使用します。とにかく、私は追加のご提案をしようとしたsession optional pam_umask.soとしてUMASK 002/etc/login.defsとしてI期待され、のようにpam_umask.so umask=0002、それはのttyのために働いていたlogin(またはSSH経由)セッションが、Gnomeの設定0022常にとしてのumaskを。Gnomeは内部のumask設定を使用する必要があります、またはarchlinuxはそれを使用しています…別のディストリビューションを試して、問題が発生するかどうか確認します。
Christophe Drevet-Droguet 2016年

1

ログインセッションの場合:(または)に追加umask 0002します。$HOME/.profile/etc/profile

GNOMEセッションの場合:追加しumask 0002、あなたに$HOME/.gnomerc


1

編集:gnomeセッションのumaskを設定するためにsystemdを取得するために、/ etc / systemd / system / display-manager.service.d /の下に次の行を含むumask.confファイルを作成しました。


[Service]
UMask=0002

マシンを再起動した後、これにより、すべてのプロセスuser.sliceが必要なumaskに準拠するようになります。ログアウトは変更を行うのに十分ではなかったので、プロセスumaskでテストを実行する前にマシンを再起動することをお勧めします。

追加情報:

  • OS:CentOS7.4
  • DE:Gnome3

3
機能している場合は、/etc/systemd/system/gdm.service.d/umask.confcontaining onlyのようなファイル[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または使用するlogin予定のログインなど)に注意してくださいlogin.defs


0

Gnomeを使用したFedora 29のインストールで、Gnomeランチャーから起動されたプログラムが他のファイルを読み取り可能なままにしていたことを発見しました。Pamは明らかに上記のように/etc/login.defsに依存しています。ただし、そこでマスクを編集した0077では、Gnomeの動作は変更されませんでした。/ etc / profileと/ etc / bashrcも編集する必要があり、どちらも0022に戻していました。

Fedoraにこのための場所が1つあればいいのですが、/ etc / profileと/ etc / bashrcのエントリは、200以上または以下のIDを持つユーザーに対して異なるマスクを設定するため、1つのマスクがすべてに当てはまるわけではないようです。

これは現在のところ修正ですが、gnomeランチャーから実行されるアプリケーションに適用されるため、gnomeユーザーは自分のumaskを設定する方法がないため、問題は完全には解決されません。Gnomeにはその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.