সমস্ত কমান্ডকে একটি উপাধিকার হিসাবে সংজ্ঞায়িত করা থেকে বিরত করুন


10

সমস্ত আদেশকে একটি উপাধিকার হিসাবে সংজ্ঞায়িত করা থেকে বিরত করার কোনও উপায় আছে কি?

উদাহরণস্বরূপ কোনও ব্যবহারকারীর rmএকটি উপনামের নাম হিসাবে কোনও অন্য কমান্ড (উবুন্টু ডিফল্ট কমান্ড) সংজ্ঞায়িত করতে বা সক্ষম হতে হবে না ।


তুমি আসলে কি বোঝাতে চাও? নিজেকে দুর্ঘটনাবশত থেকে আটকাতে আপনি কি "সফট ব্লক" এর মতো কিছু খুঁজছেন?
kos

4
আমি নিশ্চিত না যে এটি করা সম্ভব হলেও এমনকি এটি করার কী লাভ।
মুড়ু

4
এটার পক্ষে যুক্তি কী হবে? এটি ব্যবহারকারীর আসল কমান্ড টাইপ করা থেকে বাধা দেয় না ... সুতরাং আমি কারও জন্যই বাইরের নাম ব্লক করার কোনও কারণ দেখতে পাচ্ছি না?
রিনজউইন্ড

2
মুরু এবং রিনজুইন্ডের মতো বলল, কী কথা? ব্যবহারকারীকে ইতিমধ্যে যে জিনিসগুলি করার অনুমতি দেওয়া হয়েছে তার চেয়ে ছোট ছোট জিনিসগুলি অ্যালিয়াসগুলি করতে পারে না, এলিয়াসগুলি ব্লক করা কেবল ব্যবহারকারীর জীবনকে আরও শক্ত করে তোলে। এছাড়াও সমাধানটি যাই হোক না কেন (যেমন বিল্ট-ইনকে ওভাররাইড করার জন্য একটি উপাধি / ফাংশন ব্যবহার করে) আমি নিজেই এটির দ্বারা লক না করে ব্যবহারকারীদের দ্বারা এটি অ-পরিস্থিতিযোগ্য করার কোনও উপায়ের কথা ভাবতে পারি না ~/.bashrc
kos

সমস্ত উপনামকে অবরুদ্ধ করে রাখছেন না, কেবলমাত্র তাকে / তাকে ডিফল্ট কমান্ডের নামটি একটি উপনামের নাম হিসাবে ব্যবহার না করা থেকে বিরত করুন। আমি জানি আমরা প্রকৃত কমান্ড চালানোর জন্য একই উপায়যুক্ত কমান্ড সহ ways ব্যবহার করার মতো অনেক উপায়ে এলিয়াসগুলি থেকে মুক্তি পেতে পারি।
এগুলি

উত্তর:


24

কোনও ব্যবহারকারীর পক্ষে কোনও পছন্দ নেই যা তারা পছন্দ করেন না কেন এলিয়াসগুলি সংজ্ঞায়িত করে। বিবেচনা:

  1. আপনি মধ্যে উপকরণ অক্ষম করুন /etc/bash.bashrc। তারা যেখানেই বেছে নিয়েছে এটিকে সক্ষম করে।
  2. আপনি মুছে ফেলতে সব alias লেখা উল্লেখ /etc/bash.bashrc, এবং সমস্ত ~/.bashrcএবং ~/.bash_aliasesএকটি স্ক্রিপ্ট মাধ্যমে। তারা তাদের ডাকনামটি অন্য একটি ফাইলে রাখে এবং এটি উত্স করে।
  3. আপনি একটি কমান্ড চালান PROMPT_COMMANDযা নির্দিষ্ট উপাত্ত অক্ষম করে। তারা নতুন সংজ্ঞা বা অপরিবর্তিত PROMPT_COMMAND
  4. আপনি আলাপগুলি ফাঁদ করে DEBUGএবং অপরিবর্তিত করেন। তারা ফাঁদটি সরিয়ে দেয়।
  5. আপনি সমস্ত ফাইলকে উত্সাহে রুট করার অনুরোধ করেছিলেন। তারা চালিত প্রথম কমান্ড হিসাবে তারা অন্য ফাইল এবং উত্সটি ম্যানুয়ালি ব্যবহার করে।
  6. আপনি বিল্টিনগুলি অক্ষম করুন unset, builtinএবং enable; করতে aliasএকটি ফাংশন ; declare -rf aliasব্যবহারকারীদের ফাংশনটি পরিবর্তন করা থেকে বিরত রাখতে; এবং ফাংশন রফতানি। তারা /bin/bashচালিয়ে যায় --rcfileএবং --init-fileএকটি নতুন শেল শুরু করতে, যেখানে বলা হয়েছে বিল্টইনগুলি এখন সক্ষম রয়েছে।
  7. ...

