จะควบคุม umask / PAM / สิทธิ์ทั้งหมดได้อย่างไร


11

// อัปเดตเมื่อ 8 ก.พ. - สรุปประเด็นสำคัญโดยย่อ:

  • วิธี umask ไดเรกทอรีแตกต่างจากไฟล์ได้อย่างไร
  • วิธีการ umask บน Nautilus คัดลอก / วางได้อย่างไร
  • วิธีการตั้งค่า umask สำหรับ SSHFS

สถานการณ์ของเรา

หลายคนจาก บริษัท ของเราเข้าสู่เซิร์ฟเวอร์และอัปโหลดไฟล์ พวกเขาทุกคนต้องสามารถอัปโหลดและเขียนทับไฟล์เดียวกันได้ พวกเขามีชื่อผู้ใช้ที่แตกต่างกัน แต่ทั้งหมดอยู่ในกลุ่มเดียวกัน อย่างไรก็ตามนี่คืออินเทอร์เน็ตเซิร์ฟเวอร์ดังนั้นผู้ใช้ "อื่น ๆ " ควรมี (โดยทั่วไป) เพียงแค่เข้าถึงแบบอ่านอย่างเดียว ดังนั้นสิ่งที่ฉันต้องการคือสิทธิ์มาตรฐานเหล่านี้:

ไฟล์: 664
ไดเรกทอรี: 771

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

เราอัปโหลดไฟล์ไปยังเซิร์ฟเวอร์โดย SFTP-ing ใน Nautilus โดยติดตั้งเซิร์ฟเวอร์โดยใช้ sshfs และเข้าถึงใน Nautilus ราวกับว่าเป็นโฟลเดอร์ในเครื่องและโดย SCP-ing ในบรรทัดคำสั่ง โดยทั่วไปครอบคลุมสถานการณ์ของเราและสิ่งที่เรามุ่งมั่นที่จะทำ

ตอนนี้ฉันได้อ่านหลายสิ่งเกี่ยวกับฟังก์ชั่น umask ที่สวยงาม จากสิ่งที่ฉันเข้าใจ umask (ร่วมกับ PAM) ควรอนุญาตให้ฉันทำสิ่งที่ฉันต้องการ: ตั้งค่าการอนุญาตมาตรฐานสำหรับไฟล์และไดเรกทอรีใหม่ อย่างไรก็ตามหลังจากหลายชั่วโมงของการอ่านและการลองผิดลองถูกฉันก็ยังไม่สามารถใช้งานได้ ฉันได้รับผลลัพธ์ที่ไม่คาดคิดมากมาย ฉันชอบที่จะเข้าใจ umask และมีคำถามมากมายที่ยังไม่ได้ตอบ ฉันจะโพสต์คำถามเหล่านี้ด้านล่างพร้อมกับข้อค้นพบและคำอธิบายของการทดลองของฉันที่นำไปสู่คำถามเหล่านี้ เนื่องจากมีหลายสิ่งที่ดูเหมือนผิดพลาดฉันคิดว่าฉันกำลังทำสิ่งผิดหลายอย่าง ดังนั้นจึงมีคำถามมากมาย

หมายเหตุ: ฉันใช้ Ubuntu 9.10 และดังนั้นจึงไม่สามารถเปลี่ยน sshd_configเพื่อตั้ง umask สำหรับเซิร์ฟเวอร์ SFTP ติดตั้ง SSH OpenSSH_5.1p1 Debian-6ubuntu2 <ต้องการ OpenSSH 5.4p1 ดังนั้นไปที่คำถาม

1. ฉันจำเป็นต้องเริ่มต้นใหม่สำหรับ PAM CHANGS เพื่อรับผลหรือไม่

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

2. มีไฟล์เดียวที่จะเปลี่ยนแปลงที่ส่งผลต่อผู้ใช้ทุกคนในทุกช่วงเวลาหรือไม่?

