// تم التحديث في 8 فبراير - موجز القضايا العالقة:

  • كيف يمكنك استعراض الدلائل بشكل مختلف عن الملفات؟
  • كيفية إجراء مسح ضوئي على 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 لأخذ التأثير؟

لنبدأ بهذا. كان هناك الكثير من الملفات المتضمنة ولم أتمكن من معرفة ما الذي يؤثر وما لا يؤثر على الأشياء ، أيضًا لأنني لم أكن أعرف ما إذا كان يتعين علي إعادة تشغيل النظام بأكمله حتى تصبح تغييرات PAM سارية المفعول أم لا. فعلت ذلك بعد عدم رؤية النتائج المتوقعة ، ولكن هل هذا ضروري حقًا؟ أو يمكنني فقط تسجيل الخروج من الخادم وتسجيل الدخول مرة أخرى ، وهل يجب أن تكون سياسات PAM الجديدة فعالة؟ أم أن هناك بعض برامج "PAM" لإعادة تحميلها؟

2. هل يوجد ملف واحد يمكن تغييره يؤثر على جميع المستخدمين لجميع الجلسات؟

لذلك انتهيت من تغيير العديد من الملفات ، حيث قرأت العديد من الأشياء المختلفة. انتهى بي الأمر بإعداد 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   

دعنا نتحقق من الأذونات:

[email protected]:/home$ ls -l
total 4
-rwx--x--x 1 user uploaders 4 2011-02-05 17:59 testfile (711)

تحديث: تم إصلاحه عن طريق ضبط umask فقط في pam.d / جلسات مشتركة (انظر التعليقات)

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

الاختبار 2:

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

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

نوتيلوس: sftp: // server / home /

نسخ ولصق ملف جديد من عميل إلى خادم (777 على العميل)

الاختبار 3:

[email protected]:/home$ ls -l
total 4
-rwxrwxrwx 1 user uploaders 3 2011-02-05 18:05 newfile (777)

قم بإنشاء ملف جديد من خلال Nautilus. تحقق من أذونات الملف في المحطة:

الاختبار 4:

[email protected]:/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 بعد كل شيء؟

تحديث: اختبار ثابت 4 فقط من خلال ضبط umask في pam.d / جلسات مشتركة (انظر التعليقات)

4. إذن ماذا يعني UMASK SSHFS؟

في بعض الأحيان نقوم بتركيب خادم محليًا باستخدام sshfs. مفيد جدا. لكن مرة أخرى ، لدينا مشكلات تتعلق بالأذونات.

هنا كيف نصعد:

sshfs -o idmap=user -o umask=0113 [email protected]:/home/ /mnt

ملاحظة: نستخدم umask = 113 لأنه يبدو أن sshfs يبدأ من 777 بدلاً من 666 ، لذلك مع 113 نحصل على 664 وهو إذن الملف المطلوب.

ولكن ما يحدث الآن هو أننا نرى جميع الملفات والمجلدات كما لو كانت 664. ونحن نتصفح في Nautilus إلى / mnt و:

  • انقر بزر الماوس الأيمن -> ملف جديد (ملف جديد) - اختبار 5
  • انقر بزر الماوس الأيمن -> مجلد جديد (مجلد جديد) - اختبار 6
  • انسخ والصق ملف 777 من عميلنا المحلي --- اختبار 7

لذلك دعونا نتحقق من سطر الأوامر:

[email protected]:/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)

لكن مهلا ، دعنا نتحقق من هذا المجلد نفسه على جانب الخادم:

[email protected]:/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)

ماذا او ما؟! تختلف أذونات الملفات الحقيقية كثيرًا عما نراه في Nautilus. فهل تقوم هذه المظلة على sshfs فقط بإنشاء "مرشح" يعرض أذونات ملف غير حقيقية؟ وحاولت فتح ملف من مستخدم آخر ولكن نفس المجموعة التي لديها 600 إذن حقيقي ولكن 644 أذونات "وهمية" ، وما زلت لا أستطيع قراءة هذا ، فما فائدة هذا الفلتر ؟؟

5. UMASK هو كل شيء عن الملفات. ولكن ماذا عن الدلائل؟

من خلال اختباراتي ، أستطيع أن أرى أن umask الذي يتم تطبيقه يؤثر أيضًا بطريقة ما على أذونات الدليل. ومع ذلك ، أريد أن تكون ملفاتي 664 (002) وأن تكون الدلائل الخاصة بي 771 (006). فهل من الممكن أن يكون هناك umask مختلف للأدلة؟

6. PERHAPS UMASK / PAM رائع حقًا ، لكن UBUNTU هو مجرد خلل؟

من ناحية أخرى ، لقد قرأت موضوعات لأشخاص حققوا نجاحًا مع PAM / UMASK و Ubuntu. من ناحية أخرى ، لقد وجدت العديد من الأخطاء القديمة والحديثة المتعلقة بـ umask / PAM / fuse على Ubuntu:

لذلك لم أعد أعرف ماذا أصدق بعد الآن. هل يجب علي الاستسلام؟ هل سيحل الرباط الصليبي الأمامي كل مشاكلي؟ أو هل لدي مشاكل مرة أخرى في استخدام Ubuntu؟

One word of caution with backups using tar. Red Hat /Centos distributions support acls in the tar program but Ubuntu does not support acls when backing up. This means that all acls will be lost when you create a backup.

أنا على استعداد تام للترقية إلى Ubuntu 10.04 إذا كان ذلك سيحل مشاكلي أيضًا ، لكن أولاً أريد أن أفهم ما يحدث.

answer

يمكن أن تحدث أشياء كثيرة هنا.

الأفكار الأولى:

  • نعم ، تغييرات pam.d سارية المفعول على الفور
  • /etc/pam.d/common-session هو أفضل مكان لتعيين الافتراضي umask
  • سيتم تجاوز أي pam.d umask بواسطة أي إدخال في .bashrc،
    ولكن .bashrcلا تتم قراءته إلا في ظل ظروف معينة (تفاعلية ، غير قابلة لتسجيل الدخول)
  • testfile (711) غريب جدا
    • كيف يتم /homeالتركيب ، وهل تستخدم قوائم التحكم في الوصول؟
      (على سبيل المثال ما فعله 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مشاهدة الملفات الجديدة التي يتم إنشاؤها وإصلاح الأذونات عليها ، أو حتى مجرد برنامج نصي يتم تشغيله بشكل دوري ويضع الأذونات على جميع الملفات.

يجب أن تعمل قوائم 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 {} \;

يبدو أنه إذا تم تعيين "الحفظ" عند نسخ ملف ، فإن قائمة التحكم بالوصول الافتراضية لا تعمل. في هذه الحالة ، يمكنني فقط اقتراح تشغيل أوامر البحث في cron أو مراقبة نظام الملفات من أجل التغييرات.

هذا ليس متعلقًا بـ PAM / Umask ، ولكنه قد يكون مفيدًا لك.

إذا قمت بتعيين دليل ، فسيتم تلقائيًا تعيين جميع الملفات والأدلة التي تم إنشاؤها بداخله إلى مجموعته.

[email protected] ~ # mkdir hello      
[email protected] ~ # chown :users hello 
[email protected] ~ # chmod g+s hello
[email protected] ~ # ls -l |grep hello 
drwxr-sr-x. 2 root users  4096 Feb  7 04:05 hello
[email protected] ~ # touch hello/some_file
[email protected] ~ # mkdir hello/some_dir
[email protected] ~ # 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