নির্দিষ্ট ফোল্ডারের জন্য উমাস্ক কীভাবে সেট করবেন


23

কিছু সুস্পষ্ট কারণে আমাকে umaskএকটি নির্দিষ্ট ফোল্ডারের জন্য মান নির্ধারণ করতে হবে। কেউ কীভাবে তা করতে পারে?

অগ্রীম ধন্যবাদ!

আপডেট 1

নির্দিষ্ট ফোল্ডারের জন্য আমাকে উমাস্ক ব্যবহার করার কারণটি অনুসরণ করা হচ্ছে। আমার একটি ওয়েব অ্যাপ্লিকেশন রয়েছে এবং এটি যখন কোনও ফাইল তৈরি করে তখন ডিফল্ট অনুমতিটি 700 হয় But তবে সেই ফাইলটির জন্য আমার কমপক্ষে 755 অনুমতি দরকার। আমি মনে করি আমি এখন আরও স্পষ্টভাবে সমস্যাটি ব্যাখ্যা করতে পারতাম।


1
কারণগুলি আপনার কাছে সুস্পষ্ট হতে পারে তবে আমাদের কাছে তা নয়। আপনি যা করতে চান তা ভাগ করুন।
htorque

@htorque। আমার নির্দিষ্ট সমস্যাটিতে আমাকে উমাস্ক ব্যবহার করার প্রয়োজনীয় কারণ যুক্ত করা হয়েছে।
বখতিয়র

উত্তর:


30

আপনি ব্যবহার করতে পারেন setfacl

setfacl -d -m group:name:rwx /path/to/your/dir

nameগ্রুপের নাম কোথায়

আপনি বা কোনও নির্দিষ্ট ব্যবহারকারী কোন গ্রুপের অন্তর্ভুক্ত তা সন্ধান করতে ইউনিক্স / লিনাক্সে কীভাবে আপনি কীভাবে খুঁজে পাবেন যে প্রদত্ত ব্যবহারকারীর কমান্ড লাইনের মাধ্যমে কোন গ্রুপে রয়েছে?


1
সম্ভবত setfaclপরিবর্তন হয়েছে। -mএটি একটি বৈধ বিকল্প নয় বলে উল্লেখ করে আমি একটি ত্রুটি পাচ্ছি ।
রায়ান বার্নেট

রায়ান, setfaclপরিবর্তন করা হয় না। সম্ভবত আপনি সঠিক গ্রুপের নাম প্রদান করেন নি (পরে -m)।
সার্জক

1
নিশ্চিত setfaclজন্য অ্যাক্সেস নিয়ন্ত্রন তালিকা এবং umask। একটি ভাল সমাধান তবে আসলে যা বলা হয়েছিল তা নয়, আমি ভাবি না।
Wyatt8740

চেষ্টা করুন: sudo setfacl -Rdm ...(পুনরাবৃত্তির জন্য আরকে ছাড়ুন) কাজ করা উচিত। @ Wyatt8740 (সঠিক) নির্দিষ্ট রান হতে: man setfaclএবং টাইপ করুন /-modify। আপনার ব্যবহার করা দরকার sudo
JREAM

11

আপনি প্রতি ডিরেক্টরিতে উমাস্ক সেট করতে পারবেন না এটি একটি প্রক্রিয়া স্তরের মান। আপনার যদি অন্যকে কোনও ডিরেক্টরিতে ফাইল পড়তে বাধা দেওয়ার প্রয়োজন হয় তবে সংশ্লিষ্ট অনুমতি বিটগুলি প্রত্যাহার করুন।

উদাহরণস্বরূপ, যদি আপনার /home/user/directoryএমন কোনও ফাইল এবং ডিরেক্টরি রয়েছে যা কোনও প্রক্রিয়া থেকে 7 777 এর মতো অনুমতি পেতে /home/user/directoryপারে তবে 700০০ এর মতো কিছুতে অনুমতি বিট সেট করুন That এটি অন্য ব্যবহারকারীদের পক্ষে (অতিমাত্রার রুট বাদে) অবতরণকে অসম্ভব করে তুলবে মধ্যে /home/user/directory

আমি অদ্ভুত এবং /home/user750- এ অনুমতিগুলি সেট করেছি , তাই কেবলমাত্র আমি নিজের হোম ডিরেক্টরিতে পড়তে, লিখতে এবং নামতে পারি। এর ফলস্বরূপ যে ফোল্ডারগুলি /home/user/Publicঅন্যরা অ্যাক্সেস করতে পারে না তবে আমি এটির সাথে বেঁচে থাকতে পারি।