ดังนั้นฉันจึงสิ้นสุดการเปลี่ยนไฟล์ MANY เมื่อฉันอ่านสิ่งต่าง ๆ มากมาย ฉันสิ้นสุดการตั้งค่า umask ในไฟล์ต่อไปนี้:

~/.profile -> umask=0002
~/.bashrc -> umask=0002
/etc/profile -> umask=0002
/etc/pam.d/common-session -> umask=0002
/etc/pam.d/sshd -> umask=0002
/etc/pam.d/login -> umask=0002

ฉันต้องการให้การเปลี่ยนแปลงนี้มีผลกับผู้ใช้ทั้งหมดดังนั้นการเปลี่ยนแปลงทั่วทั้งระบบจะเป็นการดีที่สุด มันสามารถทำได้หรือไม่

3. หลังจากทั้งหมดสิ่ง UMASK นี้ทำงานได้หรือไม่

ดังนั้นหลังจากเปลี่ยน umask เป็น 0002 ในทุก ๆ ที่ที่เป็นไปได้ฉันก็ทำการทดสอบ

------------ SCP -----------

ทดสอบ 1:

scp testfile (which has 777 permissions for testing purposes) server:/home/
testfile                                      100%    4     0.0KB/s   00:00   

ตรวจสอบการอนุญาต:

user@server:/home$ ls -l
total 4
-rwx--x--x 1 user uploaders 4 2011-02-05 17:59 testfile (711)

UPDATE: แก้ไขโดยการตั้งค่า umask ใน pam.d / common-session เท่านั้น (ดูความคิดเห็น)

--------- SSH ------------

ทดสอบ 2:

ssh server
user@server:/home$ touch anotherfile
user@server:/home$ ls -l
total 4
-rw-rw-r-- 1 user uploaders 0 2011-02-05 18:03 anotherfile (664)

-------- SFTP -----------

Nautilus: sftp: // server / home /

คัดลอกและวาง newfile จากไคลเอนต์ไปยังเซิร์ฟเวอร์ (777 บนไคลเอนต์)

ทดสอบ 3:

user@server:/home$ ls -l
total 4
-rwxrwxrwx 1 user uploaders 3 2011-02-05 18:05 newfile (777)

สร้างไฟล์ใหม่ผ่าน Nautilus ตรวจสอบการอนุญาตของไฟล์ในเทอร์มินัล:

ทดสอบ 4:

user@server:/home$ ls -l
total 4
-rw------- 1 user uploaders    0 2011-02-05 18:06 newfile (600)

ฉันหมายถึง ... เกิดอะไรขึ้นที่นี่! เราควรได้ 644 ทุก ๆ ครั้ง แต่ฉันได้รับ 711, 777, 600 และจากนั้น 644 ครั้งและ 644 นั้นจะทำได้ก็ต่อเมื่อสร้างไฟล์เปล่าใหม่ผ่าน SSH ซึ่งเป็นสถานการณ์ที่น่าจะเกิดขึ้นน้อยที่สุด

ดังนั้นฉันจึงถามว่า umask / pam ทำงานได้ไหม?

UPDATE: แก้ไขการทดสอบ 4 โดยการตั้งค่า umask ใน pam.d / common-session เท่านั้น (ดูความคิดเห็น)

4. แล้วมันหมายถึงอะไรกับ UMASK SSHFS?

บางครั้งเราติดตั้งเซิร์ฟเวอร์ในเครื่องโดยใช้ sshfs มีประโยชน์มาก. แต่อีกครั้งเรามีปัญหาการอนุญาต

นี่คือวิธีที่เราติดตั้ง:

sshfs -o idmap=user -o umask=0113 user@server:/home/ /mnt

หมายเหตุ: เราใช้ umask = 113 เพราะเห็นได้ชัดว่า sshfs เริ่มต้นที่ 777 แทนที่จะเป็น 666 ดังนั้นด้วย 113 เราจะได้รับ 664 ซึ่งเป็นการอนุญาตไฟล์ที่ต้องการ

