วิธีการตั้งค่า `umask 'สำหรับเซสชั่นคำพังเพยทั้งหมด?


10

ใช้ Gnome 3.18 ผมใช้ไฟล์ร่วมกันระหว่างสมาชิกในครอบครัวอื่น ๆ แต่ umask เริ่มต้นใน distro ของฉัน (ArchLinux) 0022เป็น ดังนั้นทุกไฟล์ / ไดเรกทอรีที่สร้างขึ้นจึงไม่สามารถเขียนได้สำหรับกลุ่มทั่วไปของเรา

ผมพยายามที่จะใส่umask 0002ในแต่วาระที่ยังคงใช้/etc/profile 0022มันใช้งานได้กับเชลล์ทุบตีล็อกอิน

ฉันพยายามเพิ่มบรรทัดนี้ด้วย/etc/pam.d/system-auth: session required pam_umask.so umask=0002 มันมีผลเหมือนกับที่เข้า/etc/profileมา ฉันเหนื่อย

ถ้าฉันเปลี่ยน umask ด้วยตนเองใน gnome-terminal shell ฉันจะเรียกใช้แอปพลิเคชันจากนั้นพูด gedit จากนั้นไฟล์ที่สร้างโดยมันจะมีสิทธิ์ที่ต้องการ ถ้าฉันเปิด gedit จากเมนูคำพังเพยก็ไม่ได้ ดังนั้นเรื่องของฉันคือการตั้ง umask สำหรับเซสชั่นคำพังเพยและฉันไม่สามารถหาได้ที่ไหน

แก้ไข (เพื่อตอบความคิดเห็นของ Gilles): ฉันใช้ 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 'หยุดความชั่วร้าย'

คำตอบทั้งสองนั้นใช้ได้สำหรับttyหรือsshเข้าสู่ระบบและโดยพื้นฐานแล้วมันก็เป็นคำตอบเดียวกันจริงๆ (โดยใช้pam_umask) พวกเขาไม่ได้ทำงานกับเซสชั่นคำพังเพยของฉัน ดังนั้นฉันไม่สามารถให้รางวัลกับใครก็ได้ ฉันไม่รู้ว่านี่เป็นคำเฉพาะของ gnome บน Xorg ใน archlinux หรือไม่ ฉันจะทดสอบด้วยการแจกแจงแบบอื่นเมื่อฉันมีเวลา
Christophe Drevet-Droguet

1
มีเธรดคล้ายกันในฟอรัม archlinux ที่จัดการกับปัญหาคือ: bbs.archlinux.org/viewtopic.php?id=207753ดูเหมือนว่ามีข้อบกพร่องใน gdm ...

ฉันลงเอยด้วยการใช้ ACL ซึ่งเป็นวิธีที่ดีกว่าในการควบคุมการอนุญาต ไม่จำเป็นต้องเปลี่ยนมาสก์การอนุญาตที่ปลอดภัยกว่าเริ่มต้น
Christophe Drevet-Droguet

คำตอบ:


6

บางโปรแกรม Gnome จะเปิดตัวโดยsystemd --userในกรณีที่มีการตั้งค่า umask โดย systemd ไป0022โดยไม่คำนึงถึงความคุ้มค่าการกำหนดค่าสำหรับpam_umask ฉันไม่ทราบวิธีแก้ปัญหาใด ๆ แต่ฉันเปิดปัญหาในการติดตามปัญหา systemd github ปัญหานี้มีการรายงานในGnome bugzillaด้วย

umask ตั้งค่าการใช้เป็นที่ทำงานตามที่คาดไว้สำหรับการใช้งานที่ไม่ได้รับการเปิดตัวโดยpam_umasksystemd --user

วิธีแก้ปัญหาหนึ่งที่แนะนำบนUbuntu bugzilla  เพื่อให้บริการ systemd แทนที่กับแอปพลิเคชันที่ได้รับผลกระทบทั้งหมด


เพื่อตรวจสอบเรื่องนี้ด้วยตัวเอง

คุณสามารถแสดงรายการกระบวนการที่ทำงานบนระบบของคุณในรูปแบบทรี (กระบวนการ parent / ลูก) โดยใช้:

pstree -Tapu

ค้นหาPIDsสำหรับ: (1)อินสแตนซ์เซสชั่นของคุณของ--user systemd ; (2) แอปพลิเคชันที่เปิดตัวโดยมันเช่น gedit ซึ่งจะแสดงเป็นกระบวนการลูกเพื่อsystemd --user ; และ(3)กระบวนการในเซสชั่นของคุณไม่ได้เปิดตัวโดย --user

เปรียบเทียบumasks ที่รายงานในprocfs :

grep Umask /proc/<pid>/status

systemd --userตัวเอง(1)และกระบวนการไม่ได้เปิดตัวโดยมัน(3)ควรมีความถูกต้องumaskซึ่งถูกกำหนดโดยpam_umask กระบวนการเปิดตัวโดย--user systemd (2)จะมี umask 0022ของ


3

ปัญหาคือที่กล่าวโดย Sebasth ฉันลองหลายสิ่งหลายอย่าง แต่จากนั้นฉันพบวิธีแก้ปัญหาซึ่งประกอบด้วยการเขียนทับ UMAS (ต่อผู้ใช้) ของ dbus:

$ systemctl --user edit dbus

ในไฟล์ที่เปิดขึ้นมาเพียงแค่เขียน:

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

ไฟล์ได้รับการบันทึกใน. config / systemd / user / dbus.service.d / override.conf และแทนที่ umask ดีฟอลต์ของ dbus ซึ่งฉันเข้าใจว่าสืบทอดมาจาก systemd --user เนื่องจาก dbus เปิดใช้งานโดยมัน เพียงออกจากระบบและลงชื่อเข้าใช้อีกครั้งและแอปพลิเคชัน 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
หากผู้ใช้ไม่ใช่รูทและชื่อผู้ใช้เหมือนกับชื่อกลุ่มหลักบิตกลุ่ม umask จะถูกตั้งค่าให้เหมือนกับบิตของเจ้าของ (ตัวอย่าง: 022 -> 002, 077 -> 007)
Christophe Drevet-Droguet

ฉันใช้กลุ่มหลักเป็นกลุ่มการแบ่งปัน ในกลุ่มผู้ใช้จะมีการสร้างไฟล์กับกลุ่มผู้ใช้นี้เป็นค่าเริ่มต้นและไม่สามารถแก้ไขได้โดยผู้ใช้รายอื่น
Christophe Drevet-Droguet

1
ฉันเห็นวิธี: ฉันสามารถใช้กลุ่มผู้ใช้และกลุ่มรองทั่วไปจากนั้นบนต้นไม้ที่ใช้ร่วมกันให้เพิ่มบิต "set group" เพื่อบังคับให้กลุ่มทั่วไปนี้ใช้ไฟล์และโฟลเดอร์ที่สร้างขึ้นทั้งหมด อย่างไรก็ตามฉันจะลองบนพีซีของฉันในภายหลัง ฉันไม่แน่ใจว่า gnome จะสนใจเรื่องนั้นอยู่ดีเพราะมันใช้เวลา 0022 เป็น umask เสมอไม่ว่าอะไรจะเกิดขึ้นกับเซสชัน tty
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 หรืออะไรก็ได้ที่คุณต้องการ

สิ่งนี้จะกำหนดค่าเริ่มต้นทั้งระบบซึ่งหมายความว่าผู้ใช้ทุกคนจะได้รับ umask จากที่นั่นเว้นแต่พวกเขาจะไม่ได้ตั้งค่าเป็นพิเศษใน. profile หรือ. bashrc


ขอบคุณสำหรับคำตอบ. ฉันจะต้องลองสิ่งนั้น ฉันไม่ได้มองโลกในแง่ดีเพราะฉันได้ลองโมดูล PAM นี้ด้วยพารามิเตอร์แบบอินไลน์ "umask = 0002" และมันไม่ทำงาน (สำหรับ Gnome มันใช้งานได้กับเชลล์ล็อกอินอื่น ๆ ) ฉันจะลองคำแนะนำของคุณ
Christophe Drevet-Droguet

คุณพยายามที่โมดูล pam สำหรับระบบรับรองความถูกต้องไม่ธรรมดา-auth :-)
ostendali

3
มันเป็นเพียงเรื่องของการกระจายชื่อไฟล์ ฉันรู้ว่าเดเบียนใช้common-*สำหรับการตั้งค่าทั่วไป Arch ในฐานะ RedHat ใช้system-authไฟล์สำหรับสิ่งนี้ อย่างไรก็ตามฉันได้ลองเสนอแนะของคุณเกี่ยวกับการเพิ่มsession optional pam_umask.soและUMASK 002เข้าไป/etc/login.defsในสิ่งที่ฉันคาดไว้และเช่นเดียวกับที่ใช้กับเซสชันpam_umask.so umask=0002tty login(หรือผ่าน SSH) แต่ Gnome ตั้ง0022umask เป็นเสมอ Gnome ต้องใช้การตั้งค่า umask ภายในหรือ archlinux ใช้อย่างใดอย่างหนึ่ง ... ฉันจะลองใช้การกระจายอื่นเพื่อดูว่าปัญหาเกิดขึ้นหรือไม่
Christophe Drevet-Droguet

1

สำหรับเซสชั่นเข้าสู่ระบบ: เพิ่มumask 0002ของคุณ$HOME/.profile(หรือ/etc/profile)

สำหรับเซสชัน Gnome: เพิ่มumask 0002ของคุณ$HOME/.gnomerc


1

แก้ไข: ในการรับ systemd เพื่อตั้ง umask ของ gnome session ฉันสร้างไฟล์ umask.conf ภายใต้ /etc/systemd/system/display-manager.service.d/ ด้วยบรรทัดต่อไปนี้:


[Service]
UMask=0002

หลังจากรีบูตเครื่องตอนนี้จะช่วยให้กระบวนการทั้งหมดภายใต้user.sliceสอดคล้องกับ umask ที่คุณต้องการ การออกจากระบบไม่เพียงพอสำหรับการเปลี่ยนแปลงที่จะเกิดขึ้นดังนั้นฉันขอแนะนำให้รีบูตเครื่องของคุณก่อนที่จะทำการทดสอบกับงานในกระบวนการ

ข้อมูลเพิ่มเติม:

  • ระบบปฏิบัติการ: CentOS7.4
  • DE: Gnome3

3
ถ้ามันใช้งานได้ไฟล์/etc/systemd/system/gdm.service.d/umask.confที่มีแค่[Service]\nUMask=0002ควรจะเพียงพอ
Christophe Drevet-Droguet

และแน่นอนมัน! เพิ่งทดสอบที่นั่น / etc / systemd / system / โฟลเดอร์ของฉันมี symlink ไปยัง gdm.service ดังนั้นฉันจึงสร้าง display-manager.service.d / umask.conf และเพิ่มบรรทัดสิ่งนี้ทำงานได้สมบูรณ์แบบจะปรับปรุงคำตอบเพื่อรวมไว้ด้วยขอบคุณ คุณ @ ChristopheDrevet-Droguet
jamalm

0

แค่ต้องการเพิ่มว่าpam_umaskmanpages ให้ข้อมูลที่ดีงามเพื่อช่วยให้คุณทราบว่า 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

ทำทราบว่าการเข้าสู่ระบบที่ไม่ได้ใช้แพม (เช่นผู้ที่ใช้gettyหรือloginจะมีชุด umask login.defsของพวกเขาผ่าน


0

ในการติดตั้ง Fedora 29 กับ Gnome ฉันพบว่าโปรแกรมที่เปิดตัวจากตัวเรียกใช้งานของ Gnome ปล่อยไฟล์อื่นที่อ่านได้, 0022. Pam เห็นได้ชัดว่าเทียบเคียงกับ /etc/login.defs ตามที่กล่าวไว้ข้างต้น อย่างไรก็ตามการแก้ไขหน้ากากมี 0077 ไม่ได้เปลี่ยนพฤติกรรมของ Gnome ฉันต้องแก้ไข / etc / profile และไปที่ / etc / bashrc ซึ่งทั้งคู่ตั้งค่ากลับเป็น 0022

คงจะดีถ้า Fedora มีสถานที่แห่งนี้ แต่รายการใน / etc / profile และ / etc / bashrc ตั้งค่ามาสก์แตกต่างกันสำหรับผู้ใช้ที่มี ID สูงกว่าหรือต่ำกว่า 200 ดังนั้นดูเหมือนว่ารูปแบบเดียวไม่เหมาะทั้งหมด

แม้ว่านี่จะเป็นการแก้ไขปัญหาในตอนนี้ แต่ปัญหายังไม่ได้รับการแก้ไขอย่างสมบูรณ์เนื่องจากผู้ใช้ gnome ยังคงไม่มีวิธีตั้งค่า umask ของตนเองเนื่องจากใช้กับแอปพลิเคชันที่เรียกใช้จากตัวเรียกใช้ gnome ดูเหมือนว่า 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.