আপনার প্রশ্নের প্রতি আপডেট: এখনও, আপনি ফাইল সিস্টেমে এটি নিয়ন্ত্রণ করতে পারবেন না (FAT এর মতো আলাদা ফাইল সিস্টেমের ধরণ যা দৃ strongly়ভাবে নিরস্ত করা হয় তা ব্যবহার না করে), আপনার ওয়েব অ্যাপে এটি করা দরকার। যদি আপনার ওয়েব অ্যাপ্লিকেশনটি পিএইচপি কোড করে থাকে তবে আপনি umaskফাংশনটি ব্যবহার করে উড়ালটির উমাস্কটি পরিবর্তন করতে পারেন :

<?php
umask(0022);
// other code
?>

আপনি এটি একটি কনফিগারেশন ফাইলে রাখতে পারেন, যেমন ডাটাবেস সংযোগের পাসওয়ার্ড (ওয়ার্ডপ্রেসের মতো অ্যাপ্লিকেশনগুলিতে চিন্তাভাবনা) যুক্ত ফাইল।

মনে রাখবেন এটি একটি প্রক্রিয়া মান, কিছু ওয়েবসার্স আপনাকে তাদের কনফিগারেশন ফাইলগুলিতে সেট করার অনুমতি দেয়, অন্যথায় আপনি প্রারম্ভিক স্ক্রিপ্টগুলিকে পছন্দসই উমাস্ক সেট করতে পরিবর্তন করতে পারেন could মনে রাখবেন যে অনুমতিগুলি ওয়েব অ্যাপসের জন্য পছন্দ করে 755এবং 644বেশ বিপজ্জনক, যদি কোডটি সংবেদনশীল হয় তবে প্রত্যেকে এটি পড়তে পারে।


আমি জানি এটি প্রাচীন, তবে আমি এটি উল্লেখ করার মতো অনুভূত করছি: প্রশাসক প্যারেন্ট ডিরেক্টরি অনুমতি ইস্যুতে কাজ করতে মাউন্ট /home/user/Public( mount -o bind /home/user/Public /some/other/place) কে আবদ্ধ করতে পারেন ।
অ্যাড্রিয়ান গন্টার

1

ফোল্ডারের জন্য অনুমতি পরিবর্তন করতে chmod ব্যবহার করুন। umask ফাইলের জন্য।

আপনার যা প্রয়োজন তা উমাস্ক সেট করুন

umask xxx

এবং আপনার হয়ে গেলে ফিরে যান

umask 022

11
umask = ফাইল এবং ডিরেক্টরি, fmask = কেবল ফাইল, dmask = কেবল ডিরেক্টরি। : পি
হার্টিক

1
আমি আজ নতুন কিছু শিখলাম :)
ওজজক্স

1
আসলে এটি এনটিএফএসের মতো নির্দিষ্ট ফাইল সিস্টেমের জন্য বিকল্প (সেই ফাইল তৈরির মুখোশ সেটিং কমান্ড নয় umask)। বিভ্রান্তিকর তথ্য যুক্ত করার জন্য দুঃখিত।
htorque

উমাস্ক বর্তমান প্রক্রিয়াটির (বর্তমান শেল) ফাইল-তৈরির মাস্ক পরিবর্তন করে, আপনার যদি অন্য শেল খোলা বা ব্যবহারকারীর মালিকানাধীন প্রক্রিয়া থাকে তবে আমি বিশ্বাস করি না এটি প্রভাবিত হবে। আপনি যদি না আবার পরিবর্তন করেন ততক্ষণ এই কমান্ড ডিরেক্টরিটির বাইরে তৈরি অন্য কোনও ফাইলকেও প্রভাবিত করবে।
ডেভ

1

আর একটি সমাধান হতে পারে কেবলমাত্র ডিরেক্টরিতে তৈরি ফাইলগুলিতে গ্রুপ আইডি সেট করা, যা ফাইলগুলি তৈরি করা ব্যবহারকারীর গ্রুপ আইডির পরিবর্তে ডিরেক্টরি গ্রুপ আইডির মালিকানাধীন নতুন ফাইলগুলিকে তৈরি করে। সুতরাং আমি মনে করি আপনি কেবল এটি করতে পারেন:

chown www-data:www-data /my/folder

chmod 4755 /my/folder

এটি সেটগিড বিশেষ ফাইল অনুমতি সেট করে, যার ফলে তৈরি করা সমস্ত ফাইল গ্রুপের /my/folderমালিকানাধীন হতে পারে www-data, যার প্যারেন্ট ডিরেক্টরিটির কারণে এরপরে rx (5) অনুমতি রয়েছে।