সংকলনের সময় আপনি এলিয়াসগুলি অক্ষম করতে পারতেন, তারপরে বাশকে আপ টু ডেট রাখুন এবং পরবর্তী শেলশকের দ্বারা আপনি প্রভাবিত না হয়েছেন তা নিশ্চিত করা আপনার পক্ষে হবে। অবশ্যই, ব্যবহারকারীরা তাদের নিজস্ব ব্যাশ তৈরি করতে পারে।


4
যদিও আমি কিছুটা মজার ধারণা পেয়েছিলাম: আপনি ওরফে ওরফে ব্যবহার করতে পারেন: =)
রিনজউইন্ড

4
এবং তারা unalias alias
মুরু

4
@ মুরু নিশ্চিত তবে আপনি ওরফ আনালিয়াসও করতে পারেন: +
রিনজউইন্ড

8
@ রিনজুইন্ড এবং তারা চালায় \unalias unalias
মুরু

10

টি এল; ডিআর

কোনও ব্যবহারকারীকে এলিয়াস তৈরি করা থেকে রোধ করার একমাত্র উপায় হ'ল তাদের শেল সরবরাহ করা যা আলিয়াসিং সমর্থন করে না। এটি সাধারণত একটি এক্স / ওয়াই সমস্যা, যেখানে এক্স আসলেই একটি হুমকি মডেল যা কোনও ব্যবহারকারীকে ভাগ করে নেওয়া সিস্টেমে শেল দেওয়ার পরে পোস্ট-ফ্যাক্টোটি সমস্যা সমাধানের পরিবর্তে উপযুক্ত নিয়ন্ত্রণ বা আর্কিটেকচার দিয়ে সমাধান করা উচিত ।

নীচে, আমি একটি প্রযুক্তিগতভাবে সঠিক উত্তর সরবরাহ করি, পাশাপাশি এটি কী কী সমস্যাগুলি সমাধান করবে এবং এর সমাধান করবে না সে সম্পর্কে কিছু গাইডেন্স। আমি বিকল্প নিয়ন্ত্রণগুলি সম্পর্কে কিছু অতিরিক্ত নির্দেশিকাও সরবরাহ করি।

ব্যাশ সীমাবদ্ধ শেল ব্যবহার করা

আপনি বাশের ব্যবহার করতে পারেন ব্যবহারকারীর লগইন শেল হিসাবে rbash বরাদ্দ করে আপনি বাশের সীমাবদ্ধ শেলটি । উদাহরণ স্বরূপ:

foo:x:2001:2001:restricted user:/home/foo:/bin/rbash

তারপরে আপনাকে অবশ্যই উপনামটি অক্ষম করতে হবে অন্যের শেলটি না ভেঙে ব্যবহারকারীর জন্য অন্তর্নির্মিত হবে। উদাহরণ হিসাবে, আপনি /etc/profile.d/rbash.sh এর মতো কোনও ফাইলে নিম্নলিখিতটি যুক্ত করতে পারেন :

# Limit effect to users in a specific UID range.
if ((UID >= 2000)) && ((UID < 3000)); then
    # Check shell options; disable alias builtins when shell is restricted.
    if [[ $- =~ r ]]; then
        enable -n alias
        enable -n unalias
    fi
fi

আদেশ সহকারে

আপনি যদি না ব্যবহারকারীকে ক্রুট কারাগারে রাখেন বা তাদের কোনও সংশোধিত সরবরাহ না করেন PATH সরবরাহ করেছেন যা অন্য শেলগুলিতে অ্যাক্সেস অন্তর্ভুক্ত করে না, bashপ্রম্পটে কেবল টাইপ করা এবং একটি বাধাবিহীন শেল পাওয়া থেকে ব্যবহারকারীকে থামিয়ে দেওয়ার কিছুই নেই ।

এছাড়াও, ডিজাইন করে সীমাবদ্ধ শেল অনেকগুলি সাধারণ ক্রিয়াকলাপ যেমন ডিরেক্টরি পরিবর্তন করে:

$ cd /tmp
rbash: cd: restricted

