विशिष्ट उपयोगकर्ता के लिए लिनक्स में विशेष रूप से ब्लॉक करें


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 # लेकिन अगर उपयोगकर्ता स्मार्ट है, तो वह mkdir बाइनरी की प्रतिलिपि बना सकता है और इसका नाम बदल सकता है और इसका उपयोग कर सकता है। तो इसे कैसे प्राप्त करें?


7
आपका उदाहरण विफल हो जाएगा क्योंकि उपयोगकर्ता अपने स्वयं के संकलन कर सकता है mkdirऔर उसका नाम बदल सकता है, या यहां तक ​​कि मौजूदा बाइनरी को कॉपी और नाम बदल सकता है। इसके अलावा, उपनाम और कार्यों को ओवरराइड करने के लिए एक शेल बिलिन है।
स्ट्रगल शरणार्थी

हम्म जो सही है, वैसे भी वहाँ है?
राहुल पाटिल

उपयोगकर्ता को यह भी संकलित करने की आवश्यकता नहीं है कि वह आसानी से कॉपी कर सकता है, cp /bin/mkdir mkdir2फिर इसका उपयोग कर सकता है :(
राहुल पाटिल

निर्देशिका बनाना एक ऐसा सामान्य / मौलिक कार्य है जिसे करने के कई तरीके हैं, और उन सभी को ब्लॉक करना लगभग असंभव होगा (उपयोगकर्ता को फ़ाइलों को बनाने की अनुमति नहीं देने के अलावा; अर्थात, उसके खिलाफ सभी निर्देशिकाओं को लिखना-सुरक्षित करना)। उदाहरण के लिए, cp -r /usr/local/lib gggनामक एक निर्देशिका बनाएगा ggg( /usr/local/libयदि, यदि कोई है, जिसे उपयोगकर्ता केवल हटा सकता है, तो सामग्री की एक प्रति शामिल है )। आप find / -type d -emptyकॉपी करने के लिए एक खाली निर्देशिका खोजने के लिए उपयोग कर सकते हैं ।
जी-मैन का कहना है कि 'मोनिका' को

जवाबों:


21

मुझे नहीं पता कि इसे कैसे करना है, लेकिन मैं एक और शेल के बारे में जानता हूं जो उपयोगकर्ता पर्यावरण को प्रतिबंधित करता है: lshell (सीमित शेल)

कॉन्फ़िगरेशन का एक त्वरित अवलोकन

Lshell को INI फ़ाइल के माध्यम से कॉन्फ़िगर किया गया है। डिफ़ॉल्ट रूप से, यह अनुमत कमांड का श्वेतसूची रखता है, लेकिन इसे उपयोगकर्ता को एक विशिष्ट कमांड का उपयोग करने से प्रतिबंधित करने के लिए आसानी से कॉन्फ़िगर किया जा सकता है।

यह कॉन्फ़िगरेशन (डिफ़ॉल्ट मान /etc/lshell.conf) उपयोगकर्ता fooको उपयोग करने से रोकता है mkdir:

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

डिफ़ॉल्ट रूप से lshell का उपयोग करने के लिए उपयोगकर्ता खाते को कॉन्फ़िगर करने के लिए, आपको निम्न करना होगा:

 chsh -s /usr/bin/lshell foo

Lshell अधिक कर सकते हैं, जैसे:

  • ग्रैन्युलैरिटी के 3 स्तर: उपयोगकर्ता, समूह, सभी।
  • सिस्टम में कुछ निश्चित रास्तों तक पहुँच को प्रतिबंधित कर सकता है।
  • कुछ वर्णों (जैसे |) के उपयोग को प्रतिबंधित कर सकते हैं ।
  • केवल SSH पर कुछ कमांड के उपयोग को प्रतिबंधित कर सकता है।

और अधिक।

अपडेट 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। मुझे लगता है कि समस्या एक प्रतिबंधात्मक डिफ़ॉल्ट नीति की कमी है, अर्थात, इस परिदृश्य में आप डिफ़ॉल्ट रूप से अनुमति देते हैं, फिर किसी सूची पर आधारित अनुमतियाँ, जब यह अन्य तरीके से होनी चाहिए: डिफ़ॉल्ट रूप से अस्वीकृत, तो नीति के आधार पर अनुदान ।
दाऊद

1
@dawud: मैं मानता हूं कि अनुमत आदेशों की श्वेत सूची को बनाए रखना एक ब्लैकलिस्ट होने से बेहतर दृष्टिकोण है और उम्मीद है कि उपयोगकर्ता इसे व्यवस्थापक को चतुरता से रोक नहीं पाएंगे।
रहमू

2
@ मार्को, मेरे उत्तर में दिए गए उदाहरण को देखें। मैं अनुमत आदेशों का एक श्वेत सूची प्रदान करता हूं, और उस परिदृश्य में, उपयोगकर्ता cpअपने पीएटीएच ( rootस्वामित्व वाली निर्देशिका, rxउपयोगकर्ता के लिए) के लिए एक बाइनरी नहीं कर सकता है , और rbashनिष्पादित करने से रोकता है ./executables। क्या यह आपके प्रश्न का उत्तर देता है?
दाऊद

2
@dawud यह वास्तव में करता है। मुझे केवल-बिन निर्देशिका ही याद आती है।
मार्को

15

जिस तरह से मैं आमतौर पर इस तरह के प्रतिबंधों को लागू करता हूं, उसके लिए आवश्यक है कि कई शर्तें पूरी हों, अन्यथा प्रतिबंध आसानी से लगाया जा सकता है:

  • उपयोगकर्ता wheelसमूह से संबंधित नहीं है , केवल एक ही उपयोग करने के लिए अधिकृत है su(PAM के माध्यम से लागू)।
  • उपयोगकर्ता 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, के बारे में सोच ) दिया जाता है।TMOUTHISTFILE

  • उपयोगकर्ता को SELinux उपयोगकर्ता के लिए मैप किया जाता है staff_uऔर उसे आवश्यक रूप से अन्य उपयोगकर्ता के रूप में कमांड निष्पादित करने का अधिकार दिया जाता है sudo
  • उपयोगकर्ता /home, /tmpऔर संभवतः /var/tmpइसके माध्यम से पॉलीस्टैंटिएंट कर रहे हैं /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) या कोई भी नहीं।


