কেন ডিফল্ট ফাইল তৈরির অনুমতি 66 creation6?


12

যেমনটি আমি জানতে পেরেছি, উমাস্ক ব্যবহার করার সময়, আপনি ফাইলগুলিতে যে সর্বোচ্চ অনুমতি দিতে পারেন সেগুলি হ'ল 666। যা দ্বারা সম্পন্ন হয় umask 0000। এটি ডিফল্ট ফাইল তৈরির অনুমতিগুলির কারণে, যা আমি জানি প্রতিটি সিস্টেমে 6 666 হিসাবে উপস্থিত হয়।

আমি জানি ফাইলগুলির বিষয়বস্তুগুলি দেখানোর জন্য আমাদের কার্যকর করার অধিকার দরকার rights
তবে কেন আমরা 6 666 এ ডিফল্ট ফাইল নির্মাণের অনুমতি সীমাবদ্ধ করব?


এ কেমন সিস্টেম? কেবলমাত্র umaskআমার সাথে দেখা হয়েছিল সর্বদা 0022, ডিফল্ট অনুমতি
64৪৪

না আপনি ভুল বুঝে নি। উমাস্ক 6 of6 এর ডিফল্ট ফাইল অনুমতি ব্যবহার করছে এবং তার নিজস্ব মান (যা আপনার সিস্টেমে 0022) সাবট্র্যাক্ট করছে। তাই সবচেয়ে অনুমতি সেট পারে umask 0000- যা এখনও 666. (কিন্তু দৃশ্যত ফোল্ডার 777 ব্যবহার করুন) ফাইল অনুমতির সীমিত
পিটার

বুঝেছি এখন এটি একটি ভাল প্রশ্ন।
manatwork

2
ফাইলের সামগ্রীগুলি দেখতে আপনার এক্সিকিউটেবল অনুমতিের দরকার নেই s এটি ডিরেক্টরিগুলির জন্য তাই ডিরেক্টরিগুলি নির্বাহের অনুমতি সহ ডিফল্টরূপে তৈরি করা হয়।
জোসেফ আর।

1
আমি বিশ্বাস করি [তবে এটি নিশ্চিত করার জন্য আরও সন্ধান করা দরকার] যে সুরক্ষা কিছু সমস্যা এড়াতে এটি ডিজাইনের দ্বারা হয়েছে: "chmod" এ অ্যাক্সেস না করে আপনি কোনও ফাইল কার্যকর করতে পারবেন না। umask 0000 0666 দিয়ে ফাইলগুলি এবং 0777 দিয়ে ডিরেক্টরি তৈরি করে [যা উপায় দ্বারা সুরক্ষার দিক থেকে বেশ ভয়ঙ্কর ডিফল্ট সেটিংস!]
অলিভিয়ার ডুলাক

উত্তর:


10

আমি যতদূর বলতে পারি, এটি স্ট্যান্ডার্ড ইউটিলিটিগুলিতে কঠোর কোডড। আমি একটি নতুন ফাইল তৈরি করা এবং একটি নতুন ডিরেক্টরি তৈরি করা straceউভয়ই dtouchmkdir

touchট্রেস এই উত্পাদিত:

open("newfile", O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK, 0666) = 3

mkdirট্রেস এটি উত্পাদন যখন :

mkdir("newdir", 0777)                   = 0

সি তে ফাইল / ডিরেক্টরি তৈরির প্রক্রিয়া কোডিংয়ের সংক্ষিপ্ততা, আমি ডিফল্ট অনুমতিগুলি পরিবর্তনের কোনও উপায় দেখতে পাচ্ছি না। যদিও আমার কাছে এটি মনে হয় যে ডিফল্টরূপে ফাইলগুলি সম্পাদনযোগ্য না করে তা বোঝা যায়: আপনি চান না যে কোনও এলোমেলো পাঠ্য দুর্ঘটনাক্রমে শেল কমান্ড হিসাবে ভুল ধারণাটিযুক্ত হয়ে উঠুক।

হালনাগাদ

অনুমতির বিটগুলি কীভাবে স্ট্যান্ডার্ড ইউটিলিটিগুলিতে হার্ড কোডড হয় তার একটি উদাহরণ দেওয়ার জন্য। coreutilsপ্যাকেজটিতে দুটি ফাইল থেকে কিছু প্রাসঙ্গিক লাইন এখানে রয়েছে যা উভয়ের জন্য উত্স কোড touch(1)এবং mkdir(1)অন্যদের মধ্যে রয়েছে:

mkdir.c:

if (specified_mode)
   {   
     struct mode_change *change = mode_compile (specified_mode);
     if (!change)
       error (EXIT_FAILURE, 0, _("invalid mode %s"),
              quote (specified_mode));
     options.mode = mode_adjust (S_IRWXUGO, true, umask_value, change,
                                  &options.mode_bits);
     free (change);
   }   
  else
    options.mode = S_IRWXUGO & ~umask_value;
}   

অন্য কথায়, যদি মোডটি নির্দিষ্ট না করা থাকে তবে এটির S_IRWXUGOদ্বারা সংশোধিত (পড়ুন: 0777) এ সেট করুন umask_value

touch.c আরও স্পষ্ট:

int default_permissions =
  S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH;

