গিট কমিট অডিটিং


16

আমার কাছে একটি গিট সার্ভার রয়েছে যার ফলে এসএসএস চলছে এবং প্রতিটি ব্যবহারকারীর সিস্টেমে একটি ইউনিক্স অ্যাকাউন্ট রয়েছে।

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

আমি উদ্বিগ্ন যে কোনও ব্যবহারকারীর অন্য অনুমোদনের চেষ্টা করতে পারে, এমনকি তাদের যদি একই অনুমোদনের অধিকার থাকে।


আমি বিভ্রান্ত আপনি প্রশ্নে বলেছেন যে প্রতিটি ব্যবহারকারীর নিজস্ব শেল অ্যাকাউন্ট রয়েছে তবে আপনি একটি মন্তব্যে বলেছেন যে তারা সবাই একক অ্যাকাউন্ট ভাগ করে এবং প্রমাণীকরণের জন্য পৃথক কী ব্যবহার করে। এটি কোনটি, বা এটি উভয়ই?
স্কট প্যাক

হয় হতে পারে। বর্তমান সেটআপটি প্রশ্নের মধ্যে বর্ণিত একটি (ব্যবহারকারী প্রতি এক ssh অ্যাকাউন্ট), তবে এটি ভাল স্কেল করে না এবং ভবিষ্যতে আমি একক ব্যবহারকারী / বহু কীগুলির সাথে যেতে চাই। আমি কেবল সর্বাধিক বহুমুখী সমাধান খুঁজছি যা আমাকে এক বা অন্য প্রমাণীকরণ পদ্ধতিতে লক করবে না।
ইয়ানিসফ

1
এটি উল্লেখ করার মতো যে "যে ব্যক্তি এই প্রতিশ্রুতি দেয়" এবং "যে ব্যক্তি এই রেপোতে কিছুটা চাপ দেয়" এই সাধারণ ক্ষেত্রে একইভাবে হয় না। আমি আপনার রেপো থেকে আপনার প্রতিশ্রুতিগুলি টানতে পারি এবং তারপরে সেগুলি (আমার মতো) একটি তৃতীয় পক্ষের রেপোতে ঠেলাতে পারি।
নিকগ্রিম

উত্তর:


13

আপনি যদি এটি সম্পর্কে উদ্বিগ্ন হন তবে সমস্যাটি সমাধান করার কয়েকটি উপায় রয়েছে।

  1. আপনার ব্যবহারকারীদের আপনার চুক্তিতে স্বাক্ষর করুন, জিপিজি সই করার জন্য সমর্থন রয়েছে support
  2. ব্যবহারকারীদের প্রধান সংগ্রহশালায় প্রতিশ্রুতি দেওয়ার অধিকার দেবেন না, তাদের নিজস্ব সাব-স্টপোসিটরিতে প্রতিশ্রুতিবদ্ধ করুন এবং তারপরে কোনও বিশ্বস্ত ব্যবহারকারীকে মূল ভান্ডারটিতে পরিবর্তন আনতে হবে। এ কারণেই যদি আপনি কিছু গিট প্রকল্পের লগ বার্তাগুলির দিকে নজর রাখেন (যেমন গিট নিজেই) আপনি দেখতে পাবেন যে সেগুলি "লেখক" - এর পরিবর্তিত ব্যক্তি তৈরির পৃথক ক্ষেত্র। এবং "প্রতিশ্রুতিবদ্ধ" - ব্যক্তি যিনি ভাণ্ডারগুলিতে পরিবর্তিত হয়েছিলেন।

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

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

সুতরাং কেবল বিশ্বস্ত ব্যবহারকারীদের মূল ভান্ডারটিতে প্রতিশ্রুতিবদ্ধ হওয়া সম্পর্কে আমার সতর্কতা।
আবিজার্ন

