এমন কোনও ব্যবহারকারী যুক্ত করা হচ্ছে যা কেবলমাত্র দূরবর্তীভাবে স্ক্রিপ্টগুলি সম্পাদন করতে পারে


14

আমি এমন একটি ব্যবহারকারী তৈরি করতে চাই যা কেবলমাত্র একটি কাজ করতে পারে: এসএসএসের মাধ্যমে একটি স্ক্রিপ্ট নির্দিষ্ট করে (এবং স্ক্রিপ্টে কমান্ডলাইন আর্গুমেন্ট) নির্দিষ্ট করে যে কোনও নির্দিষ্ট ফোল্ডারে থাকে (এই প্রশ্নের উদ্দেশ্যগুলির জন্য আসুন আমরা এটিকে ডাকি /local/remote_only_scripts/foo) এবং সেই স্ক্রিপ্টটি কার্যকর করা উচিত এবং এটি আউটপুট ফেরত।

বিষয়গুলির কয়েকটি উদাহরণ পরিষ্কার করার জন্য আমি ব্যবহারকারী চাই না যে:

  • স্থানীয়ভাবে অ্যাকাউন্টে লগ ইন করুন। লগইন অ্যাপ্লিকেশনটি হ'ল /bin/login। এটি /local/remote_only_scripts/fooফোল্ডারে কোনও স্ক্রিপ্ট নয় , তাই ব্যবহারকারী দ্বারা কল করা উচিত নয়।
  • দূরবর্তীভাবে অ্যাকাউন্টে লগ ইন করুন। আবার লগইন (এটি কি ssh দ্বারা ডাকা হয়?) সম্পর্কিত ফোল্ডারে কোনও স্ক্রিপ্ট নয়।
  • ডিরেক্টরি বিষয়বস্তু তালিকা। ls ভিতরে আছে /bin/ls। এটি উপযুক্ত ডিরেক্টরিতে কোনও স্ক্রিপ্ট নয়।
  • ডিরেক্টরিতে একটি ফাইল সম্পাদনা করুন। ইমাকস, ভি, জিডিট বেশিরভাগ সম্পাদকেরা সেই ডিরেক্টয়তে স্ক্রিপ্ট নয়।
  • সেই ডিরেক্টরিতে কোনও ফাইলের সামগ্রী দেখুন।
  • সেই ডিরেক্টরিতে একটি ফাইল কার্যকর করুন যা চালানোর অনুমতি তার নেই।

লক্ষ্য করুন এই হল উদাহরণ অনেক অন্যান্য কর্ম যা আমি ব্যবহারকারী করতে পারবে চাই না আছে। কোনও ক্রিয়া বিবেচনা করে, জিজ্ঞাসা করুন "এটি কি কোনও স্ক্রিপ্টের মাধ্যমে করা হচ্ছে /local/remote_only_scripts/foo?" উত্তরটি যদি না থাকে তবে ব্যবহারকারী এটি করতে সক্ষম হবে না। উত্তরটি যদি হ্যাঁ হয় তবে ব্যবহারকারীর এটি করতে সক্ষম হওয়া উচিত।

পিএস: "ব্যবহারকারী যুক্ত করে" আমি কী বোঝাতে চাই তা স্পষ্ট করে বলি। আমি কিছু ssh সাব সিস্টেমে কোনও ব্যবহারকারীকে যুক্ত করার অর্থ এই নয়। বরং আমি বলতে চাইছি কম্পিউটার সিস্টেমে কোনও ব্যবহারকারীকে যুক্ত করা। সুতরাং, উদাহরণস্বরূপ, আমার একটি ডেবিয়ান স্থিতিশীল সিস্টেম রয়েছে, এটির ঠিকানায় এটি কল করুন, www.hg.bar.com। আমি কোনও ব্যবহারকারীকে যুক্ত করতে চাই (কুসার, ব্যবহারকারী-প্রশাসক বা ইউজারড বা অন্য কোনও অনুরূপ মাধ্যমে) তাকে hg_guest কল করুন। hg_guest স্থানীয়ভাবে লগইন করতে বা উপরের তালিকার কোনও কাজ করতে পারে না। সমস্ত এইচজি_গুয়েস্ট করতে পারে স্ক্রিপ্টগুলি "দূর থেকে" চালানো। আমি বলেছিলাম যে এসএসএসের মাধ্যমে তার পক্ষে এটি করা উচিত, তবে এখনই এটি সম্পর্কে চিন্তা করা, সম্ভবত তাকে এসএসএস ব্যবহারের অনুমতি দেওয়ার ফলে সে স্থানীয়ভাবে লগ ইন করতে পারে, তাই অন্য কোনও প্রক্রিয়া প্রয়োজন হতে পারে।

