Access Server ডিস্কে সম্পাদনা করা post_auth স্ক্রিপ্ট উপেক্ষা করে
ডিস্কে post_auth ফাইল সম্পাদনা করলে কিছুই হয় না: Access Server এর কনফিগ ডেটাবেসে থাকা কপিটি চালায়। সিদ্ধান্তের পথ এবং sacli কমান্ড অনুসরণ করুন।
সম্পাদিত mac.py যা কিছুই বদলায় না, সেটিই সাধারণত প্রথম উপসর্গ। ডিস্কের ফাইলটিই Access Server চালায় না; প্রমাণীকরণ সেবা স্ক্রিপ্টটি সার্ভারের কনফিগ ডেটাবেস থেকে লোড করে, আর সেই সংরক্ষিত কপিটিই লগইন নির্ধারণ করে। সংরক্ষিত মানটি প্রতিস্থাপিত না হওয়া পর্যন্ত প্রতিটি পরীক্ষা কেবল প্রমাণ করে যে পুরনো স্ক্রিপ্ট এখনো কাজ করে।
তিনটি শর্ত কাজটি নির্ধারণ করে: মানটি কখনো কনফিগ ডেটাবেসে রাখা হয়েছিল কি না, সেবাটিকে তা পুনরায় লোড করতে বলা হয়েছিল কি না, এবং আপনি যে কোড বদলেছেন তা সত্যিই প্রতিটি সংযোগে চলে কি না। প্রতিটির আলাদা উপসর্গ, আর ভুলটির সংশোধন একটি রক্ষণাবেক্ষণ উইন্ডো নষ্ট করে।
ফাইলটি উৎস, চলমান কপি নয়
Access Server post-auth স্ক্রিপ্টটি auth.module.post_auth_script কী-এর অধীনে রাখে। ফাইল সম্পাদনা করলে কেবল আপনার কার্যকর কপি হালনাগাদ হয়। ডেমন সংরক্ষিত মানটি পড়ে, তাই পুরনো এন্ট্রি মুছে নতুন ফাইলটি তার জায়গায় না রাখা পর্যন্ত সম্পাদনাটি অদৃশ্য থাকে। সেই সংরক্ষিত মানই প্রমাণীকরণ সেবার দেখা একমাত্র কপি।
বদলানোর আগে এটি পড়ুন। যদি এটি আপনার সম্পাদিত ফাইলের সঙ্গে মিলে যায়, সমস্যাটি সংরক্ষণে নয় এবং পরিধির প্রশ্নে যান। যদি এটি পুরনো সংস্করণ দেখায়, সম্পাদনাটি সেবায় পৌঁছায়নি।
./sacli -k auth.module.post_auth_script ConfigGetসংরক্ষিত কপি প্রতিস্থাপন করুন, তারপর প্রয়োগ করুন
লেখার আগে মুছে ফেলা কোনো সাজসজ্জা নয়। ConfigPut এর সঙ্গে --value_file এক ধাপে মানটি প্রতিস্থাপন করে, আর প্রথমে ConfigDel করা পুরনো বা নষ্ট এন্ট্রি রেখে যাওয়া অসম্ভব করে। শুরু করার আগে চলমান স্ক্রিপ্টের একটি কপি স্ক্রিপ্ট ডিরেক্টরির বাইরে রাখুন।
./sacli -k auth.module.post_auth_script ConfigDel
# store the file, then apply it
./sacli -k auth.module.post_auth_script --value_file=/root/post_auth.py ConfigPut
./sacli startsacli start পরিবর্তিত কনফিগটি অভ্যন্তরীণ সেবাগুলোতে প্রয়োগ করে, আর তখনই নতুন স্ক্রিপ্ট কার্যকর হয়। এটি পুরো মেশিন বা ডেমন পুনরায় চালু করার সমান নয়, এবং আপনার পরিবর্তনের প্রয়োজন না হলে তা দিয়ে এটি প্রতিস্থাপন করা উচিত নয়।
মান ফাইলের জন্য নিখুঁত পথ ব্যবহার করুন এবং root এটি পড়তে পারে নিশ্চিত করুন। এমন পথ যা আপনার শেল থেকে সমাধান হয় কিন্তু সেবা অ্যাকাউন্ট থেকে হয় না, একটি সংরক্ষিত মান দেয় যা ConfigGet এ ঠিক দেখায় এবং প্রথম লগইনে ব্যর্থ হয়। sacli start এর পরে সংরক্ষিত ফলাফলটি আরেকবার দেখুন, আগে নয়।
মডিউল পরিধি নাকি প্রতি সংযোগ: সন্ধানটি কোথায় থাকবে
Python মডিউল-স্তরের বাক্যগুলো একবার চালায়, যখন স্ক্রিপ্টটি লোড হয়। তাই ফাইলের উপরে লেখা ডেটাবেস কয়েরি লোডের সময় টেবিলটি পড়ে এবং সেই উত্তরটি পরের প্রতিটি সংযোগের জন্য রাখে। সম্পাদনা কিছুই করছে না বলে মনে হওয়ার দ্বিতীয় কারণ এটিই: কোড চলে, কিন্তু আপনি যে সময়ে আশা করেন সেখানে নয়।
কয়েরিটি post_auth হ্যান্ডলারের ভিতরে রাখুন যাতে প্রতিটি প্রমাণীকরণের জন্য চলে। নথিভুক্ত সিগনেচার রাখুন, হ্যান্ডলার যে প্রমাণীকরণ ফলাফল পায় তা সমন্বয় করুন, এবং খালি সংখ্যার বদলে সেই একই বস্তু ফেরত দিন।
সংযোগ পরিচালনাও হ্যান্ডলারের ভিতরে রাখুন। আমদানির সময় খোলা সংযোগ প্রথম ব্যবহারকারী লগইন করার আগে সার্ভার বন্ধ করতে পারে, আর ফলাফল ত്രুটি ভাঙা স্ক্রিপ্টের মতো নয়, বরং প্রত্যাখ্যাত প্রমাণপত্রের মতো দেখায়।
দুটি প্রত্যাখ্যান পথ, একজন মালিক
যদি সিদ্ধান্তটি স্থানীয় সন্ধান হয়, Python হ্যান্ডলার ফলাফলের মালিক। যদি এটি বাহ্যিক HTTP পরীক্ষা হয়, কমান্ডের এক্সিট অবস্থা উত্তরটি বহন করুক: শূন্য নয় এমন এক্সিট দেওয়া মোড়ক লগইন প্রত্যাখ্যান করে, আর শেষ কমান্ডের অবস্থাই স্পষ্ট exit ছাড়া স্ক্রিপ্টের অবস্থা হয়।
গোপন কথাটি প্রক্রিয়া তালিকার বাইরে রাখুন। root-পাঠ্য ফাইল বা সেবার পাঠানো পরিবেশ মান, কোনো স্থানীয় ব্যবহারকারী ps থেকে পড়তে পারে এমন আর্গুমেন্টের চেয়ে নিরাপদ। কলের আগে এন্ডপয়েন্টটি একটি ভেরিয়েবলে স্থির করুন, যাতে টাইপো কনফিগ সময়ে ব্যর্থ হয়, কারো লগইনের সময়ে নয়। সেই গোপন কথাটি অন্য যেকোনো প্রমাণপত্রের মতোই ঘুরিয়ে বদলান।
প্রতিটি পরীক্ষার জন্য একজন মালিক বেছে নিন। যে স্ক্রিপ্ট ডেটাবেস কয়েরি করে এবং HTTP সেবা ডাকে, তার দুটি ভিন্ন হওয়ার ক্ষেত্রে একটি ঘোষিত অগ্রাধিকার নিয়ম দরকার, নইলে লগের প্রত্যাখ্যান কারণ ব্যবহারকারীকে বলা কথার সঙ্গে মিলবে না।
প্রশাসককে লক আউট না করে প্রয়োগ করুন
দুটি সুরক্ষা পরিবর্তনটি প্রত্যাবর্তনযোগ্য করে: স্ক্রিপ্টের ওপর নির্ভর না করা দ্বিতীয় অ্যাডমিন অ্যাকাউন্ট, এবং স্ক্রিপ্ট ডিরেক্টরির বাইরে রাখা একটি জ্ঞাত-ভালো কপি। রক্ষণাবেক্ষণ উইন্ডোতে পরিবর্তনটি প্রয়োগ করুন, তারপর সংযোগ বিচ্ছিন্ন করার আগে একটি পরীক্ষামূলক লগইন ও একটি ইচ্ছাকৃত প্রত্যাখ্যান দেখুন। যদি লগে প্রমাণীকরণ সিদ্ধান্তের বদলে সিনট্যাক্স ত্রুটি দেখায়, সংরক্ষিত স্ক্রিপ্টটি ভাঙা এবং প্রতিটি লগইন ব্যর্থ হবে।
দুটি শর্ত অপেক্ষা করতে বলে: আপনি root হিসেবে মান ফাইলটি পড়তে পারেন না, অথবা অ্যাডমিন ইন্টারফেসে দ্বিতীয় পথ নেই। দুটোই ছোট পরিবর্তনকে লকআউটে পরিণত করে, আর দিনের শেষে উৎপাদন সার্ভারে পরীক্ষা করার যোগ্য কোনোটিই নয়। Access Server নথি post-auth ইন্টারফেস এবং এর সমর্থিত ক্ষেত্রগুলো কভার করে।