কিন্তু অন্যান্য স্ক্রিপ্ট বা প্রোগ্রাম বাধা দেয় না পাথ এমনটি থেকে। এর অর্থ আপনাকে ব্যবহারকারীর পরিবেশের যত্ন সহকারে নৈপুণ্য বজায় রাখতে হবে এবং বিশেষত আপনাকে তাদের স্টার্টআপ ফাইলগুলিতে PATH পরিবর্তন করতে সক্ষম হওয়া থেকে বিরত রাখতে হবে , যদিও rbash PATH কেবল পঠনযোগ্য করে তোলে যদিও এটি আরম্ভের পরে তা করে ।

আরও ভাল পছন্দ

এমনকি আপনি যদি রব্যাশ ব্যবহার করেন তবে আপনাকে বিস্তৃত নিয়ন্ত্রণের অংশ হিসাবে এটি করা দরকার। কিছু উদাহরণ অন্তর্ভুক্ত থাকতে পারে:

  • আটকান অ প্রযুক্তিগত থেকে ব্যবহারকারীদের ঘটনাক্রমে যেমন ডিফল্ট alias লেখা প্রদানের মাধ্যমে বিপজ্জনক কমান্ড আবাহন rm -i, mv -iএবং cp -iমধ্যে /etc/bash.bashrc ফাইল।

    • আপনার মূল উদাহরণটি দেওয়া, এটি সম্ভবত সবচেয়ে বোধগম্য সমাধান।
    • আপনি enable -n aliasযদি চান তবে এটির সাথে একত্রিত করতে পারেন।
    • এটি জ্ঞাতনামূলক ব্যবহারকারীদের উপকরণগুলি পরিবর্তন করা থেকে বিরত রাখবে না, তবে অ-প্রযুক্তিগত ব্যবহারকারীদের আপনার উদ্বিগ্ন যা কিছু করা থেকে বিরত করা যথেষ্ট।
  • ফাইল এবং ডিরেক্টরিগুলি সুরক্ষিত করার জন্য চিরাচরিত ইউনিক্স অনুমতি বা POSIX ACLs।

  • লগইনগুলি যা একটি একক অ-ইন্টারেক্টিভ কমান্ড সম্পাদন করে। উদাহরণ স্বরূপ:

    foo:x:2001:2001:run foo.sh:/home/foo:/usr/local/bin/foo.sh
  • প্রতি-কী এসএসএইচ বাধ্যতামূলক কমান্ডগুলি ব্যবহার করুন। উদাহরণ স্বরূপ:

    # ~foo/.ssh/authorized_keys
    command="/usr/local/bin/foo.sh" [remainder of line]
  • শর্তসাপেক্ষ ম্যাচ ব্লক সহ ওপেনএসএসএইচ ফোর্সকম্যান্ড বিকল্পটি ব্যবহার করুন ।

  • মত বিশেষ সরঞ্জাম ব্যবহার করুন gitolite বা scponly আপনার নির্দিষ্ট ব্যবহারের ক্ষেত্রে জন্য পরিকল্পিত।

  • ক্রুট জেল ব্যবহার করুন ।

  • বিভাজনযুক্ত পরিবেশ সরবরাহের জন্য জেন, ওপেনভিজেড, এলএক্সসি, ভিএমওয়্যার, ভার্চুয়ালবক্স, বা অন্যান্য প্রযুক্তিগুলির মতো ভার্চুয়ালাইজেশন ব্যবহার করুন।

একবার আপনি আপনার হুমকির মডেলটি সঠিকভাবে সংজ্ঞা দিয়েছিলেন, আপনি আপনার ব্যবহারের ক্ষেত্রে সবচেয়ে উপযুক্ত নিয়ন্ত্রণগুলি সনাক্ত করতে পারবেন। আপনি কেন এলিয়াসিং প্রতিরোধ করতে চান তার আরও অর্থবহ বোঝা ছাড়াই (যেমন কোন বাস্তব-বিশ্বের সমস্যাটি সমাধান করে?) আপনি সর্বাধিক উপযুক্ত নিয়ন্ত্রণ নির্বাচন করতে পারবেন না।


সাধারণভাবে +1, তবে এটি এক্স / ওয়াই সমস্যা হিসাবে শ্রেণীবদ্ধ করার জন্যও।
জো

5

এটি মুরুর উত্তরগুলি দেখায়, এটি বেশ অর্থহীন প্রচেষ্টা। তবে কয়েকটি বিকল্প রয়েছে তবে সেগুলি নিখুঁত নয়।