উত্তর:


12

অনুমোদিত_কিজ ফাইলগুলিতে একটি কমান্ড বিকল্প রয়েছে। এই বিকল্পগুলি আপনি যা চান ঠিক তেমন করে বলে মনে হচ্ছে।

মনে রাখবেন এটি কোনও ক্রুট বা একটি সীমাবদ্ধ শেল নয়। এটি ssh এর মাধ্যমে কেবলমাত্র সেই আদেশগুলি কার্যকর করতে দেয়। আপনার উদাহরণ সহ, এটি হবে:

ssh somehost /local/remote_only_scripts/foo

এই অনুমোদিত_কিজ ফাইলের জন্য:

command="/local/remote_only_scripts/foo",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ...public key... 

আপনার ব্যবহারকারী যদি স্থানীয়ভাবে লগ ইন করতে না চান তবে প্রচুর উপায় রয়েছে। অপরপক্ষে তুমি :

  • কেবল এটির শেলটি / বিন / মিথ্যাতে সেট করুন (সম্ভবত আপনার / বিন / সত্য প্রয়োজন কারণ এসএসএসের একটি বৈধ লগ ইন প্রয়োজন)
  • এর পাসওয়ার্ড লক করুন, দেখুন passwd -l

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


আমি মনে করি না যে আপনার এই কমান্ডটি ক্লায়েন্ট সাইডে ssh এ নির্দিষ্ট করতে হবে, এটি 'বাধ্যতামূলক' কমান্ড তাই এটি সর্বদা কার্যকর করা হবে;) দূরবর্তী সাইটের ব্যবহারকারীর এখনও / etc / passwd এ সংজ্ঞায়িত বৈধ শেল প্রয়োজন।
jirib

1
পাশাপাশি command=, no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-ptyঅ্যাকাউন্টটি সত্যই সীমাবদ্ধ করার জন্য বিকল্পগুলির প্রয়োজন।
জোফেল

ঠিক আছে. আমি মাঝরাতে ঘুম থেকে উঠে উত্তরগুলি পরীক্ষা করার সিদ্ধান্ত নিয়েছি। যেহেতু আমি ক্লান্তিহীন আমি পুরো উত্তরটি একীভূত করব না তবে এমন কিছু জিজ্ঞাসা করব যা আমাকে বিভ্রান্ত করে। এটি কীভাবে কোনও টিটিটি থেকে লগ ইন করতে এইচজি_উয়েস্টকে আটকাবে?
হ্যান্ডিগ্যান্ডি

@ হ্যান্ডিগ্যান্ডি এটি সবচেয়ে সহজ অংশ। আমি এটি করার 2 টি উপায় যুক্ত করেছি, তবে আমি মনে করি এর থেকেও আরও বেশি কিছু রয়েছে
কোরেন

0

ব্যবহারকারীর জন্য লগইন শেল হিসাবে এটি ব্যবহার করুন:

#!/bin/sh
basedir=/local/remote_only_scripts
while read -p '$ ' prog args; do
    if [ ! -x "$basedir/$prog" ]; then
        echo "Invalid program: $prog"
    else
        case "$prog $args" in
            *\**|*\?*|*\^*|*\&*|*\<*|*\>*|*\|*|*\;*|*\`*|*\[*|*\]*)
                echo "Invalid character in command";;
            *)
                eval "$prog $args"
                echo;; # force a trailing newline after the program
        esac
    fi
done

আপনি সম্ভবত এই authorized_keysফাইলটিতে কোরেনের উত্তরের মতো স্পষ্টভাবে বলতে চাইবেন ; তবে '... / foo প্রতিস্থাপন করুন; এখানে প্রোগ্রাম সহ। যে মত, SSH থেকে কমান্ড প্রতিরোধ করবে sftp, scpএবং ssh hostname command


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

0

অফ সুযোগটিতে তাদের কেবলমাত্র একটি স্ক্রিপ্ট অ্যাক্সেস করা দরকার এটি আমার জন্য সত্যই ভাল কাজ করে। ব্যবহারকারী যুক্ত করুন এবং তাদের ডিফল্ট শেলটি স্ক্রিপ্টের পথে পরিবর্তন করুন। যখন তারা ssh এর মাধ্যমে সংযুক্ত হবে এটি স্ক্রিপ্টটি কার্যকর করবে এবং তাদের সেশনটি বন্ধ করবে।

server1:/ # useradd -s "/local/remote_only_scripts/foo/script.sh" hg_guest

server1:/ # grep hg_guest /etc/passwd

hg_guest: X: 2002: 100 :: / হোম / hg_guest: /local/remote_only_scripts/foo/script.sh

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