নির্দিষ্ট ব্যবহারকারীর জন্য লিনাক্সে বিশেষ কমান্ডটি ব্লক করুন


27

কমান্ড ব্লক করবেন কিভাবে, mkdirনির্দিষ্ট ব্যবহারকারীর জন্য বলুন ?

যা আমি স্রেফ পঠনযোগ্য ফাংশন তৈরি করেছি এবং ব্যবহারকারীদের প্রোফাইলে সঞ্চয় করি ~/.bashrc

/bin/mkdir() {
        echo "mkdir command not allow for you"

}

mkdir() {
        echo "mkdir command not allow for you"

}
./mkdir() {

        echo "mkdir command not allow for you"
}

readonly -f /bin/mkdir
readonly -f mkdir
readonly -f ./mkdir

টেস্ট:

rahul@ubuntu:~$ cd /bin/
rahul@ubuntu:/bin$ ./mkdir /home/rahul/ggg
mkdir command not allow for you
rahul@ubuntu:/bin$ cd
rahul@ubuntu:~$ mkdir testing
mkdir command not allow for you
rahul@ubuntu:~$ /bin/mkdir testing
mkdir command not allow for you

সুতরাং আমার প্রশ্নটি এটি অর্জনের উপায় কী হওয়া উচিত? এটির জন্য কোনও সরঞ্জাম আছে?

আপডেট 1 # তবে ব্যবহারকারী যদি স্মার্ট হয় তবে তিনি এমকেডির বাইনারি অনুলিপি করতে পারেন এবং এর নাম পরিবর্তন করে ব্যবহার করতে পারেন। তাহলে কীভাবে এটি অর্জন করবেন?


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

হুঁ ঠিক আছে তো, তবে কি আছে?
রাহুল পাতিল

