স্ক্রিপ্ট চালানো থেকে রুটকে কীভাবে বাধা দেওয়া যায়


10

গ্লাসফিস অ্যাপ্লিকেশন সার্ভার অ্যাপ্লিকেশন সার্ভার পরিচালনা এবং শুরু করা এবং তাদেরকে থামাও এবং আমি এই স্ক্রিপ্ট চালু করা থেকে রুট ব্যবহারকারী সীমাবদ্ধ করতে চাই স্ক্রিপ্ট প্রদান করে। কারণটি হ'ল কিছু কী বিকাশকারীরা সার্ভারটি অ-সুযোগ-সুবিধাযুক্ত ব্যবহারকারী হিসাবে পরিচালনা করতে ভুলে যায় এবং যদি তারা অ্যাপ্লিকেশন সার্ভারটি রুট ব্যবহারকারী হিসাবে পুনরায় চালু করে, তবে অ্যাপ্লিকেশন সার্ভারটি রুট ব্যবহারকারী দ্বারা চালিত করতে হবে [*]।

এটি রুট অ্যাক্সেস দেওয়া এড়ানোর কোনও বিকল্প নয় এবং বিকাশকারীরা ভুলে যান কারণ তারা তাদের স্থানীয় মেশিনে এটি করার জন্য এতটাই ব্যবহৃত। আমি চাই যে asadminস্ক্রিপ্টটি হয় অননুমোদিত ব্যবহারকারী হিসাবে চালানোতে পরিবর্তন করা হোক বা প্রতিবার স্ক্রিপ্টটি রুট দ্বারা চালিত হলে optionচ্ছিকভাবে একটি ত্রুটি বার্তা প্রদর্শন করুন।

ব্যাশ শেল ব্যবহার করা হয়।

[*]: আমি ফাইলগুলিতে অধিকারগুলি ঠিক করার চেষ্টা করেছি, তবে যদিও আমি প্রচুর ফাইলগুলি রুটগুলির মালিক এবং তাদের chmod সন্ধান করেছি, অ্যাপ্লিকেশনটিতে অদ্ভুত ত্রুটি হয়েছে এবং আমাকে আবার রুট হিসাবে চালাতে হবে।

উত্তর:


18

অন্যান্য উত্তরগুলির মতো, তবে আপনি যেদিকে চেয়েছিলেন।

if [[ $EUID -eq 0 ]]; then
  echo "This script must NOT be run as root" 1>&2
  exit 1
fi

বিকল্পভাবে, আপনি sudoস্ক্রিপ্টের মধ্যে ব্যবহার করতে পারবেন যাতে অন-সুবিধাযুক্ত ব্যবহারকারী হিসাবে -uপতাকাটি ব্যবহার করে ব্যবহারকারীকে চালানোর জন্য নির্দিষ্ট করে দিতে বাধ্য করা হয়। আমি গ্লাসফিশ ব্যবহার করি না, তবে এখানে একটি প্রোটো-উদাহরণ সিউডো স্ক্রিপ্ট।

#!/bin/bash

if [ $1 == "start" ]; then
  sudo -u nobody /usr/bin/glassfish
fi

আশা করি আপনি ধারণাটি পাবেন। দুঃখিত, আমি আসলে স্ক্রিপ্টটি দেখতে বা অ-সুবিধাযুক্ত ব্যবহারকারীর নাম জানি না।


2

@ শেপাপাংয়ের সঠিক ধারণা রয়েছে। কোনটি সবচেয়ে বহনযোগ্য তা আমি জানি না, তবে ব্যবহারকারী শিকড় কিনা তা সনাক্ত করার অন্যান্য উপায় এখানে রয়েছে:

id -u
$UID

বিকল্পভাবে, আপনি কেবল একই পরামিতিগুলির সাথে অন্য ব্যবহারকারী হিসাবে চালাতে বাধ্য করতে পারেন:

if [[ "$USER" != appuser ]]
then
    exec sudo -u appuser "$0" "$@"
fi

1
এটা পিছিয়ে। তিনি এই স্ক্রিপ্টটি না চালানোর জন্য মূলটি চান ।
বাহামাত

ডিওহ, sudoকিছুটা ভুলে গেছি এখন এটি কাজ করা উচিত।
l0b0

@ টবিস্পাইট নং, ব্যবহারকারী রুট থাকলে স্ক্রিপ্টটি কিছুই করে না intended আমি বিশ্বাস করি যে আপনার পরিবর্তনটি $@ফাঁকা থাকলে অতিরিক্ত যুক্তিরও ফলাফল দেয় এবং আমি অন্য কোথাও খুঁজে পাওয়া প্যাটার্নটি ব্যবহার করতে এটি পরিবর্তন করেছি।
l0b0

ধন্যবাদ @ টবিস্পাইট, সংশোধিত। আমি নিশ্চিত যে শূন্য যুক্তি সঠিকভাবে পাস হয়েছে তা নিশ্চিত করার উপায় হিসাবে আমি সেই ফর্মটি কোথাও দেখেছি। । এছাড়াও চেক, যা স্পষ্টভাবে একটি বাগ ছিল (এটা একটি কাঁটাচামচ বোমা ছিল না, কিন্তু কেবল অনির্দিষ্টকালের জন্য নিজেই কল করবে সংশোধন
l0b0

আমি যুক্তি দিয়েছিলাম যে এটি একটি কাঁটাচামচ বোমা ছিল, কারণ প্রতিটি উদাহরণ sudo(এটি ব্যবহার করছে না exec) জন্য একটি নতুন শেল কাঁটাবে এবং পিতা-মাতার এটির জন্য অপেক্ষা করবে, সুতরাং আপনি শেষ পর্যন্ত একটি সম্পূর্ণ প্রক্রিয়া টেবিল দিয়ে শেষ করবেন। এটি এখনও execসেখানে রাখার মতো (যদি আপনি fiভুল ব্যবহারকারী হিসাবে চালানোর পরে কোডটির উদ্দেশ্যে না করেন )।
টবি স্পিড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.