bashম্যানুয়াল অনুসারে , ফাংশনগুলি সর্বদা এলিয়াসের চেয়ে বেশি প্রাধান্য পায়, সুতরাং আমরা নিম্নলিখিতটি করতে পারি:

xieerqi@eagle:~$ function alias { echo "Aliases are no-no" ; }
xieerqi@eagle:~$ alias TEST='rm'
Aliases are no-no

আপনি সিস্টেমওয়াইডে ফাংশন সংজ্ঞা স্থাপন করতে পারেন .bashrc, তবে মুড়ু হিসাবে উল্লেখ করা হয়েছে, স্মার্ট ব্যবহারকারী bashrcউদাহরণস্বরূপ একটি পৃথক ফাইলের স্যোর্সিং করে এলিয়াসগুলি পাওয়ার উপায় খুঁজে পাবেন ।

আমি যে ধারণাটি নিয়ে খেলেছি তা enableঅন্তর্নির্মিত। aliasঅন্তর্নির্মিত একটি শেল এবং bashএতে একটি দুর্দান্ত enableকমান্ড রয়েছে যা বিল্টিনগুলি সক্ষম বা অক্ষম করতে দেয়। উদাহরণস্বরূপ, এখানে আমি অক্ষম করছি alias

xieerqi@eagle:~$ enable -n alias
xieerqi@eagle:~$ alias
No command 'alias' found, did you mean:
 Command '0alias' from package 'zeroinstall-injector' (universe)
alias: command not found
xieerqi@eagle:~$ alias TEST='rm'
No command 'alias' found, did you mean:
 Command '0alias' from package 'zeroinstall-injector' (universe)
alias: command not found
xieerqi@eagle:~$ enable alias
xieerqi@eagle:~$ alias
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias ls='ls --color=auto'
xieerqi@eagle:~$ 

আবার, সিস্টেমওয়াইড ব্যবহার করা bashrcএখানে একটি বিকল্প।


সব ওরফে অবরুদ্ধ করছে না, শুধুমাত্র বিল্ট-ইন নিজেই ওরফে না :) কমান্ড
αғsнιη

@ আফশিন.হামেডি আচ্ছা, ডিফল্ট কমান্ড কী? উবুন্টু নিয়ে যে আসে? এর অর্থ আপনার ডিফল্ট ইনস্টলেশন সহ সমস্ত কমান্ডের (বাইনারি ফাইল) তালিকা থাকতে হবে। তারপরে প্রত্যেকবার ব্যবহারকারী শেল লোড করে বা rmকোনও কিছুতে ওরফে চেষ্টা করে , এটি তালিকাটি পরীক্ষা করে। তালিকাগুলি বেশ বড় হবে বলে বিবেচনা করে আপনার ব্যবহারকারীরা আপনার কাছে প্রচুর অভিযোগ করবেন এবং আপনাকে সিস্টেম অ্যাডমিন হিসাবে ঘৃণা করবেন :)
সের্গি কলডিয়াজহনি

এটি আপনার কাছে একটি মজাদার, দুর্দান্ত প্রশ্ন, আমি এটি পছন্দ করি! বাছাই করা ভাল হবে। তবে আমি সন্দেহ করি এটি অর্জনযোগ্য, যদি না শেল বিকাশকারীরা এটি প্রয়োগ করার প্রয়োজন না খুঁজে পায় :)
সের্গি কলডিয়াজহনি

ফাংশন ধারণাটি দুর্দান্ত ছিল। এটি নিকটে এসেছিল।
মুরু

0

আপনি পারে (ইন সংজ্ঞায়িত /etc/profile) একটি ফাংশন বলা aliasযা বৈধতা আপনি (সম্ভবত ব্যবহার চায় type -p) (সমস্ত "উবুন্টু ডিফল্ট কমান্ড" পরে হয় "এ এক্সেকিউটেবল $PATHbuiltin কল করার আগে") alias, কিন্তু, অন্যদের সরু আউট আছে, আপনার ব্যবহারকারীদের পেতে পারে কাছাকাছি। আলাদা আলাদা ব্যবহারকারী কেন পাবেন না, বা তাদের শিক্ষিত করবেন না (" aliasকোনও আদেশকে ওভাররাইড করে এমন একটি সংজ্ঞা দেওয়া পায়ের মধ্যে নিজেকে গুলি করার একটি খুব ভাল উপায়, এবং বিভ্রান্তি সৃষ্টি করে (যেমন, কেন lsআমার পাসওয়ার্ডের জন্য অনুরোধ জানায় ?))?"

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