@ অ্যাবিজার্ন: যথেষ্ট ফর্সা। আমি এটি পড়ার সাথে সাথে আপনার (1) এবং (2) বিকল্প বিকল্পগুলির বর্ণনা দিচ্ছে।
সিবি বেইলি

1
@ অ্যানিসফ আপনার প্রথম প্রশ্ন সম্পর্কিত, আপডেট হুক (চালক সার্ভার-সাইড) স্বাক্ষরগুলি যাচাই করতে পারে এবং অন্যথায় সম্পর্কিত রেফগুলি আপডেট করা প্রত্যাখ্যান করে। .git/hooks/update.sampleঅনুপ্রেরণার জন্য একবার দেখুন । আপনি যদি এসও তে কোনও প্রশ্ন জিজ্ঞাসা করেন তবে দয়া করে @ আমাকে জানান, এটি আমার জন্যও আকর্ষণীয় হবে
টোবিয়াস কেইনজলার

9

আমি এই ধরণের তথ্য পাওয়ার দুটি ভাল উপায় দেখছি। একটি হ'ল sshd থেকে লগিং বৃদ্ধি করে এবং অন্যটি ডিস্কে গিট সংগ্রহস্থলের গভীর নিরীক্ষণ করে। যেহেতু উভয়ই স্বতন্ত্রভাবে আপনাকে যে তথ্য চান তা আপনাকে দেয় না, আপনি উভয়ই করতে পারেন এবং কোনও বহিরাগত লগ বিশ্লেষণ ইঞ্জিন ব্যবহার করে বা মানুষের চোখ এবং টাইমস্ট্যাম্পগুলি ব্যবহার করে চাহিদার ভিত্তিতে লগ ডেটা সংযুক্ত করতে পারেন।

sshd পরিবর্তনসমূহ

ডিফল্টরূপে, আপনি যেমন কোনও সন্দেহ দেখেছেন, কোনও ব্যবহারকারী কখন লগ ইন করেছিলেন এবং কোথা থেকে, এসএসএস প্রমাণীকরণ লগগুলি ব্যবহার করে তা আপনি দেখতে পাবেন। আপনি যা করতে চান তা হল আপনি sshd থেকে লগ আউট করার সাথে স্তরটি পরিবর্তন করা। সুতরাং আপনার সম্পাদনা করুন /etc/ssh/sshd_configএবং দেখতে দেখতে লাইনের সন্ধান করুন

#LogLevel INFO

এবং এটি পরিবর্তন করুন

LogLevel VERBOSE

তারপরে sshd পরিষেবাটি পুনরায় চালু করুন। এটি sshd এর লগিং স্তরকে 1 ধাপে বাড়িয়ে দেয় যা আরও অনেক তথ্য দেয়। এই পরিবর্তন করার পরে আমার দূরবর্তী অ্যাক্সেসের এই লগ স্নিপেটটি দেখুন।

Nov  2 08:37:09 node1 sshd[4859]: Connection from 10.10.10.5 port 50445
Nov  2 08:37:10 node1 sshd[4859]: Found matching RSA key: f2:9e:a1:ca:0c:33:02:37:9b:de:e7:63:d5:f4:25:06
Nov  2 08:37:10 node1 sshd[4860]: Postponed publickey for scott from 10.10.10.5 port 50445 ssh2
Nov  2 08:37:10 node1 sshd[4859]: Found matching RSA key: f2:9e:a1:ca:0c:33:02:37:9b:de:e7:63:d5:f4:25:06
Nov  2 08:37:10 node1 sshd[4859]: Accepted publickey for scott from 10.10.10.5 port 50445 ssh2
Nov  2 08:37:10 node1 sshd[4859]: pam_unix(sshd:session): session opened for user scott by (uid=0)
Nov  2 08:37:10 node1 sshd[4859]: User child is on pid 4862
Nov  2 08:40:27 node1 sshd[4862]: Connection closed by 10.10.10.5
Nov  2 08:40:27 node1 sshd[4862]: Transferred: sent 30632, received 7024 bytes
Nov  2 08:40:27 node1 sshd[4862]: Closing connection to 10.10.10.5 port 50445
Nov  2 08:40:27 node1 sshd[4859]: pam_unix(sshd:session): session closed for user scott 