এটি, প্রত্যেককে পড়ার এবং লেখার অনুমতি দিন (পড়ুন: 0666), যা umaskঅবশ্যই ফাইল তৈরির প্রক্রিয়া দ্বারা সংশোধিত হবে ।

আপনি কেবলমাত্র এই প্রোগ্রামটিমেটিকভাবে ঘুরে আসতে পারবেন: যেমন কোনও সি প্রোগ্রামের মধ্যে ফাইল তৈরি করার সময়, যেখানে আপনি সিস্টেমটি সরাসরি কল করেন বা এমন কোনও ভাষার মধ্যে যা আপনাকে নিম্ন স্তরের সিস্কেল তৈরি করতে দেয় (উদাহরণস্বরূপ পার্লের sysopenনীচে দেখুন perldoc -f sysopen)।


আপনি ঠিক বলেছেন, আমি কোনও দুর্ঘটনা চাই না। তবে এটিকে পরিবর্তন করার কোনও উপায় নেই, ভয়াবহ! স্ট্যান্ডার্ড মানগুলি 777 হওয়া উচিত And এবং আমাদের প্রয়োজন umask fileএবং umask dir। দুটি পৃথক ডিফল্ট মান এবং সূক্ষ্ম সেট করুন। তবে এখন আমার কাছে এক্সিকিউট পারম দিয়ে ফাইলগুলি তৈরি করার কোনও উপায় নেই।
পিটার

1
@ পিটারআই ওয়েল, mkdir(1)আপনাকে -mতৈরির সময় ডিরেক্টরিটির মোড নির্দিষ্ট করার জন্য একটি সুইচ সরবরাহ করে। ফাইলগুলির সাথে, যেহেতু ফাইল তৈরির ফলে open(2)সিস্কল ব্যবহার করা হয় , আপনি ফাইলটি তৈরি করতে যে সরঞ্জামটি ব্যবহার করেন তা হ'ল মোড বিটগুলি পাস করার জন্য দায়বদ্ধ openএবং আপনি এই বিষয়ে কোনও বক্তব্য পান না। install(1)ডিফল্টরূপে আপনার ফাইলটিকে একটি নতুন স্থানে অনুলিপি করে এবং এক্সিকিউট বিট সেট করে, তবে এটি এখনও নির্মাণের সময় ঘটছে না।
জোসেফ আর।

আপনি কী বলছেন, touchউদাহরণস্বরূপ সঠিক মান নির্ধারণ করার জন্য এটি দায়বদ্ধ। আপনি কি জানেন যেখানে এটি মানগুলি সঞ্চয় করে? সম্ভবত তারা সিস্টেমভিত সেট করা আছে - তাই আমরা সেগুলি পরিবর্তন করতে পারি? কারণ আমি মুক্ত হতে চাই ;)
পিটার

@ পিটারআই আপডেট হওয়া উত্তরটি দেখুন।
জোসেফ আর।

1
@ পিটারি আমি উত্তরটি আবার আপডেট করেছি। আপনি পার্সের মতো সি বা অন্য কোনও ভাষা থেকেই সরাসরি সিস্কল তৈরি করতে সক্ষম হতে পারেন।
জোসেফ আর।

6

প্রথমত, কোনও গ্লোবাল ডিফল্ট নেই, অনুমতিগুলি ফাইল তৈরি করে এমন অ্যাপ্লিকেশনটির উপর নির্ভর করে। উদাহরণস্বরূপ, এই ছোট্ট সি প্রোগ্রামটি উমাস্কটি 0000 হলে অনুমতিগুলির সাথে একটি ফাইল '/ tmp / foo' তৈরি করবে (যে কোনও ক্ষেত্রে অনুমতিগুলি 0777 এবং mas umask হবে):

int main() 
{
   creat("/tmp/foo", 0777);
   return 0;
}

বলা হচ্ছে, অনেক অ্যাপ্লিকেশন 0666 এর অনুমতি নিয়ে ফাইল তৈরি করে That এর দুটি কারণ রয়েছে:

  1. সুরক্ষা: আপনি চান না যে কোনও সালিসী ফাইল কার্যকর হবে।
  2. সুবিধা: বেশিরভাগ ফাইল এক্সিকিউটেবল হওয়ার দরকার নেই। বিপুল পরিমাণে অন্যান্য ফাইলগুলিতে আনসেট না করে বাছাই করা কয়েকটি ফাইলের উপর এক্সিকিউটেবল বিট সেট করা সহজ। অবশ্যই, উমাস্ক 0133 এটি সমাধান করবে, কিন্তু তারপরে কিছুই জিতেনি এবং আপনি প্রোগ্রামগুলি এক্সিকিউটযোগ্য ফাইল তৈরি করতে দিতে পারেননি এমনকি আপনি চাইলেও।

1
সুরক্ষার কারণে ফাইলগুলি এক্স (এক্সিকিউট) বিট সেট ছাড়াই তৈরি করা হয়। ফাইলগুলির অসাবধানতা কার্যকরকরণ [সিডব্লিউ] হ'ল "খারাপ জিনিস" (টিএম)। Chmod প্রোগ্রাম আপনাকে প্রয়োজনীয় অনুমতি বিট সেট করতে (পুনরায়) ক্ষমতা দেয়।
চককট্রিল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.