1

শেল হুক এবং এর সাথে প্রয়োগ করা অ্যান্থার সলিউশন সরবরাহ করুন direnv। নিম্নলিখিত setfaclসিস্টেমে আপনার সিস্টেমে উপলব্ধ না হলে আরও সমাধানযোগ্য হতে পারে । (যেমন ম্যাকোস)

direnvশেলের জন্য একটি পরিবেশ পরিবর্তনকারী। বর্তমান ডিরেক্টরিটি নির্ভর করে পরিবেশের ভেরিয়েবলগুলি লোড বা আনলোড করার জন্য কীভাবে ব্যাশ, জেডএস, টিসিএস, ফিশ শেল এবং এলভিশে প্রবেশ করতে হয় তা এটি জানে ।

ব্যবহারের .envrcজন্য exportকাস্টম umaskনির্দিষ্ট Dir জন্য মান এবং exportইডি env Var unloaded করা হবে যখন আপনি যে Dir ছেড়ে।

# example .envrc file
export UMASK=0022

umaskএকবার কাজিং ডির পরিবর্তন হয়ে গেলে মান পরিবর্তন করতে একটি হুক সংজ্ঞায়িত করুন ।

function _umask_hook {
  if [[ -n $UMASK ]]; then
    umask "$UMASK"
  elif [[ $OSTYPE == darwin* ]]; then
    umask 0077
  else
    umask 0022
  fi
}

# To make the code more reliable on detecting the default umask
function _umask_hook {
  # Record the default umask value on the 1st run
  [[ -z $DEFAULT_UMASK ]] && export DEFAULT_UMASK="$(builtin umask)"

  if [[ -n $UMASK ]]; then
    umask "$UMASK"
  else
    umask "$DEFAULT_UMASK"
  fi
}

# zsh hooks
# trigger _umask_hook once working dir is changed
add-zsh-hook chpwd _umask_hook

# bash
# Append `;` if PROMPT_COMMAND is not empty
PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND;}_umask_hook"

আপাতত, zsh এর জন্য ডিরেক্টনভ হুক সূচনা chpwdহুক সমর্থন করে না । আপনি এই পৃষ্ঠাটি দেখার পরে যদি টানা অনুরোধটি জিএইচ -5154 মার্জ করা হয়নি। দয়া করে মন্তব্য করুন eval "$(direnv hook zsh)"এবং নিম্নলিখিত কোড সহ ম্যানুয়ালি হুক direnvকরুনchpwd

if (( $+commands[direnv] )) && ! (( $+functions[_direnv_hook] )); then
  _direnv_hook() {
    eval "$(command "direnv" export zsh)";
  }
  typeset -agU precmd_functions;
  if [[ -z ${precmd_functions[(r)_direnv_hook]} ]]; then
    precmd_functions=( _direnv_hook ${precmd_functions[@]} )
  fi

  typeset -agU chpwd_functions;
  if [[ -z ${chpwd_functions[(r)_direnv_hook]} ]]; then
    chpwd_functions=( _direnv_hook ${chpwd_functions[@]} )
  fi
fi

সূত্র: গতিশীল- umask- ভিত্তিক-on-cwd.md


0

সম্পর্কিত, তবে সম্ভবত এই ক্ষেত্রে প্রযোজ্য নয়, নিম্নলিখিত ক্লিপটি হ'ল .zshrc:

# Change the umask automatically for some directories; use 0022 as the default
chpwd () {
    case $PWD in
        $HOME/[Dd]ocuments*)
            if [[ $(umask) -ne 077 ]]; then
                umask 0077
                echo -e "\033[01;32mumask: private \033[m"
            fi;;
        */[Ww]eb*)
            if [[ $(umask) -ne 072 ]]; then
                umask 0072
                echo -e "\033[01;33mumask: other readable \033[m"
            fi;;
        /vol/nothing)
            if [[ $(umask) -ne 002 ]]; then
                umask 0002
                echo -e "\033[01;35mumask: group writable \033[m"
            fi;;
        *)
            if [[ $(umask) -ne 022 ]]; then
                umask 0022
                echo -e "\033[01;31mumask: world readable \033[m"
            fi;;
    esac
}

ইন্টারেক্টিভ ব্যবহারের জন্য, এর মতো কিছু কাজ করবে (তবে স্পষ্টতই, সুরক্ষা সরবরাহ না করা)।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.