এখানে গুরুত্বপূর্ণ বিষয়গুলি লক্ষ্য করার জন্য হ'ল দ্বিগুণ

  1. আমাকে প্রমাণীকরণের জন্য ব্যবহৃত পাবলিক কীটির ফিঙ্গারপ্রিন্ট আমরা দেখতে পাই
  2. আমরা আমার লগ অফের টাইমস্ট্যাম্পটি দেখি

ডিফল্ট লগলভিল (আইএনএফও) sshd ব্যবহার করে those আইটেমগুলির মধ্যে একটিও নেই। কীটির ফিঙ্গারপ্রিন্ট পাওয়া একটি অতিরিক্ত পদক্ষেপ। আপনাকে উপযুক্ত authorized_keysফাইলটি এসএসএস-কীজেন সহ প্রসেস করতে হবে।

[root@node1 ssh]# ssh-keygen -l -f /home/scott/.ssh/authorized_keys
4096 f2:9e:a1:ca:0c:33:02:37:9b:de:e7:63:d5:f4:25:06 /home/scott/.ssh/authorized_keys (RSA)

সুতরাং এখন আপনি নিম্নলিখিত তথ্য টুকরা জানেন:

  1. লগইন করা হয়েছে এমন ব্যবহারকারীর নাম
  2. ব্যবহারকারী যে সময় লগ ইন করেছেন
  3. প্রমাণীকরণের জন্য কোন সর্বজনীন কী ব্যবহৃত হয়েছিল
  4. ব্যবহারকারী যে সময় লগ অফ করেছেন

উভয় ব্যবহারকারী একই সময়ে লগইন হয়নি বলে ধরে নিয়ে আমরা একটি নির্দিষ্ট সময়ে ব্যবহারকারীর ক্রিয়াকে বিশিষ্ট করার একটি উপায় রেখেছি, আমরা সংগ্রহস্থলের পরিবর্তনগুলি দেখতে শুরু করতে পারি।

নিরীক্ষণ সহ ডিরেক্টরি নিরীক্ষণ

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

ন্যূনতমভাবে, আমি ডিস্কের ডিরেক্টরিতে "ঘড়ি" বলে সেট আপ করার পরামর্শ দেব যা আপনার গিট রিপোজিটরিতে প্রশ্ন রয়েছে। এটি যা করে তা হ'ল ফাইল অ্যাক্সেস কলগুলি সম্পাদনা করার প্রচেষ্টা সম্পর্কে যেমন কার্নেল মডিউলকে নির্দেশ দেওয়া হয়, যেমন open()বা creat()আমরা তালিকাভুক্ত ফাইল বা ডিরেক্টরিগুলি ফাইল হ্যান্ডলগুলিতে নির্দেশ করি।

এখানে একটি নমুনা কনফিগারেশন রয়েছে যা এটি করবে এবং কেবল এটিই। সুতরাং /etc/audit/audit.rulesপরিবর্তনগুলি যথাযথভাবে সংহত করার জন্য আপনার বিদ্যমানটি পড়ে বোঝার এবং বোঝার জন্য সতর্ক হন ।

# This file contains the auditctl rules that are loaded
# whenever the audit daemon is started via the initscripts.
# The rules are simply the parameters that would be passed
# to auditctl.

# First rule - delete all
-D

# Increase the buffers to survive stress events.
# Make this bigger for busy systems
-b 1024

-w /path/to/git/repos-p wa

# Disable adding any additional rules - note that adding *new* rules will require a reboot
-e 2

