ফাইল এবং গিট সংগ্রহস্থল পরিচালনার জন্য সীমাবদ্ধ শেল


8

এমন একটি ওয়েব হোস্টিং সংস্থা সম্পর্কে চিন্তা করুন যা ব্যবহারকারীদের এসএসএসের মাধ্যমে ফাইল এবং গিট সংগ্রহস্থল পরিচালনা করতে দিতে চায়। এটা অন্তর্ভুক্ত:

  • সুরক্ষিত অনুলিপি (scp)
  • ফাইল তৈরি করা, অনুলিপি করা, মুভিং / নতুন নামকরণ এবং মুছুন
  • উত্স নিয়ন্ত্রণ এবং পাঠ্য সম্পাদনার জন্য কমান্ডের একটি সংকীর্ণ সাবসেট কার্যকর করছে (গিট, ভিম, ন্যানো)

আমরা এটি বাস্তবায়ন করতে চাই এবং নিম্নলিখিত বিকল্পগুলি সন্ধান করব:

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

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

উত্তর:


8

এটি বাস্তবায়নের জন্য আপনার কাছে দুটি পরিপূরক উপায় রয়েছে:

ব্যবহারকারীদের gitদূরবর্তী অবস্থান থেকে ব্যবহারের অনুমতি প্রদান করা

gitolite3হাব-লাইভ সংগ্রহস্থল স্কিমা সরবরাহ করার জন্য এটি ব্যবহার করুন (এটি এখানে বিস্তারিতভাবে বর্ণনা করা হয়েছে ), আপনার ব্যবহারকারীদের একই রেপোর থেকে চাপ / টানতে এবং একই ধরণের একটি চেক-আউট সংস্করণ দেওয়ার জন্য আপনার একটি bareসংগ্রহস্থল (একটি হাব রেপো) থাকা দরকার bas (একটি লাইভ রেপো) উপযুক্ত পথে অবস্থিত /srv/www/html, উদাহরণস্বরূপ , বলুন ।

আমি হাব রেপো gitolite3হ্যান্ডেল করতে ব্যবহার করতে চাই , তবে এটি কোনও প্রয়োজন নয়, যদিও প্রয়োজনের তুলনায় আপনার পছন্দের LDAP এ জরিমানা-দানাযুক্ত অ্যাক্সেস কন্ট্রোল বাঁধাই বরং সুবিধাজনক । শাখার স্তরে সূক্ষ্ম দান নিয়ন্ত্রণ সরবরাহ করতে পারে।gitolite3

কলের gitolite3মাধ্যমে ব্যবহারকারীর ক্ষমতা সীমাবদ্ধ করা sudoএবং হুকগুলি পরিচালনা করাও একটি ভাল অনুশীলন sudo। এটি gitolite3হুক ব্যবহার করে একটি কার্যকারী উদাহরণ (এগুলি খাপ খাইয়ে নিতে নির্দ্বিধায় বা তাদের উন্নত করতে / ঠিক করার জন্য - আপনার প্রয়োজন অনুসারে):

  • এর প্রাসঙ্গিক সামগ্রী /etc/sudoersবা /etc/sudoers.d/gitolite3এর লাইন বরাবর কিছু হবে:

    Cmnd_Alias        GITOLITE_CMDS = /usr/bin/git, /bin/chown, /bin/find, /usr/bin/xargs, /bin/chmod, /sbin/restorecon, /usr/local/sbin/publisher-hub2live
    Cmnd_Alias GITOLITE_APACHE_CMDS = /usr/sbin/apachectl graceful
    Defaults:gitolite3 !requiretty
    Defaults:gitolite3 lecture=never
    gitolite3                ALL = (root)NOPASSWD: GITOLITE_CMDS
    gitolite3       APACHE_HOSTS = (root)NOPASSWD: GITOLITE_APACHE_CMDS
    
  • হাব রেপো post-updateহুক:

    #!/bin/sh
    
    echo "****"
    echo "**** Calling publisher-hub2live script [Hub's post-update hook]"
    echo "****"
    
    sudo /usr/local/sbin/publisher-hub2live "/srv/www/html" "root:apache" "2750" "640"
    
    exit 0
    
  • publisher-hub2live লিপি:

    #!/bin/sh
    
    echo "****"
    echo "**** Pulling changes into Live [publisher-hub2live]"
    echo "****"
    
    cd "$1" || exit
    umask 0022
    unset GIT_DIR
    /usr/bin/git pull hub master
    
    # custom actions here
    # e.g call grunt tasks
    /bin/chown -R "$2" "$1"
    /bin/find "$1" -type d -exec chmod "$3" {} +
    /bin/find "$1" -type f -exec chmod "$4" {} +
    /bin/chmod u+x "$1"/.git/hooks/post-commit
    /sbin/restorecon -R -v "$1"
    exec /usr/bin/git update-server-info
    
    exit 0
    