แต่สิ่งที่เกิดขึ้นตอนนี้คือเราเห็นไฟล์และไดเรกทอรีทั้งหมดราวกับว่าพวกเขาเป็น 664 เราเรียกดูใน Nautilus ถึง / mnt และ:

  • คลิกขวา -> ไฟล์ใหม่ (ไฟล์ใหม่) --- ทดสอบ 5
  • คลิกขวา -> โฟลเดอร์ใหม่ (โฟลเดอร์ใหม่) --- การทดสอบ 6
  • คัดลอกและวางไฟล์ 777 จากลูกค้าในพื้นที่ของเรา --- ทดสอบ 7

ลองตรวจสอบบรรทัดคำสั่ง:

user@client:/mnt$ ls -l
total 8
-rw-rw-r-- 1 user 1007    3 Feb  5 18:05 copyfile (664)
-rw-rw-r-- 1 user 1007    0 Feb  5 18:15 newfile (664)
drw-rw-r-- 1 user 1007 4096 Feb  5 18:15 newfolder (664)

แต่เดี๋ยวก่อนลองตรวจสอบโฟลเดอร์เดียวกันนี้ที่ฝั่งเซิร์ฟเวอร์:

user@server:/home$ ls -l
total 8
-rwxrwxrwx 1 user uploaders    3 2011-02-05 18:05 copyfile (777)
-rw------- 1 user uploaders    0 2011-02-05 18:15 newfile (600)
drwx--x--x 2 user uploaders 4096 2011-02-05 18:15 newfolder (711)

อะไร?! การอนุญาตไฟล์ REAL นั้นแตกต่างจากที่เราเห็นใน Nautilus มาก ดังนั้น umask บน sshfs นี้เพียงสร้าง 'ตัวกรอง' ที่แสดงการอนุญาตของไฟล์ที่ไม่เป็นจริงหรือไม่? และฉันพยายามที่จะเปิดไฟล์จากผู้ใช้คนอื่น แต่กลุ่มเดียวกันที่มีสิทธิ์ 600 จริง แต่ 644 'ปลอม' สิทธิ์และฉันยังคงไม่สามารถอ่านนี้ดังนั้นสิ่งที่ดีคือตัวกรองนี้?

5. UMASK เป็นข้อมูลเกี่ยวกับไฟล์ทั้งหมด แต่สิ่งที่เกี่ยวกับผู้อำนวยการ?

จากการทดสอบของฉันฉันจะเห็นว่า umask ที่ถูกนำไปใช้ยังมีผลต่อสิทธิ์ไดเรกทอรี อย่างไรก็ตามฉันต้องการให้ไฟล์ของฉันเป็น 664 (002) และไดเรกทอรีของฉันเป็น 771 (006) ดังนั้นจึงเป็นไปได้ที่จะมี umask ที่แตกต่างกันสำหรับไดเรกทอรี?

6. PERHAPS UMASK / PAM เย็นจริงๆ แต่ UBUNTU เป็นเพียง BUGGY หรือไม่

ในอีกด้านหนึ่งฉันได้อ่านหัวข้อของผู้คนที่ประสบความสำเร็จกับ PAM / UMASK และ Ubuntu ในทางกลับกันฉันได้พบข้อบกพร่องที่เก่าและใหม่กว่ามากมายเกี่ยวกับ umask / PAM / fuse บน Ubuntu:

ดังนั้นฉันไม่รู้จะเชื่ออะไรอีก ฉันควรจะยอมแพ้? ACLจะแก้ปัญหาทั้งหมดของฉันได้ไหม หรือฉันมีปัญหาอีกครั้งในการใช้ Ubuntu?

หนึ่งคำเตือนด้วยการสำรองข้อมูลโดยใช้ tar การกระจาย Red Hat / Centos สนับสนุน acls ในโปรแกรม tar แต่ Ubuntu ไม่สนับสนุน acls เมื่อสำรองข้อมูล ซึ่งหมายความว่า acls ทั้งหมดจะหายไปเมื่อคุณสร้างสำเนาสำรอง