ব্যবহারকারী কম্পাইল করার তিনি সহজে অনুলিপি করতে পারেন প্রয়োজন হবে না cp /bin/mkdir mkdir2তারপর এটি ব্যবহার :(
রাহুল পাতিল

ডিরেক্টরি তৈরি করা এমন একটি সাধারণ / মৌলিক কাজ যে এটি করার একাধিক উপায় রয়েছে এবং সেগুলি ব্লক করা প্রায় অসম্ভব হবে (ব্যবহারকারীকে ফাইল তৈরি না করে; অর্থাত্ তাঁর বিরুদ্ধে সমস্ত ডিরেক্টরি রাইটিং-রক্ষা করা)। উদাহরণস্বরূপ, cp -r /usr/local/lib gggডাইরেক্টরি তৈরি করবে ggg(যার কোনও বিষয়বস্তুর অনুলিপি রয়েছে /usr/local/lib, যদি ব্যবহারকারী থাকে তবে এটি মুছতে পারে)। find / -type d -emptyঅনুলিপি করার জন্য আপনি একটি খালি ডিরেক্টরি খুঁজে পেতে পারেন ।
জি-ম্যান বলছেন 'মনিকাকে পুনরায় ইনস্টল করুন'

উত্তর:


21

আমি এটি কীভাবে বাশ দিয়ে করব তা জানি না, তবে আমি অন্য শেল সম্পর্কে জানি যা ব্যবহারকারীর পরিবেশকে সীমাবদ্ধ করে: lshell (সীমিত শেল)

কনফিগারেশনের একটি দ্রুত ওভারভিউ

Lhell একটি INI ফাইলের মাধ্যমে কনফিগার করা হয়েছে। ডিফল্টরূপে, এটি অনুমোদিত কমান্ডগুলির একটি শ্বেতলিস্ট ধারণ করে, তবে এটি ব্যবহারকারীকে নির্দিষ্ট কমান্ড ব্যবহার করতে নিষেধ করার জন্য সহজেই কনফিগার করা যায়।

এই কনফিগারেশনটি (ডিফল্ট কনফারেন্স /etc/lshell.conf) ব্যবহারকারীকে fooব্যবহার করতে নিষেধ করে mkdir:

[foo]
allowed = 'all' - ['mkdir', 'bash', 'sh', 'csh', 'dash', 'env']

ডিফল্টরূপে lhell ব্যবহার করার জন্য কোনও ব্যবহারকারী অ্যাকাউন্ট কনফিগার করতে আপনার অবশ্যই:

 chsh -s /usr/bin/lshell foo

লেশেল আরও কিছু করতে পারে, যেমন:

  • গ্রানুলারিটির 3 টি স্তর: ব্যবহারকারী, গোষ্ঠী, সমস্ত।
  • সিস্টেমের কয়েকটি পাথের অ্যাক্সেসকে সীমাবদ্ধ করতে পারে।
  • নির্দিষ্ট অক্ষর (যেমন |) ব্যবহার সীমাবদ্ধ করতে পারে ।
  • নির্দিষ্ট কমান্ডের ব্যবহারকে কেবলমাত্র এসএসএইচের মাধ্যমেই সীমাবদ্ধ করতে পারে।

এবং আরও।

1 টি যোগ করা পরীক্ষার ফলাফল আপডেট করুন :

rahul:~$ which bash
/bin/bash
rahul:~$ dd if=$(which bash) of=my_bash
*** forbidden syntax: dd if=$(which bash) of=my_bash
rahul:~$ bash
*** forbidden command: bash
rahul:~$ cp /bin/bash my_bash
*** forbidden path: /bin/bash
rahul:~$ /bin/bash
*** forbidden command: /bin/bash
rahul:~$ sh
*** forbidden command: sh
rahul:~$ dash
*** forbidden command: dash
rahul:~$ env bash
*** forbidden command: env
rahul:~$ cp /bin/mkdir mycreatedir
*** forbidden path: /bin/mkdir

3
এর সাথে allowed = 'all' - ['mkdir'], আপনি কি কেবল মৃত্যুদন্ড কার্যকর করতে bashএবং আবার বাধাবদ্ধ হতে পারবেন না ?
দাউদ

3
কেবলমাত্র পেডেন্টিক হচ্ছেন, দুঃখিত, তবে সেই তালিকা দ্বারা আরোপিত বিধিনিষেধগুলিকে রোধ করার আরও অনেক উপায় রয়েছে, যেমন dd if=$(which bash) of=my_bash && chmod u+x my_bash && ./my_bash। আমি মনে করি সমস্যাটি একটি সীমাবদ্ধ ডিফল্ট নীতিের অভাব, অর্থাত্ এই দৃশ্যে আপনি ডিফল্টরূপে অনুমতিগুলি অনুমোদন করেন, তারপরে তালিকার উপর ভিত্তি করে DENY অনুমতিগুলি যখন এটি অন্যভাবে হওয়া উচিত: ডিফল্টরূপে DENY, তারপরে নীতিমালার ভিত্তিতে GRANT ।
দাউদ

1
@ দাউদ: আমি একমত যে অনুমোদিত কমান্ডগুলির একটি শ্বেত তালিকাটি ব্ল্যাকলিস্টের চেয়ে ভাল করা এবং আশা করা যায় যে ব্যবহারকারী এডমিনকে চতুর দ্বারা চালিত করবেন না।
রাহমু

2
@ মার্কো, আমার উত্তরে প্রদত্ত উদাহরণটি দেখুন। আমি অনুমতিপ্রাপ্ত কমান্ডগুলির একটি শ্বেতলিস্ট সরবরাহ করি এবং সেই পরিস্থিতিতে ব্যবহারকারী cpতার প্যাথ ( ব্যবহারকারীদের জন্য rootমালিকানাধীন ডিরেক্টরি rx) কেবলমাত্র বাইনারি করতে পারে না এবং rbashকার্যকর করতে বাধা দেয় ./executables। এটি আপনার প্রশ্নের উত্তর দেয়?
দাউদ

2
@ দাওদ এটি বাস্তবিকই করে। আমি কেবল পঠনযোগ্য বিন ডিরেক্টরিটি মিস করেছি।
মার্কো

15

আমি সাধারণত যেভাবে এই জাতীয় বিধিনিষেধগুলি প্রয়োগ করি তার জন্য বেশ কয়েকটি শর্ত পূরণ করা প্রয়োজন, অন্যথায় এই সীমাবদ্ধতাটি সহজেই নিষিদ্ধ করা যেতে পারে:

  • ব্যবহারকারী wheelগোষ্ঠীভুক্ত নয়, কেবলমাত্র একমাত্র ব্যবহারের জন্য অনুমোদিত su(পিএএম এর মাধ্যমে প্রয়োগ করা হয়েছে)।
  • ব্যবহারকারীর কাছে কেবল rbashপাঠযোগ্য প্যাথএইচএইচটি দিয়ে ব্যবহারকারীকে সঠিকভাবে সুরক্ষিত দেওয়া হয় ~/bin, এই ~/bin/ডিরেক্টরিটিতে সাধারণ ইউটিলিটিগুলির লিঙ্ক রয়েছে:

    $ ll ~/bin
    total 0
    lrwxrwxrwx. 1 root dawud 14 Sep 17 08:58 clear -> /usr/bin/clear*
    lrwxrwxrwx. 1 root dawud  7 Sep 17 08:58 df -> /bin/df*
    lrwxrwxrwx. 1 root dawud 10 Sep 17 08:58 egrep -> /bin/egrep*
    lrwxrwxrwx. 1 root dawud  8 Sep 17 08:58 env -> /bin/env*
    lrwxrwxrwx. 1 root dawud 10 Sep 17 08:58 fgrep -> /bin/fgrep*
    lrwxrwxrwx. 1 root dawud  9 Sep 17 08:58 grep -> /bin/grep*
    lrwxrwxrwx. 1 root dawud 10 Sep 17 08:58 rview -> /bin/rview*
    lrwxrwxrwx. 1 root dawud 13 Sep 17 08:58 rvim -> /usr/bin/rvim*
    lrwxrwxrwx. 1 root dawud 13 Sep 17 08:58 sudo -> /usr/bin/sudo*
    lrwxrwxrwx. 1 root dawud 17 Sep 17 08:58 sudoedit -> /usr/bin/sudoedit*
    lrwxrwxrwx. 1 root dawud 13 Sep 17 08:58 tail -> /usr/bin/tail*
    lrwxrwxrwx. 1 root dawud 11 Sep 17 08:58 wc -> /usr/bin/wc*
    
  • ব্যবহারকারী একটি সীমাবদ্ধ, শুধুমাত্র পাঠযোগ্য পরিবেশ দেওয়া হয় (যেমন কাপড় মনে LESSSECURE, TMOUT, HISTFILEভেরিয়েবল)।

  • ব্যবহারকারী SELinux ব্যবহারকারীতে ম্যাপ করা হয় staff_uএবং এর মাধ্যমে প্রয়োজনীয় অন্যান্য ব্যবহারকারী হিসাবে কমান্ডগুলো করার অধিকার দেওয়া sudo
  • ব্যবহারকারী এর /home, /tmpএবং সম্ভবত /var/tmpমাধ্যমে polyinstantiated হয় /etc/security/namespace.conf:

    /tmp       /tmp/.inst/tmp.inst-$USER-     tmpdir:create   root
    /var/tmp   /tmp/.inst/var-tmp.inst-$USER- tmpdir:create   root
    $HOME      $HOME/$USER.inst/              tmpdir:create   root
    

    এছাড়াও, /etc/security/namespace.initসমস্ত কঙ্কালের ফাইলগুলি ব্যবহারকারীর জন্য পঠনযোগ্য এবং মালিকানাধীন করে তোলে root

এইভাবে আপনি নিজের / নিজের পক্ষে $USERএক্সিকিউট করতে পারবেন mkdir(ব্যক্তিগত ~/binডিরেক্টরিতে একটি লিঙ্কের মাধ্যমে /etc/skel, উপরোক্ত ব্যাখ্যা অনুসারে বিধানযুক্ত), অন্য ব্যবহারকারীর পক্ষে (মাধ্যমে sudo) বা মোটেও কিছুই বেছে নিতে পারবেন না choose


4

একটি ডামি গ্রুপ যুক্ত করুন, সেই গোষ্ঠীতে ব্যবহারকারী যুক্ত করুন chown root:somegroup /bin/mkdir,, chmod g-x /bin/mkdir। নোট করুন যে এটি তাদের গ্রুপগুলিকে সংশোধন করতে সক্ষম না হওয়ার উপর নির্ভর করে। আইআইআরসি এটি জিএনইউ / লিনাক্সে সত্য তবে অন্য কোনও ইউনিয়নে নয়।


2
বেশিরভাগ ফাইল সিস্টেমে আপনি সূক্ষ্ম দানাদার নিয়ন্ত্রণের জন্য বর্ধিত এসিএলগুলিও ব্যবহার করতে পারেন - নামকরণের সমস্যাগুলি উল্লেখ না করে প্রয়োজনীয় সংখ্যার ব্যবহারকারীদের সংখ্যা (সম্ভাব্য সংমিশ্রণের কারণে) সাথে দ্রুত বৃদ্ধি পেতে পারে।
পিটারফ

2
আরও একটি পয়েন্ট যুক্ত করুন, অন্যান্য ব্যবহারকারীদের থেকে পড়ার অনুমতিও সরিয়ে ফেলুন 710, যাতে ব্যবহারকারী অনুলিপি করে অনুলিপি করতে পারেন না যে এটি বাইনারি নয়?
রাহুল পাতিল

1
@ রাহুলপাতিল হ্যাঁ, এবং অবশ্যই আপনাকে তাদের সংকলক ব্যবহারও সীমাবদ্ধ করতে হবে।
পিটারফ

1

আমি পরীক্ষিত হিসাবে সেরাটি হ'ল প্রোফাইল.ডি সেরা এবং নিরাপদ উপায় ব্যবহার করা

পদক্ষেপ # 1 (একটি এলিয়াস ফাইল তৈরি করুন)

[root@newrbe ~]# vim /etc/customalias.sh

নীচে লাইন যুক্ত করুন:

alias rm="echo remove contenet is restricted"
alias poweroff="echo Poweroff is restricted"
alias chmod="echo Change Permission is restristed"

সংরক্ষণ করুন এবং ছেড়ে দিন

পদক্ষেপ # 2 (প্রোফাইল লোডার তৈরি করুন)

/etc/profile.d/ এই অবস্থানটিতে ব্যাশ সমাপ্তির জন্য ফাইল রয়েছে

[root@newrbe ~]# vim /etc/profile.d/customsource.sh

এই লাইনগুলি নীচের ব্যবহারকারীদের জন্য উল্লিখিত কমান্ডগুলিকে ব্লক করবে ফাইলগুলির নীচে লাইনগুলি যুক্ত করুন

if [ `whoami` == "user1" ] && [ `whoami` == "user2" ]; then
    source /etc/customalias.sh
fi

সংরক্ষণ এবং ছেড়ে দিন

এখন প্রস্থান এবং পুনরায় চালু করুন

শুভেচ্ছা,-মনসুর


/etc/profile.d/জন্য নয় bashসমাপ্তির , এটা যেখানে জায়গা লগইন অধিবেশন customisations করতে ব্যবহার করে লগইন শাঁস POSIX মত ব্যবহারকারীদের জন্য, তাই এটি প্রথাগতভাবে যেখানে না bashওরফে customisations (যা বরং এ যেতে হবে /etc/bash.bashrc,) যেতে হবে এবং এটি একটি POSIX শেল সিনট্যাক্স থাকা উচিত (তাই সাধারণত .পরিবর্তে এর sourceএবং =পরিবর্তে ==)।
স্টাফেন চেজেলাস

-1

sudoers ইনস্টল করুন এবং কাদের ব্যবহারকারী এবং কোন আদেশটি কনফিগার করার চেষ্টা করুন।


4
এসএক্স-এ আপনাকে স্বাগতম। আপনার উত্তরে বিশদ যুক্ত করুন; ওপি, বা ভবিষ্যতে এই প্রশ্নটি পড়ছেন অন্য কেউ হয়তো অবহিত হতে পারে না sudo
জোসেফ আর।

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