আপনার বিস্তারিত উত্তরের জন্য আপনাকে অনেক ধন্যবাদ! এটি সিস্টেম প্রশাসকদের দৃষ্টিকোণ থেকে সত্যই সম্পূর্ণ। আমি যা দেখছিলাম তা হ'ল এমন একটি সমাধান যা এত নিচু স্তরের নিরীক্ষণের জন্য সমাধানের প্রয়োজন হবে না, এবং আদর্শিকভাবে সত্যের পরে ফরেনসিক সমাধানের পরিবর্তে জাল প্রতিশ্রুতি রোধ করবে।
ইন্নিসফ

2
ঠিক আছে, আপনি একটি সিস্টেম প্রশাসনের সাইটে জিজ্ঞাসা করেছিলেন এবং আমি একজন ফরেনসিক পরীক্ষক .... :)
স্কট প্যাক

5

আপনি নিতে পারেন শুধুমাত্র প্রযুক্তিগত পন্থা ssh সংযোগের পরিচয় বিশ্বাস। এরপরে আপনি প্রয়োগ করতে পারবেন যে প্রতিটি ব্যবহারকারী কেবলমাত্র প্রতিটি নতুন ধাক্কা কমিটের প্রতিশ্রুতিবদ্ধকে বৈধতা দিয়ে যে কমিট করে তা ঠেলে দেয়।

এটি নির্ভরযোগ্য হওয়ার জন্য আপনি প্রায় অবশ্যই আপনার ব্যবহারকারীদের সেই বাক্সে অনিয়ন্ত্রিত শেল অ্যাক্সেস দিতে চান না যেখানে সংগ্রহস্থলটি থাকে; আপনি এমন git-shellকোনও কিছুর ব্যবহার নিশ্চিত করতে চাইবেন অন্যথায় সীমাবদ্ধতাগুলি সহজেই কাজ করা যায়।

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

এক পর্যায়ে কিছুটা হলেও আপনার বিকাশকারীদের বিশ্বাস করা দরকার।


3

এসএসএস সংযোগ পাওয়ার পরে অনেকগুলি এসএইচ ডিমন একটি এন্ট্রি /var/log/audit.logবা অনুরূপ কিছু করে। কমিট-লগের সাথে এই লগকে ক্রস-রেফারেন্সিংয়ের মাধ্যমে আপনাকে একটি ধারণা দেওয়া উচিত যে কোনও কমিট ইস্যু করার জন্য কোন ssh- ব্যবহারকারীর ব্যবহার হয়েছিল। এটি যাচাই বাছাইয়ের পরে ব্যবহার করার জন্য একটি নিরীক্ষণ পদক্ষেপ।

প্রকৃতপক্ষে গিট-ব্যবহারকারীকে সঠিক ssh- ব্যবহারকারীর প্রয়োগ করা অন্য যে কোনও উত্তরের জন্য এখানে।


এখনও সেটআপ রয়েছে যা ব্যবহারকারীরা একই ssh ব্যবহারকারীর সাথে লগইন করে তবে বিভিন্ন (অনুমোদিত) কী ব্যবহার করে। এটি নিরীক্ষণটিকে আরও শক্ত করে তোলে।
ইয়ানিসফ

@ অ্যানিসফ: আপনি ঠিক বলেছেন, এটি কিছুটা পরিবর্তন করে। যে কোনও ভাগ্যের সাথে আমি আপনার অ-গুণযোগ্য অ্যাকাউন্ট অ্যাক্সেসের সাথে মোকাবিলার অতিরিক্ত প্রয়োজনের সমাধান করতে সহায়তা করেছি।
স্কট প্যাক

0

সমস্ত ব্যবহারকারীর কাছে যদি রিপোজিটরিতে রাইটিং অ্যাক্সেস সহ শেল অ্যাকাউন্ট থাকে তবে আপনি কোনও বিশ্বাসযোগ্য নিরীক্ষণ লগ সেট আপ করতে সক্ষম হবেন না: তারা লগতে লিখিত না করেই সংগ্রহস্থলটি সংশোধন করতে পারে এবং লগতে যা খুশি তাই লিখতে পারে।

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

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