লগইন শেলটিতে অ-অনুমোদিত কমান্ডগুলি কার্যকর করার সীমাবদ্ধকরণ

আপনাকে যা প্রয়োগ করতে হবে তা হ'ল একটি পুনরুত্পাদনযোগ্য, নিরীক্ষণযোগ্য পদ্ধতি যা ব্যবহারকারীর কঠোরভাবে অনুমতি ব্যতীত অন্য ক্রিয়া সম্পাদন করার ক্ষমতা সীমাবদ্ধ করে দেয়।

এটা তোলে প্রয়োজন বোধ করা হয় না কিন্তু এটি যদি আপনি আপনার ব্যবহারকারীদের দ্বারা LDAP নিবন্ধিত করতে সহায়তা করার, এবং আপনি ইতিমধ্যে প্রক্রিয়া মোতায়েন আছে দ্বারা LDAP প্রমাণীকরণ করা, একটি পিএএম মডিউল অথবা freeIPA এবং ব্যবহারের মাধ্যমে এটা হতে sssd

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

  • ব্যবহারকারীরা wheelগোষ্ঠীভুক্ত নয়, কেবলমাত্র একমাত্র ব্যবহারের জন্য অনুমোদিত su(পিএএম এর মাধ্যমে প্রয়োগ করা হয়েছে)। সাধারণত, sysadmবিপর্যয় পুনরুদ্ধার বা এলডিএপি অপ্রাপ্যতার ক্ষেত্রে ক্রিয়া সম্পাদনকারী বিশ্বস্ত প্রশাসকদের মঞ্জুরি দেওয়ার জন্য একটি অ-এলডিএপি ব্যবহারকারী ( ) উপস্থিত থাকে।
  • ব্যবহারকারীরা rbashএকটি প্রাইভেটকে নির্দেশিত কেবল পঠনযোগ্য PATH দিয়ে সঠিকভাবে সুরক্ষিত দেওয়া হয় ~/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 14 Sep 17 08:58 git -> /usr/bin/git*
    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 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ভেরিয়েবল)। এটি হ'ল shellআদেশগুলি থেকে রক্ষা পাওয়া lessএবং নিরীক্ষণযোগ্যতা নিশ্চিত করা ensure

  • একমাত্র অনুমোদিত সম্পাদক হলেন rvimএকই কারণে। ব্যবহারকারীরা sudoeditকনফিগারেশনে চালিত rvimহওয়ার জন্য sudoকনফিগার করা অবস্থায় কেবল সম্পাদন করতে পারবেন :

    Defaults editor=/usr/bin/rvim
    
  • যদি ম্যাক বিধিনিষেধগুলি স্থানে থাকে (আপনি যে নির্দিষ্ট জিএনইউ / লিনাক্স ডিস্ট্রিবিউশনটি ব্যবহার করছেন সেটি সেলইনাক্স সক্ষম করেছে), ব্যবহারকারীরা সেলইনাক্স ব্যবহারকারীকে ম্যাপ করা হয় staff_uএবং প্রয়োজনীয় হিসাবে অন্যান্য ব্যবহারকারী হিসাবে কমান্ড কার্যকর করার অধিকার প্রদান করে sudosudorulesব্যবহারকারীকে এই সীমাবদ্ধতাগুলি রোধ করতে বাধা দেওয়ার জন্য নির্দিষ্ট অনুমোদিতটি সাবধানতার সাথে পর্যালোচনা করা দরকার এবং আপনার বিদ্যমান এলডিএপি অবকাঠামোতে এটি স্থাপন করা যেতে পারে (এটি ফ্রিআইপিএ বৈশিষ্ট্যগুলির মধ্যে একটি)।

  • ব্যবহারকারীদের /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
    

    ডিরেক্টরিগুলির পলিনস্ট্যানেশন কোনও নতুন বৈশিষ্ট্য নয়, এটি বেশ দীর্ঘকাল ধরে পাওয়া যায়। একটি রেফারেন্স হিসাবে, 2006 থেকে এই নিবন্ধটি দেখুন । প্রকৃতপক্ষে, অনেকগুলি মডিউল ইতিমধ্যে pam_namespaceডিফল্টরূপে ব্যবহার করে তবে ডিফল্ট কনফিগারেশনে /etc/security/namespace.confপলিইনস্টেস্টেশন সক্ষম হয় না। এছাড়াও, /etc/security/namespace.initকরা উচিত সব কঙ্কাল ফাইল কেবল-পঠনযোগ্য ব্যবহারকারীদের জন্য এবং এটির মালিক root

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

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