ฉันยินดีที่จะอัพเกรดเป็น Ubuntu 10.04 ถ้านั่นจะช่วยแก้ปัญหาของฉันเช่นกัน แต่ก่อนอื่นฉันต้องเข้าใจว่าเกิดอะไรขึ้น

คำตอบ:


3

มีหลายสิ่งที่เกิดขึ้นที่นี่

ความคิดแรก:

  • ใช่การเปลี่ยนแปลง pam.d จะมีผลทันที
  • /etc/pam.d/common-session เป็นสถานที่ที่ดีที่สุดในการตั้งค่าเริ่มต้น umask
  • umask pam.d ใด ๆ ที่จะได้รับการแทนที่โดยรายการใด ๆ ใน.bashrc,
    แต่.bashrcเพียงได้รับการอ่านภายใต้สถานการณ์บางอย่าง (โต้ตอบเปลือกที่ไม่ได้เข้าสู่ระบบ)
  • testfile (711) แปลกมาก
    • วิธีการ/homeติดตั้งและคุณใช้ ACL ของ?
      (เช่นพิมพ์ls -ld /homeและทำgetfacl /homeอะไร)
    • ไม่ได้testfileอยู่แล้วก่อนที่คุณจะทำสำเนาเพราะscpจะไม่เปลี่ยนสิทธิ์บนแฟ้มที่มีอยู่แล้ว (ยกเว้นกรณีที่คุณใช้-pธง)
  • Nautilus เป็นที่รู้จักกันในการสร้างไฟล์ด้วยวิธีที่แตกต่างกันไม่แน่ใจว่าทำไมหรืออะไรคือกฎ
  • umask=0113 อาจจะทำให้เกิดปัญหา
  • เซิร์ฟเวอร์และไคลเอนต์ใช้ระบบปฏิบัติการเดียวกันหรือไม่
    ตัวอย่างเช่นหากลูกค้ามีการเปิดใช้งาน ACL หรือเป็น Cygwin พฤติกรรมอาจแตกต่างกัน
  • วิธีที่ดีที่สุดในการบังคับใช้การอนุญาตที่มีเหตุผลคือการใช้ ACL ที่เป็นค่าเริ่มต้นเนื่องจากumaskผู้ใช้ใน.bashrcและคุณสามารถถูกแทนที่.bash_profileได้

ปรับปรุง:

  • umask=0113 สำหรับ sshfs ผิด
    1. ลองติดตั้งโดยไม่ระบุ umask
    2. touchสร้างไฟล์ใหม่ภายในจุดการกำหนดใช้
    3. คุณจะเห็นว่ามันได้รับเช่น-rw-r--r--โดยไม่มีxบิต
    4. โดยการปิดบังxบิตคุณอาจแตกไดเรกทอรี
      และคอมไพเลอร์อาจไม่สามารถสร้างไฟล์ปฏิบัติการได้อย่างเหมาะสม

การแก้ปัญหา:

หากเราไม่สามารถนึกถึงอะไรได้ดีไปกว่านี้คุณสามารถใช้famหรือgaminดูไฟล์ใหม่ที่กำลังสร้างและแก้ไขสิทธิ์บนไฟล์หรือแม้แต่แค่สคริปต์ที่รันเป็นระยะและตั้งค่าการอนุญาตสำหรับไฟล์ทั้งหมด