4

, एक डमी समूह जोड़ें उस समूह में उपयोगकर्ता जोड़ने के लिए, , ।chown root:somegroup /bin/mkdir chmod g-x /bin/mkdirध्यान दें कि यह उपयोगकर्ता को अपने समूहों को संशोधित करने में सक्षम नहीं होने पर निर्भर करता है। IIRC यह GNU / Linux में सही है, लेकिन कुछ अन्य यूनियनों में नहीं।


2
अधिकांश फाइल सिस्टम पर आप महीन दाने वाले नियंत्रण के लिए विस्तारित ACL का भी उपयोग कर सकते हैं - आवश्यक समूहों की संख्या उपयोगकर्ताओं की संख्या (संभावित संयोजनों के कारण) के साथ तेजी से बढ़ेगी, नामकरण की समस्याओं का उल्लेख नहीं करने के लिए।
पीटर से

2
एक और बिंदु जोड़ें, 710 अन्य उपयोगकर्ताओं से पढ़ने की अनुमति को भी हटा दें, ताकि उपयोगकर्ता कॉपी न कर सके और नाम बदल सके कि बाइनरी नहीं है?
राहुल पाटिल

1
@RahulPatil हाँ, और निश्चित रूप से आपको एक संकलक के उनके उपयोग को प्रतिबंधित करने की आवश्यकता है।
पीटर से

1

जैसा कि मैंने परीक्षण किया है सबसे अच्छा है Profile.d सर्वश्रेष्ठ और सबसे सुरक्षित तरीके का उपयोग करना

चरण # 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पूरा होने के लिए नहीं है , यह POSIX जैसे लॉगिन गोले का उपयोग करने वाले उपयोगकर्ताओं के लिए लॉगिन सत्र कस्टमाइज़ेशन रखने के लिए है, इसलिए यह आमतौर पर ऐसा नहीं है जहाँ bashअन्य उपनाम कस्टमाइज़ेशन (जो इसमें जाते हैं /etc/bash.bashrc) जाएंगे और इसमें POSIX शेल सिंटैक्स होना चाहिए (इसलिए आमतौर पर, .इसके बजाय की sourceऔर =के बजाय ==)।
स्टीफन चेज़लस

-1

sudoers इंस्टॉल करें और वहां कॉन्फ़िगर करने का प्रयास करें जिसके उपयोगकर्ता और क्या कमांड हैं।


4
SX में आपका स्वागत है। कृपया अपने उत्तर में विवरण जोड़ें; ओपी, या भविष्य में इस प्रश्न को पढ़ने वाले किसी अन्य व्यक्ति को पता नहीं हो सकता है sudo
जोसेफ आर।

यह उत्तर केवल स्पष्ट रूप से गलत है
किलटेक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.