ขอบคุณ! ตกลงดังนั้นฉันจึงลบการตั้งค่า umask ทั้งหมดยกเว้น pam.d / common-session ปัญหานี้ได้รับการแก้ไขหลายประการ! ทดสอบ 1 (SCP) และทดสอบ 4 (ไฟล์ใหม่ใน Nautilus) ตอนนี้ทำงานได้ดี ตอนนี้ Hurdles กำลังคัดลอกไฟล์ที่มีสิทธิ์ใด ๆ ใน Nautilus ไปยังเซิร์ฟเวอร์ (ทดสอบ 3 - ยัง 777 แทนที่จะเป็น 664) และปัญหาไดเรกทอรี ทั้งเซิร์ฟเวอร์และไคลเอนต์เป็น Ubuntu (9.10 กับ 10.10 แม้ว่า) และไม่มีการเปิดใช้งาน ACL เพิ่มเติม

เสียงเหมือนการคัดลอกด้วย Nautilus เป็นการสงวนสิทธิ์เช่นcp -pหรือscp -pต้องการ
มิเคล

ความคิดวิธีการเปลี่ยนแปลงนี้หรือไม่?

คุณต้องการพฤติกรรมแบบใด คุณสามารถตั้งค่าการอนุญาตเริ่มต้นสำหรับไฟล์ใหม่โดยใช้ ACL เริ่มต้น Nautilus จะให้เกียรติ ACL เริ่มต้น ดูvanemery.com/Linux/ACL/linux-acl.htmlสำหรับภาพรวมและsuse.de/~agruen/acl/linux-acls/onlineสำหรับรายละเอียดทั้งหมด
มิเคล

โปรดทราบว่า ACL เริ่มต้นไม่บังคับใช้ชุดการอนุญาตสูงสุดพวกเขาเพียง แต่ให้สิทธิ์เหล่านั้นเป็นค่าเริ่มต้น cp -p, scp -pและการคัดลอกผ่าน Nautilus จะยังคงพยายามให้สิทธิ์การคัดลอกเหมือนกับไฟล์ที่ถูกคัดลอก
มิเคล

0

สิ่งนี้ไม่เกี่ยวกับ PAM / umask แต่อาจมีประโยชน์สำหรับคุณ

หากคุณsetgidไดเรกทอรีแล้วทุกไฟล์และไดเรกทอรีสร้างขึ้นภายในนั้นจะถูกกำหนดให้กับกลุ่มโดยอัตโนมัติ

root@ricarda ~ # mkdir hello      
root@ricarda ~ # chown :users hello 
root@ricarda ~ # chmod g+s hello
root@ricarda ~ # ls -l |grep hello 
drwxr-sr-x. 2 root users  4096 Feb  7 04:05 hello
root@ricarda ~ # touch hello/some_file
root@ricarda ~ # mkdir hello/some_dir
root@ricarda ~ # ls -l hello/       
total 4
drwxr-sr-x. 2 root users 4096 Feb  7 04:16 some_dir
-rw-r--r--. 1 root users    0 Feb  7 04:06 some_file

ขอบคุณ! ฉันไม่รู้เกี่ยวกับสิ่งนี้ มันไม่ได้แก้ปัญหาการอนุญาต แต่มันมีประโยชน์แน่นอน!


0

ACL ควรทำงานได้ดีสำหรับคุณ

ตั้งค่า ACL เริ่มต้นในทุกโฟลเดอร์สำหรับกลุ่มซึ่งจะสืบทอดโดยไฟล์และไดเรกทอรีในอนาคตทั้งหมด

สิ่งที่ชอบsetfacl -m d:g:uploaders:rwxควรทำงาน

วิธีแก้ไขสิทธิ์ที่มีอยู่ของคุณ:

find /shared/folder -type d -exec setfacl -m d:g:uploaders:rwx {} \;
find /shared/folder -type f -exec setfacl -m g:uploaders:rw {} \;

ดูเหมือนว่าหาก "อนุรักษ์" ตั้งไว้เมื่อคัดลอกไฟล์ ACL เริ่มต้นจะไม่ทำงาน ในกรณีนั้นฉันสามารถแนะนำให้รันคำสั่ง find ใน cron หรือตรวจสอบระบบไฟล์เพื่อทำการเปลี่ยนแปลงเท่านั้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.