Security Archives - To Learn Team https://tolearnteam.com/tag/security/ Learn about Everything Online Sun, 16 Aug 2026 12:43:43 +0000 en-US hourly 1 https://wordpress.org/?v=7.1.2 https://tolearnteam.com/wp-content/uploads/2026/07/cropped-Logo-32x32.png Security Archives - To Learn Team https://tolearnteam.com/tag/security/ 32 32 ব্লকচেইন প্রযুক্তির সুবিধা ও অসুবিধা: Decentralization, Security, Scalability, Energy Consumption সহ সম্পূর্ণ গাইড https://tolearnteam.com/advantages-disadvantages-of-blockchain-bangla/ Sun, 16 Aug 2026 12:43:41 +0000 http://tolearnteam.com/?p=2650 ব্লকচেইন প্রযুক্তি একটি বিপ্লবী ডিজিটাল লেজার সিস্টেম, যা নিরাপদ, স্বচ্ছ এবং বিকেন্দ্রীভূত লেনদেন নিশ্চিত করে। এটি Bitcoin-এর মতো ক্রিপ্টোকারেন্সির ভিত্তি এবং ফাইন্যান্স, হেলথকেয়ার, সাপ্লাই চেইন সহ বিভিন্ন খাতে প্রয়োগের সম্ভাবনা…

The post ব্লকচেইন প্রযুক্তির সুবিধা ও অসুবিধা: Decentralization, Security, Scalability, Energy Consumption সহ সম্পূর্ণ গাইড appeared first on To Learn Team.

]]>
ব্লকচেইন প্রযুক্তি একটি বিপ্লবী ডিজিটাল লেজার সিস্টেম, যা নিরাপদ, স্বচ্ছ এবং বিকেন্দ্রীভূত লেনদেন নিশ্চিত করে। এটি Bitcoin-এর মতো ক্রিপ্টোকারেন্সির ভিত্তি এবং ফাইন্যান্স, হেলথকেয়ার, সাপ্লাই চেইন সহ বিভিন্ন খাতে প্রয়োগের সম্ভাবনা রাখে। ব্লকচেইনের সুবিধার মধ্যে রয়েছে বিকেন্দ্রীকরণ, স্বচ্ছতা এবং নিরাপত্তা। তবে এর অসুবিধাও রয়েছে—স্কেলেবিলিটি সমস্যা, উচ্চ শক্তি খরচ এবং নিয়ন্ত্রক অনিশ্চয়তা। এই আর্টিকেলে আমরা ব্লকচেইনের সুবিধা ও অসুবিধা নিয়ে বিস্তারিত আলোচনা করব, সাথে থাকবে প্রোগ্রামিং উদাহরণ ও অনুশীলন।


🔍 ব্লকচেইন প্রযুক্তি কী? (What is Blockchain Technology?)

ব্লকচেইন হলো একটি বিকেন্দ্রীভূত ডিজিটাল লেজার সিস্টেম, যা একাধিক কম্পিউটারে লেনদেন নিরাপদ ও স্বচ্ছভাবে রেকর্ড করে। প্রতিটি লেনদেন blocks-এ গ্রুপ করা হয়, যা কালানুক্রমিক চেইনে যুক্ত থাকে। ফলে পুরনো রেকর্ড পরিবর্তন করা প্রায় অসম্ভব।

মূল বৈশিষ্ট্য (Key Concepts)

১. Decentralization (বিকেন্দ্রীকরণ)

কোনো কেন্দ্রীয় কর্তৃপক্ষ নেই; ডেটা নেটওয়ার্কের কম্পিউটারগুলোর (নোড) মধ্যে বিতরণ করা থাকে।

সিনট্যাক্স (Python — Decentralized Nodes):

python

class Node:
    def __init__(self, name):
        self.name = name
        self.peers = []
        self.ledger = []

    def connect(self, peer):
        self.peers.append(peer)
        peer.peers.append(self)

    def broadcast(self, block):
        for peer in self.peers:
            peer.receive_block(block)

    def receive_block(self, block):
        self.ledger.append(block)
        print(f"{self.name} received: {block}")

node1 = Node("Node1")
node2 = Node("Node2")
node1.connect(node2)
node1.broadcast("Block #1")

ব্যাখ্যা:
প্রতিটি নোডের কাছে লেজারের কপি থাকে; কোনো একক নিয়ন্ত্রণ নেই। এটি decentralization-এর মূল।

২. Immutability (অপরিবর্তনীয়তা)

একবার রেকর্ড হলে নেটওয়ার্কের সম্মতি ছাড়া লেনদেন পরিবর্তন করা যায় না।

সিনট্যাক্স (Python — Hash Linking):

python

import hashlib

class Block:
    def __init__(self, index, previous_hash, data):
        self.index = index
        self.previous_hash = previous_hash
        self.data = data
        self.hash = self.calculate_hash()

    def calculate_hash(self):
        return hashlib.sha256(f"{self.index}{self.previous_hash}{self.data}".encode()).hexdigest()

genesis = Block(0, "0", "Genesis")
block1 = Block(1, genesis.hash, "Transaction: Alice -> Bob 2 BTC")
print(genesis.hash, block1.hash)
# block1.data = "hacked" করলে hash বদলে যায়

ব্যাখ্যা:
হ্যাশ পরিবর্তন হলে চেইন ভেঙে যায়, তাই টেম্পারিং ধরা পড়ে।

৩. Transparency (স্বচ্ছতা)

সব অংশগ্রহণকারী একই ডেটা অ্যাক্সেস করতে পারে, ফলে বিশ্বাস তৈরি হয়।

সিনট্যাক্স (JSON — Public Ledger):

json

{
  "blockchain": "public",
  "ledger_visible_to": "all_participants",
  "transactions": [
    { "from": "0xAlice", "to": "0xBob", "amount": 2.5 }
  ]
}

৪. Security (নিরাপত্তা)

ক্রিপ্টোগ্রাফিক কৌশল ডেটাকে অননুমোদিত অ্যাক্সেস ও টেম্পারিং থেকে রক্ষা করে।

সিনট্যাক্স (Python — SHA-256 Hashing):

python

import hashlib

def secure_hash(data):
    return hashlib.sha256(data.encode()).hexdigest()

tx = "Alice -> Bob: 5 BTC"
print(secure_hash(tx))

৫. Smart Contracts (স্মার্ট কন্ট্রাক্ট)

শর্ত সরাসরি কোডে লেখা থাকে; চুক্তি স্বয়ংক্রিয়ভাবে কার্যকর হয়।

সিনট্যাক্স (Solidity):

solidity

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract SimpleContract {
    uint256 public value;

    function setValue(uint256 _value) public {
        value = _value;
    }
}

✅ ব্লকচেইন প্রযুক্তির সুবিধা (Advantages)

১. Open (উন্মুক্ত)

ব্লকচেইন সবার জন্য অ্যাক্সেসযোগ্য; যে কেউ অনুমতি ছাড়াই নেটওয়ার্কে যোগ দিতে পারে।

সিনট্যাক্স (JavaScript — Open Join):

javascript

class PublicNetwork {
  constructor() {
    this.nodes = [];
  }
  join(node) {
    this.nodes.push(node);
    console.log(`${node} joined freely`);
  }
}
const net = new PublicNetwork();
net.join("Alice");

ব্যাখ্যা:
পাবলিক ব্লকচেইনে কোনো অনুমতির প্রয়োজন নেই, যেমন Bitcoin।

২. Verifiable (যাচাইযোগ্য)

বিকেন্দ্রীভূতভাবে তথ্য সংরক্ষিত হয়; zero-knowledge proof ব্যবহার করে এক পক্ষ অন্য পক্ষকে ডেটার সঠিকতা প্রমাণ করতে পারে, ডেটা প্রকাশ না করেই।

সিনট্যাক্স (Python — Simplified Zero-Knowledge Concept):

python

def verify_proof(proof, public_input):
    # বাস্তবে zk-SNARK/zk-STARK জটিল; এখানে ধারণা
    return proof == "valid"

print(verify_proof("valid", "public_input"))  # True

ব্যাখ্যা:
গোপনীয়তা বজায় রেখে তথ্যের সত্যতা যাচাই করা যায়।

৩. Permanent (স্থায়ী)

ব্লকচেইনে সংরক্ষিত রেকর্ড স্থায়ী; ডেটা হারানোর ভয় নেই, কারণ প্রতিটি নোডে ডুপ্লিকেট কপি থাকে।

সিনট্যাক্স (Python — Redundancy Check):

python

nodes = ["node1", "node2", "node3"]
ledger_data = "Transaction record"

# প্রতিটি নোডে ডেটা কপি
storage = {node: ledger_data for node in nodes}
print(storage)

৪. Free from Censorship (সেন্সরশিপ মুক্ত)

কোনো একক পক্ষের নিয়ন্ত্রণ নেই; বিশ্বস্ত নোড ও কনসেনসাস প্রোটোকল স্মার্ট কন্ট্রাক্ট ব্যবহার করে লেনদেন অনুমোদন করে।

৫. Tighter Security (কঠোর নিরাপত্তা)

ব্লকচেইন প্রতিটি লেনদেনে SHA-256 হ্যাশিং ব্যবহার করে, যা ব্লকগুলোকে সংযুক্ত রাখে।

সিনট্যাক্স (Python — SHA-256):

python

import hashlib
print(hashlib.sha256(b"Block Data").hexdigest())

ব্যাখ্যা:
SHA-256 একটি ক্রিপ্টোগ্রাফিক হ্যাশ ফাংশন; আউটপুট থেকে ইনপুট বের করা কার্যত অসম্ভব।

৬. Immutability (অপরিবর্তনীয়তা)

বিকেন্দ্রীভূত কাঠামোর কারণে ডেটা টেম্পার করা যায় না; কোনো পরিবর্তন সব নোডে প্রতিফলিত হবে, ফলে জালিয়াতি অসম্ভব।

সিনট্যাক্স (Python — Tamper Detection):

python

def verify_chain(chain):
    for i in range(1, len(chain)):
        if chain[i].previous_hash != chain[i-1].hash:
            return False
    return True

# block1.data = "hacked" করলে verify_chain False

৭. Transparency (স্বচ্ছতা)

লেনদেনের ইতিহাস সব নোডে স্বচ্ছ; কোনো পরিবর্তন হলে অন্য নোডগুলো দেখতে পায়।

৮. Efficiency (দক্ষতা)

ব্লকচেইন তৃতীয় পক্ষের হস্তক্ষেপ দূর করে এবং ত্রুটি কমিয়ে সিস্টেমকে দক্ষ ও দ্রুত করে।

সিনট্যাক্স (Python — Settlement Simulation):

python

def settle_transaction(sender, receiver, amount):
    # কোনো মধ্যস্বত্বভোগী নেই
    sender.balance -= amount
    receiver.balance += amount
    return f"Settled {amount} from {sender.name} to {receiver.name}"

৯. Cost Reduction (খরচ হ্রাস)

তৃতীয় পক্ষের প্রয়োজন না থাকায় ব্যবসার খরচ কমে এবং অংশীদারদের মধ্যে আস্থা বাড়ে।


❌ ব্লকচেইন প্রযুক্তির অসুবিধা (Disadvantages)

১. Scalability (স্কেলেবিলিটি)

ব্লকের নির্দিষ্ট আকার (Bitcoin-এ 1 MB) থাকায় এক ব্লকে মাত্র কয়েকটি লেনদেন ধরে; বড় স্কেল করা কঠিন।

সিনট্যাক্স (Python — Block Size Limit):

python

MAX_BLOCK_SIZE = 1_000_000  # 1 MB
transaction_size = 250  # bytes per tx
max_txs_per_block = MAX_BLOCK_SIZE // transaction_size
print(f"Max transactions per block: {max_txs_per_block}")

ব্যাখ্যা:
লেনদেন সংখ্যা বাড়লে ব্লক পূর্ণ হয়ে যায়, ফলে লেনদেন ধীর হয়।

২. Immaturity (অপরিপক্বতা)

ব্লকচেইন মাত্র কয়েক বছরের প্রযুক্তি; অনেক মানুষ এখনও এতে আস্থা রাখতে প্রস্তুত নয়।

৩. Energy Consuming (শক্তি খরচ)

লেনদেন যাচাইয়ে প্রচুর শক্তি ব্যবহৃত হয়; সমীক্ষায় দেখা গেছে ২০১৮ সালে বিশ্বের প্রায় ০.৩% বিদ্যুৎ ব্লকচেইন যাচাইয়ে ব্যবহৃত হয়।

সিনট্যাক্স (Python — Energy Estimation):

python

def estimate_energy_per_tx(consensus):
    if consensus == "PoW":
        return 1000  # kWh arbitrary
    return 10

print(f"PoW energy: {estimate_energy_per_tx('PoW')} kWh/tx")
print(f"PoS energy: {estimate_energy_per_tx('PoS')} kWh/tx")

৪. Time-Consuming (সময়সাপেক্ষ)

মাইনারদের পরবর্তী ব্লক যোগ করতে nonce মান বারবার গণনা করতে হয়, যা সময়সাপেক্ষ।

সিনট্যাক্স (Python — Nonce Search):

python

import hashlib

def mine(block_data, difficulty):
    nonce = 0
    while not hashlib.sha256(f"{block_data}{nonce}".encode()).hexdigest().startswith("0" * difficulty):
        nonce += 1
    return nonce

nonce = mine("Block Data", 4)
print(f"Nonce found after many iterations: {nonce}")

৫. Legal Formalities (আইনি জটিলতা)

কিছু দেশে ক্রিপ্টোকারেন্সির মতো ব্লকচেইন অ্যাপ্লিকেশন নিষিদ্ধ; বাণিজ্যিক খাতে ব্যবহারে অনীহা রয়েছে।

৬. Storage (স্টোরেজ)

ব্লকচেইন ডাটাবেস সব নোডে সংরক্ষিত হয়; লেনদেন বাড়লে স্টোরেজ বাড়ে।

৭. Regulations (নিয়ন্ত্রণ)

আর্থিক প্রতিষ্ঠানগুলোর সাথে চ্যালেঞ্জ; ব্যাপক গ্রহণের জন্য অতিরিক্ত প্রযুক্তি ও নিয়ম প্রয়োজন।


📝 এক্সারসাইজ (হিন্টসহ)

Exercise 1: Decentralized Network Simulation

কাজ: Python-এ Node ক্লাস তৈরি করো যাতে connect, broadcast, receive_block মেথড থাকবে। তিনটি নোড তৈরি করে একটি ব্লক ব্রডকাস্ট করো।

হিন্ট:

  • peers তালিকায় সংযুক্ত নোড রাখো।
  • broadcast প্রতিটি পিয়ারের receive_block কল করবে।

Exercise 2: SHA-256 Hash Verification

কাজ: একটি ফাংশন লেখো যা ইনপুট স্ট্রিংয়ের SHA-256 হ্যাশ বের করবে এবং দুটি ইনপুট আলাদা হলে হ্যাশ আলাদা হবে তা দেখাবে।

হিন্ট:

  • hashlib.sha256(data.encode()).hexdigest() ব্যবহার করো।
  • দুটি স্ট্রিং “Hello” এবং “hello” এর হ্যাশ তুলনা করো।

Exercise 3: Blockchain Tamper Detection

কাজ: Block এবং Blockchain ক্লাস তৈরি করো; verify_chain মেথডে প্রতিটি ব্লকের হ্যাশ ও previous_hash যাচাই করো। একটি ব্লকের ডেটা বদলে দেখাও চেইন ভেঙে যায়।

হিন্ট:

  • calculate_hash ফাংশনে সব ফিল্ড কম্বাইন করো।
  • verify_chain-এ current.hash != current.calculate_hash() বা current.previous_hash != previous.hash চেক করো।

Exercise 4: Smart Contract (Solidity)

কাজ: একটি Solidity কন্ট্রাক্ট লেখো যেখানে value স্টোর হবে এবং setValue ও getValue ফাংশন থাকবে।

হিন্ট:

  • uint256 public value;
  • function setValue(uint256 _value) public { value = _value; }

Exercise 5: Energy Consumption Compare

কাজ: একটি ফাংশন লেখো যা consensus type (PoW/PoS) ইনপুট নিয়ে আনুমানিক শক্তি ইউনিট রিটার্ন করবে।

হিন্ট:

  • if consensus == "PoW": return 1000
  • elif consensus == "PoS": return 10

Exercise 6: Scalability Limit Calculator

কাজ: Python-এ একটি ফাংশন লেখো যা ব্লক সাইজ (বাইটে) এবং প্রতি ট্রানজেকশনের সাইজ নিয়ে সর্বোচ্চ ট্রানজেকশন সংখ্যা বের করবে।

হিন্ট:

  • max_txs = block_size // tx_size

🧭 সমাধানের পথনির্দেশনা

  1. ব্লক স্ট্রাকচার তৈরি করো: ব্লকে index, previous_hash, data, hash থাকবে।
  2. হ্যাশ ফাংশন যুক্ত করো: hashlib.sha256 দিয়ে ব্লক ডেটার হ্যাশ বের করো।
  3. চেইন তৈরি করো: জেনেসিস ব্লক থেকে শুরু করে নতুন ব্লক যোগ করো।
  4. ভ্যালিডেশন ফাংশন লিখো: প্রতিটি ব্লকের হ্যাশ পুনরায় হিসাব করে চেইন অখণ্ডতা পরীক্ষা করো।
  5. সিমুলেশন চালাও: ডেটা পরিবর্তন করলে চেইন ভেঙে যায় কিনা দেখো।
  6. স্মার্ট কন্ট্রাক্ট টেস্ট করো: Ethereum টেস্টনেটে ডিপ্লয় করে setValue কল করো।
  7. পারফরম্যান্স মেট্রিক্স হিসাব করো: স্কেলেবিলিটি ও এনার্জি তুলনা করো।

📚 সারসংক্ষেপ

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


এই পোস্টটি ToLearnTeam.com-এ প্রকাশের জন্য প্রস্তুত।
কোনো অংশ আরও বিস্তারিত করতে চাইলে জানাতে পারেন।

The post ব্লকচেইন প্রযুক্তির সুবিধা ও অসুবিধা: Decentralization, Security, Scalability, Energy Consumption সহ সম্পূর্ণ গাইড appeared first on To Learn Team.

]]>
ব্লকচেইন কী, কিভাবে কাজ করে এবং ১.০, ২.০, ৩.০ ভার্সন – সম্পূর্ণ বাংলা গাইড https://tolearnteam.com/blockchain-introduction-how-it-works-versions-bangla/ Sun, 16 Aug 2026 11:17:50 +0000 http://tolearnteam.com/?p=2629 ব্লকচেইন আজকের প্রযুক্তি দুনিয়ার একটি আলোচিত শব্দ (buzzword)। সহজভাবে বলতে গেলে, ব্লকচেইন হলো লেনদেনের ডিজিটাল রেকর্ড, যা Chain of Blocks (ব্লকের চেইন) আকারে সংরক্ষিত থাকে। প্রতিবার একটি ব্লক তথ্য দিয়ে পূর্ণ হলে, পরবর্তী নতুন…

The post ব্লকচেইন কী, কিভাবে কাজ করে এবং ১.০, ২.০, ৩.০ ভার্সন – সম্পূর্ণ বাংলা গাইড appeared first on To Learn Team.

]]>
ব্লকচেইন আজকের প্রযুক্তি দুনিয়ার একটি আলোচিত শব্দ (buzzword)। সহজভাবে বলতে গেলে, ব্লকচেইন হলো লেনদেনের ডিজিটাল রেকর্ড, যা Chain of Blocks (ব্লকের চেইন) আকারে সংরক্ষিত থাকে। প্রতিবার একটি ব্লক তথ্য দিয়ে পূর্ণ হলে, পরবর্তী নতুন ব্লক তৈরি হয় আরও তথ্য সংরক্ষণের জন্য। ব্লকচেইন একটি নিরাপদ প্রযুক্তি যেখানে কোনো তৃতীয় পক্ষের মধ্যস্থতাকারীর প্রয়োজন হয় না; যেমন টাকা লেনদেনে ব্যাংকের হস্তক্ষেপ ছাড়াই কাজ করে।

এই আর্টিকেলে আমরা ব্লকচেইনের সংজ্ঞা, কাজের প্রক্রিয়া, বিভিন্ন ভার্সন (১.০, ২.০, ৩.০), সুবিধা-অসুবিধা এবং মূল বৈশিষ্ট্যগুলো বিস্তারিতভাবে শিখব। প্রতিটি টেকনিক্যাল টার্মের সাথে প্রোগ্রামিং উদাহরণ ও সিনট্যাক্স দেওয়া হয়েছে, যাতে আপনি হাতে-কলমে বুঝতে পারেন।


🔍 ব্লকচেইন কী? (What is Blockchain?)

ব্লকচেইন হলো ব্লকের চেইন যা নির্দিষ্ট তথ্য ধারণ করে। এটি একটি লেজার (ডিজিটাল খাতা) যা ক্রমাগত বাড়তে থাকে এবং সব লেনদেনের রেকর্ড স্থায়ীভাবে সংরক্ষণ করে। প্রতিটি ব্লকে থাকে:

  • লেনদেনের তালিকা
  • টাইমস্ট্যাম্প
  • আগের ব্লকের হ্যাশ (ক্রিপ্টোগ্রাফিক সংযোগ)
  • নিজস্ব হ্যাশ

যখন একটি ব্লক তথ্যে পূর্ণ হয়, তখন নতুন ব্লক তৈরি হয় এবং আগের ব্লকের সাথে যুক্ত হয়। এই শৃঙ্খলার কারণে একবার ডেটা যুক্ত হলে তা পরিবর্তন করা প্রায় অসম্ভব।

উদাহরণ ও সিনট্যাক্স (Python)

python

import hashlib
import time

class Block:
    def __init__(self, index, previous_hash, data):
        self.index = index
        self.timestamp = time.time()
        self.previous_hash = previous_hash
        self.data = data
        self.hash = self.calculate_hash()
    
    def calculate_hash(self):
        block_string = f"{self.index}{self.timestamp}{self.previous_hash}{self.data}"
        return hashlib.sha256(block_string.encode()).hexdigest()

class Blockchain:
    def __init__(self):
        self.chain = [self.create_genesis_block()]
    
    def create_genesis_block(self):
        return Block(0, "0", "Genesis Block")
    
    def add_block(self, data):
        prev = self.chain[-1]
        new_block = Block(len(self.chain), prev.hash, data)
        self.chain.append(new_block)

# ব্যবহার
my_blockchain = Blockchain()
my_blockchain.add_block("Transaction 1: Alice pays Bob 5 BTC")
my_blockchain.add_block("Transaction 2: Bob pays Charlie 2 BTC")

for block in my_blockchain.chain:
    print(f"Block #{block.index} | Hash: {block.hash[:10]}... | Prev: {block.previous_hash[:10]}...")

ব্যাখ্যা:
প্রতিটি ব্লকে একটি হ্যাশ থাকে যা ব্লকের ডেটা ও আগের ব্লকের হ্যাশের উপর নির্ভরশীল। কোনো ব্লকের ডেটা বদলালে হ্যাশ বদলে যায়, ফলে চেইন ভেঙে যায় এবং টেম্পারিং ধরা পড়ে।


⚙ ব্লকচেইন কিভাবে কাজ করে? (How Blockchain Works)

ব্লকচেইন একটি ডিজিটাল লেজার হিসেবে কাজ করে, যা ব্লক দিয়ে গঠিত। প্রতিটি ব্লক কিছু লেনদেনের গ্রুপ সংরক্ষণ করে। যখন একটি ব্লক ডেটায় পূর্ণ হয়, তখন সেটি আগের ব্লকের সাথে নিরাপদভাবে যুক্ত হয় এবং একটি ধারাবাহিক চেইন তৈরি করে। নতুন ব্লক যুক্ত করার আগে, নেটওয়ার্কের কম্পিউটারগুলো (নোড) লেনদেন যাচাই করে। এই যাচাই প্রক্রিয়া Consensus Mechanism (ঐকমত্য পদ্ধতি) এর উপর নির্ভর করে, যেমন:

  • Proof of Work (PoW): কম্পিউটার জটিল গাণিতিক সমস্যা সমাধান করে।
  • Proof of Stake (PoS): স্টেক করা সম্পদের ভিত্তিতে ভ্যালিডেটর নির্বাচিত হয়।

একবার যাচাই ও ঐকমত্য হলে, ব্লকটি স্থায়ীভাবে চেইনে যুক্ত হয়। পুরো সিস্টেমটি কেন্দ্রীয় কর্তৃপক্ষ ছাড়াই স্বচ্ছতা, নিরাপত্তা ও বিশ্বাস নিশ্চিত করে।

Consensus Mechanism এর উদাহরণ

Proof of Work (Python)

python

import hashlib

def proof_of_work(block_data, difficulty=4):
    nonce = 0
    prefix = '0' * difficulty
    while True:
        hash_val = hashlib.sha256(f"{block_data}{nonce}".encode()).hexdigest()
        if hash_val.startswith(prefix):
            return nonce, hash_val
        nonce += 1

nonce, valid_hash = proof_of_work("Block Data: Alice pays Bob 5 BTC")
print(f"Nonce: {nonce}")
print(f"Valid Hash: {valid_hash}")

ব্যাখ্যা:
PoW-তে মাইনাররা একটি নির্দিষ্ট সংখ্যক শূন্য দিয়ে শুরু হওয়া হ্যাশ খুঁজতে কম্পিউটেশনাল কাজ করে। এটি প্রতারণা প্রতিরোধ করে এবং নেটওয়ার্কে ঐকমত্য আনে।

Proof of Stake (Python)

python

import random

def select_validator(stakes):
    total = sum(stakes.values())
    r = random.uniform(0, total)
    cumulative = 0
    for validator, stake in stakes.items():
        cumulative += stake
        if r <= cumulative:
            return validator

validators = {"Alice": 40, "Bob": 30, "Charlie": 30}
selected = select_validator(validators)
print(f"Selected validator: {selected}")

ব্যাখ্যা:
PoS-এ বেশি স্টেক করা নোডের ভ্যালিডেটর হওয়ার সম্ভাবনা বেশি। এটি PoW-এর তুলনায় শক্তি সাশ্রয়ী।


📚 ব্লকচেইনের ভার্সনসমূহ (Versions of Blockchain)

ব্লকচেইনের তিনটি প্রধান ভার্সন রয়েছে:

১. Blockchain 1.0 (Cryptocurrency)

Blockchain 1.0 ২০০৫ সালে Hal Finley প্রবর্তন করেন, যিনি DLT (Distributed Ledger Technology) বাস্তবায়ন করেন। এটি ক্রিপ্টোকারেন্সির উপর ভিত্তি করে প্রথম অ্যাপ্লিকেশন। এই ভার্সনে Bitcoin ব্যবহার করে আর্থিক লেনদেন সম্পন্ন হয়। এটি permissionless, অর্থাৎ যে কেউ বৈধ Bitcoin লেনদেনে অংশ নিতে পারে। মূলত মুদ্রা ও পেমেন্টে ব্যবহৃত হয়।

বৈশিষ্ট্য:

  • স্বচ্ছ, পাবলিক, সম্পূর্ণ বিকেন্দ্রীভূত
  • Immutable ledger
  • কোনো একক মালিকানা নেই
  • মাইনাররা লেজার আপডেট ও রক্ষণাবেক্ষণ করে

Bitcoin লেনদেনের সরল মডেল (Python)

python

class Transaction:
    def __init__(self, sender, receiver, amount):
        self.sender = sender
        self.receiver = receiver
        self.amount = amount

class BitcoinBlockchain:
    def __init__(self):
        self.pending_transactions = []
        self.chain = []  # mined blocks

    def add_transaction(self, tx):
        self.pending_transactions.append(tx)
        print(f"Transaction added: {tx.sender} -> {tx.receiver} : {tx.amount} BTC")

    def mine_pending_transactions(self):
        block = {
            "transactions": self.pending_transactions,
            "previous_hash": "0000abc...",
        }
        self.chain.append(block)
        self.pending_transactions = []
        print("Block mined and added to chain")

# ব্যবহার
btc = BitcoinBlockchain()
btc.add_transaction(Transaction("Alice", "Bob", 5))
btc.add_transaction(Transaction("Bob", "Charlie", 2))
btc.mine_pending_transactions()

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


২. Blockchain 2.0 (Smart Contracts)

Blockchain 2.0 এসেছে ১.০-এর সমস্যা সমাধানে: Bitcoin মাইনিং ছিল অপচয়কর এবং নেটওয়ার্কে Scalability এর অভাব ছিল। নতুন ভার্সনে ব্লকচেইন কেবল ক্রিপ্টোকারেন্সিতে সীমাবদ্ধ নয়, বরং Smart Contracts পর্যন্ত বিস্তৃত।

Smart Contracts হলো ছোট ছোট কম্পিউটার প্রোগ্রাম যা ব্লকের চেইনে বাস করে। এগুলো স্বয়ংক্রিয়ভাবে কার্যকর হয় এবং পূর্বনির্ধারিত শর্ত যাচাই, ভেরিফিকেশন বা প্রয়োগ করে লেনদেনের খরচ কমায়। এই ভার্সনে Bitcoin-এর বদলে Ethereum প্রধান প্ল্যাটফর্ম। Blockchain 2.0 দ্রুত পাবলিক নেটওয়ার্কে উচ্চ সংখ্যক লেনদেন প্রক্রিয়া করতে সক্ষম।

Smart Contract উদাহরণ (Solidity)

solidity

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract SimpleWallet {
    mapping(address => uint256) public balances;

    function deposit() public payable {
        balances[msg.sender] += msg.value;
    }

    function withdraw(uint256 amount) public {
        require(balances[msg.sender] >= amount, "Insufficient balance");
        balances[msg.sender] -= amount;
        payable(msg.sender).transfer(amount);
    }
}

ব্যাখ্যা:
এই স্মার্ট কন্ট্রাক্টে কেউ টাকা জমা দিলে ব্যালেন্স বাড়ে, আর উত্তোলনের সময় চেক করা হয় যথেষ্ট ব্যালেন্স আছে কিনা। কোনো মধ্যস্বত্বভোগী ছাড়াই কন্ট্রাক্টটি নিজে থেকেই চলে।


৩. Blockchain 3.0 (DApps)

Blockchain 3.0 নতুন ভার্সন যা DApps (Decentralized Applications) অন্তর্ভুক্ত করে। একটি DApp অনেকটা সাধারণ অ্যাপের মতোই, তবে এর ফ্রন্টএন্ড যেকোনো ভাষায় লেখা যেতে পারে এবং ব্যাকএন্ড কোড একটি বিকেন্দ্রীভূত Peer-to-Peer Network-এ চলে। এটি বিকেন্দ্রীভূত স্টোরেজ ও কমিউনিকেশন ব্যবহার করে, যেমন Ethereum Swarm। DApp-এর বৈশিষ্ট্য:

  • কোনো একক মালিক বা কর্তৃপক্ষ নেই
  • স্বচ্ছতা, উন্নত নিরাপত্তা, সবার কাছে ডেটা অ্যাক্সেসযোগ্য
  • সেন্সরশিপ নেই, নমনীয় ডেভেলপমেন্ট
  • শূন্য ডাউনটাইম, গোপনীয়তা, ডেটা ইন্টিগ্রিটি

উদাহরণ: BitMessage, BitTorrent, Tor, Popcorn Time ইত্যাদি।

একটি DApp এর আর্কিটেকচার (JavaScript)

javascript

// DApp frontend (React) কল করে backend smart contract
const dApp = {
  frontend: "React",
  backend: "Ethereum Smart Contract",
  storage: "IPFS or Swarm",
  network: "Peer-to-Peer",
  incentive: "Token rewards for users"
};

async function callSmartContract() {
  const response = await fetch('http://localhost:8545', {
    method: 'POST',
    body: JSON.stringify({ method: 'deposit', value: 100 })
  });
  return response.json();
}

console.log(dApp);

ব্যাখ্যা:
DApp-এর ফ্রন্টএন্ড ব্যবহারকারীর সাথে যোগাযোগ করে, কিন্তু ব্যাকএন্ড লজিক চলে স্মার্ট কন্ট্রাক্টে যা ব্লকচেইনে ডিপ্লয় করা থাকে। ডেটা বিকেন্দ্রীভূত স্টোরেজে থাকে।


✅ ব্লকচেইনের সুবিধা (Advantages)

  • তৃতীয় পক্ষ ছাড়া লেনদেন: মধ্যস্বত্বভোগী ছাড়াই লেনদেন হয়, ফলে তথ্য ও ডেটার নিরাপত্তা বাড়ে।
  • ক্রিপ্টোগ্রাফি ব্যবহার: তথ্য ব্লকচেইনে লক থাকে, ফলে অননুমোদিত অ্যাক্সেস কঠিন।
  • ডাবল রেকর্ড দূরীকরণ: ব্লকচেইন ডাবল রেকর্ড সরিয়ে দেয়, ফলে লেনদেন দ্রুত হয়।

❌ ব্লকচেইনের অসুবিধা (Disadvantages)

  • মানবীয় ত্রুটির ঝুঁকি: যতক্ষণ মানুষ জড়িত, ত্রুটির সম্ভাবনা থাকে।
  • উচ্চ লেনদেন খরচ: Bitcoin-এর লেনদেন ফি বেশ বেশি হতে পারে।
  • অপরিবর্তনীয়তা: একবার ডেটা ঢোকানো হলে পরিবর্তন করা যায় না, যা কিছু ক্ষেত্রে সমস্যা হতে পারে।

🔑 ব্লকচেইনের মূল বৈশিষ্ট্য (Key Features)

১. Decentralization (বিকেন্দ্রীকরণ)

কোনো একক মালিক বা কেন্দ্রীয় কর্তৃপক্ষ নেই। ডেটা নেটওয়ার্কের কম্পিউটারগুলোর মধ্যে বিতরণ করা থাকে, ফলে সিস্টেম আরও নির্ভরযোগ্য এবং হ্যাক করা কঠিন।

উদাহরণ (Python – Decentralized Network)

python

class Node:
    def __init__(self, name):
        self.name = name
        self.peers = []
        self.ledger = []

    def connect(self, peer):
        self.peers.append(peer)
        peer.peers.append(self)

    def broadcast(self, block):
        for peer in self.peers:
            peer.receive_block(block)

    def receive_block(self, block):
        self.ledger.append(block)
        print(f"{self.name} received block: {block}")

node1 = Node("Node1")
node2 = Node("Node2")
node1.connect(node2)
node1.broadcast("Block #1")

ব্যাখ্যা:
প্রতিটি নোডের নিজস্ব লেজার কপি থাকে এবং সরাসরি যোগাযোগ করে। কোনো সেন্ট্রাল সার্ভার নেই।

২. Transparency (স্বচ্ছতা)

নেটওয়ার্কের সবাই লেনদেনের ইতিহাস দেখতে পায়। কেউ গোপনে রেকর্ড পরিবর্তন করতে পারে না, এতে বিশ্বাস তৈরি হয়।

৩. Immutability (অপরিবর্তনীয়তা)

একবার ডেটা ব্লকচেইনে যুক্ত হলে তা পরিবর্তন বা মুছে ফেলা যায় না। এটি টেম্পারিং প্রতিরোধ করে এবং রেকর্ড সঠিক ও স্থায়ী রাখে।

Immutability যাচাই (Python)

python

import hashlib

def verify_chain(chain):
    for i in range(1, len(chain)):
        current = chain[i]
        previous = chain[i-1]
        if current.previous_hash != previous.hash:
            return False
        if current.calculate_hash() != current.hash:
            return False
    return True

# block1 data পরিবর্তন
block1.data = "hacked data"
print(verify_chain(my_blockchain.chain))  # False

ব্যাখ্যা:
যদি কোনো ব্লকের ডেটা বদলানো হয়, তার হ্যাশ বদলে যায় এবং আগের ব্লকের সাথে মিলবে না।

৪. Security (নিরাপত্তা)

ব্লকচেইন শক্তিশালী এনক্রিপশন ব্যবহার করে ডেটা সুরক্ষিত করে। প্রতিটি ব্লক আগের ব্লকের সাথে যুক্ত থাকায় তথ্য পরিবর্তন করা প্রায় অসম্ভব।

Cryptographic Hash ব্যবহার (Python)

python

import hashlib

def secure_hash(data):
    return hashlib.sha256(data.encode()).hexdigest()

data = "Transaction: Alice -> Bob 5 BTC"
print(secure_hash(data))

ব্যাখ্যা:
ক্রিপ্টোগ্রাফিক হ্যাশ ফাংশন ডেটাকে একটি নির্দিষ্ট দৈর্ঘ্যের ইউনিক মানে রূপান্তর করে, যা টেম্পারিং সনাক্ত করে।

৫. Consensus (ঐকমত্য)

নতুন লেনদেন যুক্ত হওয়ার আগে নেটওয়ার্কের বেশিরভাগ কম্পিউটারকে সম্মত হতে হয় যে লেনদেনটি বৈধ। এই প্রক্রিয়া সিস্টেমকে সৎ ও ত্রুটিমুক্ত রাখে।

Consensus সিমুলেশন (Python)

python

def consensus(nodes):
    votes = {}
    for node in nodes:
        votes[node.proposed_state] = votes.get(node.proposed_state, 0) + 1
    max_votes = max(votes.values())
    for state, count in votes.items():
        if count == max_votes:
            return state

class Node:
    def __init__(self, state):
        self.proposed_state = state

nodes = [Node("Valid"), Node("Valid"), Node("Invalid")]
agreed = consensus(nodes)
print(f"Consensus: {agreed}")  # "Valid"

ব্যাখ্যা:
সংখ্যাগরিষ্ঠ নোডের সম্মতিতে সিদ্ধান্ত হয়, ফলে প্রতারণা বা ত্রুটি এড়ানো যায়।


📝 এক্সারসাইজ (হিন্টসহ)

Exercise 1: Block এবং Blockchain ক্লাস ইমপ্লিমেন্ট করো

কাজ: Python-এ Block এবং Blockchain ক্লাস লেখো, যেখানে add_block মেথড থাকবে। জেনেসিস ব্লকসহ ৩টি ব্লক যোগ করো এবং প্রতিটি ব্লকের হ্যাশ প্রিন্ট করো।

হিন্ট:

  • hashlib.sha256 ব্যবহার করো।
  • previous_hash আগের ব্লকের হ্যাশ নেবে।
  • জেনেসিসের previous_hash হবে "0"।

Exercise 2: Proof of Work ফাংশন লেখো

কাজ: একটি ফাংশন লেখো যা ডেটা এবং ডিফিকাল্টি প্যারামিটার নেবে এবং এমন nonce খুঁজে বের করবে যাতে হ্যাশ নির্দিষ্ট সংখ্যক শূন্য দিয়ে শুরু হয়।

হিন্ট:

  • while লুপ চালাও।
  • startswith("0" * difficulty) চেক করো।

Exercise 3: Smart Contract (Solidity) লেখো

কাজ: একটি Solidity কন্ট্রাক্ট লেখো যা একটি সংখ্যা সংরক্ষণ করতে পারে (set) এবং পড়তে পারে (get)।

হিন্ট:

  • uint256 private data; ব্যবহার করো।
  • set ফাংশনে মান সেট করো, get ফাংশনে রিটার্ন করো।

Exercise 4: DApp সিমুলেট করো (JavaScript)

কাজ: একটি সাধারণ DApp অবজেক্ট তৈরি করো যাতে frontend, backend, storage প্রপার্টি থাকবে এবং callBackend() মেথড থাকবে যা একটি প্রমিস রিটার্ন করে।

হিন্ট:

  • async ফাংশন ব্যবহার করো।
  • fetch ব্যবহার করে একটি API কল সিমুলেট করো।

Exercise 5: Consensus Voting সিমুলেশন

কাজ: ৫টি নোডের মধ্যে ৩টি “Valid” এবং ২টি “Invalid” প্রস্তাব দিলে সংখ্যাগরিষ্ঠের ভিত্তিতে বিজয়ী নির্ধারণ করো।

হিন্ট:

  • dict ব্যবহার করে ভোট গুনো।
  • সর্বোচ্চ ভোটের প্রস্তাব রিটার্ন করো।

Exercise 6: Immutability টেস্ট

কাজ: একটি ব্লকচেইন তৈরি করো, একটি ব্লকের ডেটা পরিবর্তন করো এবং একটি verify_chain ফাংশন দিয়ে যাচাই করো যে চেইনটি ভেঙেছে কিনা।

হিন্ট:

  • প্রতিটি ব্লকের হ্যাশ পুনরায় হিসাব করো।
  • previous_hash মিলছে কিনা চেক করো।

🧭 সমাধানের পথনির্দেশনা

  1. প্রথমে ব্লক স্ট্রাকচার ঠিক করো: ব্লকে কী কী ফিল্ড থাকবে (index, timestamp, data, previous_hash, hash, nonce)।
  2. হ্যাশ ফাংশন আলাদা করো: hashlib.sha256 ব্যবহার করে একটি ফাংশন লেখো।
  3. জেনেসিস ব্লক বানাও: প্রথম ব্লকের previous_hash হবে "0"।
  4. ভ্যালিডেশন ফাংশন যোগ করো: প্রতিটি ব্লকের হ্যাশ ও previous_hash মিলছে কিনা পরীক্ষা করো।
  5. কনসেনসাস যুক্ত করো: সহজ PoW প্রথমে ইমপ্লিমেন্ট করো; পরে PoS দেখতে পারো।
  6. স্মার্ট কন্ট্রাক্ট লিখে ডিপ্লয় করো: Ethereum টেস্টনেট ব্যবহার করতে পারো (যেমন Sepolia)।
  7. DApp আর্কিটেকচার বুঝে ফ্রন্টএন্ড ও ব্যাকএন্ড সংযোগ করো: Web3.js বা ethers.js ব্যবহার করো।
  8. টেস্ট করো: ব্লকের ডেটা পরিবর্তন করে দেখো চেইন ভেঙে যায় কিনা; কনসেনসাস সঠিক কাজ করছে কিনা।

📚 সারসংক্ষেপ

ব্লকচেইন একটি বিপ্লবী প্রযুক্তি যা লেনদেনের ডিজিটাল রেকর্ডকে নিরাপদ, স্বচ্ছ ও বিকেন্দ্রীভূতভাবে সংরক্ষণ করে। এর তিনটি ভার্সন—১.০ (ক্রিপ্টোকারেন্সি), ২.০ (স্মার্ট কন্ট্রাক্ট), ৩.০ (ডিঅ্যাপ)—প্রযুক্তিটির ক্রমবিবর্তন দেখায়। Decentralization, Transparency, Immutability, Security এবং Consensus এর মতো বৈশিষ্ট্যগুলো একে অনন্য করে তুলেছে। প্রোগ্রামার হিসেবে এই মৌলিক ধারণাগুলো আয়ত্ত করা ভবিষ্যতের ব্লকচেইন ডেভেলপমেন্টের প্রথম ধাপ। উপরের সিনট্যাক্স ও এক্সারসাইজগুলো অনুশীলন করলে আপনি ব্লকচেইনের ভিত্তি মজবুত করতে পারবেন।


এই পোস্টটি ToLearnTeam.com-এ প্রকাশের জন্য প্রস্তুত।
কোনো অংশ আরও বিস্তারিত করতে চাইলে জানাতে পারেন।

The post ব্লকচেইন কী, কিভাবে কাজ করে এবং ১.০, ২.০, ৩.০ ভার্সন – সম্পূর্ণ বাংলা গাইড appeared first on To Learn Team.

]]>
লিনাক্স সার্ভার কনফিগারেশন পার্ট-৩: SSH Key-Based Authentication ও সার্ভার হার্ডেনিং https://tolearnteam.com/linux-ssh-key-authentication-server-hardening-bangla/ Tue, 04 Aug 2026 16:04:26 +0000 http://tolearnteam.com/?p=2034 পাসওয়ার্ড দিয়ে SSH লগইন করা হলো বাড়ির দরজায় তালা না দিয়ে চিরকুটে পাসওয়ার্ড লিখে রাখার মতো। Brute-force অ্যাটাক দিয়ে যেকোনো সময় হ্যাক হতে পারে। সমাধান: SSH Key। প্রয়োজনীয় প্যাকেজ: openssh-server, openssh-client, fail2ban Step…

The post লিনাক্স সার্ভার কনফিগারেশন পার্ট-৩: SSH Key-Based Authentication ও সার্ভার হার্ডেনিং appeared first on To Learn Team.

]]>
পাসওয়ার্ড দিয়ে SSH লগইন করা হলো বাড়ির দরজায় তালা না দিয়ে চিরকুটে পাসওয়ার্ড লিখে রাখার মতো। Brute-force অ্যাটাক দিয়ে যেকোনো সময় হ্যাক হতে পারে। সমাধান: SSH Key।

প্রয়োজনীয় প্যাকেজ: openssh-server, openssh-client, fail2ban

Step 1: SSH Key Pair তৈরি করা – ssh-keygen

আপনার লোকাল পিসি/ল্যাপটপ থেকে রান করুন, সার্ভারে না:

Bash

ssh-keygen -t ed25519 -C "tolearn@my-laptop"

ব্যাখ্যা:

  • -t ed25519: সবচেয়ে সিকিউর ও আধুনিক অ্যালগরিদম। RSA এর চেয়ে ভালো
  • -C: কমেন্ট, কোন মেশিনের কী সেটা বোঝার জন্য

এন্টার চাপলে এটি ২টি ফাইল তৈরি করবে:

/home/your-user/.ssh/
├── id_ed25519 # Private Key: এটা TOP SECRET, কাউকে দেবেন না
└── id_ed25519.pub # Public Key: এটা সার্ভারে দিতে হবে

Special Instruction: Passphrase চাইলে খালি রাখতে পারেন, তবে Passphrase দিলে আরও সিকিউর।

Step 2: সার্ভারে Public Key কপি করা – ssh-copy-id

এটাই সবচেয়ে সহজ উপায়। tolearn ইউজার দিয়ে সার্ভারে লগইন করার জন্য:

Bash

ssh-copy-id tolearn@10.0.0.1

সার্ভারের পাসওয়ার্ড ১ বার চাইবে। এরপর থেকে আর লাগবে না।

Manual পদ্ধতি যদি ssh-copy-id না থাকে:

Bash

cat ~/.ssh/id_ed25519.pub | ssh tolearn@10.0.0.1 "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

সার্ভারে যে ডিরেক্টরি ও ফাইল তৈরি হবে:

/home/tolearn/.ssh/
└── authorized_keys # পারমিশন 600 হতে হবে

চেক করুন: chmod 700 ~/.ssh এবং chmod 600 ~/.ssh/authorized_keys

কেন এবং কীভাবে কাজ করে:

1. সিনারিও:

আপনার ল্যাপটপ = 192.168.1.100 <– এখান থেকে কমান্ড দেবেন
সার্ভার VM-Alpha = 10.0.0.1 <– এখানে key যাবে

2. স্টেপ-বাই-স্টেপ:

Step-A: আপনার ল্যাপটপ/পিসিতে Key বানান

আপনার উইন্ডোজ/লিনাক্স/ম্যাক ল্যাপটপের টার্মিনালে

ssh-keygen -t ed25519 -C "my-laptop"

এটা ~/.ssh/id_ed25519.pub ফাইল বানাবে আপনার ল্যাপটপে।

Step-B: ল্যাপটপ থেকেই Key সার্ভারে পাঠান

আবার আপনার ল্যাপটপ থেকেই রান করুন

ssh-copy-id tolearn@10.0.0.1

এটা প্রথমবার tolearn ইউজারের পাসওয়ার্ড চাইবে। দেওয়ার পর আপনার ল্যাপটপের id_ed25519.pub ফাইলটি সার্ভারের /home/tolearn/.ssh/authorized_keys ফাইলে কপি হয়ে যাবে।

Step-C: টেস্ট করুন – ল্যাপটপ থেকে

Bash

ssh tolearn@10.0.0.1

এবার আর পাসওয়ার্ড চাইবে না।

গুরুত্বপূর্ণ ৩টি পয়েন্ট:

প্রশ্নউত্তর
কমান্ড কোথায় রান করব?আপনার লোকাল পিসি/ল্যাপটপে। যেখান থেকে সার্ভারে লগইন করতে চান।
সার্ভারে রান করলে কী হবে?এরর দেবে। কারণ সার্ভারের পাবলিক কী আপনার ল্যাপটপে পাঠানোর দরকার নেই।
Windows হলে কী করব?Windows 10/11 এ PowerShell বা Git Bash ওপেন করে একই কমান্ড। ssh-keygen ও ssh-copy-id এখন বিল্ট-ইন থাকে।

সহজ মনে রাখার ট্রিক:
ssh-copy-id = “আমার ID/চাবি কপি করে সার্ভারে দাও”। তাই চাবি যার কাছে আছে, কমান্ড সে দেবে। চাবি আপনার ল্যাপটপে আছে, তাই ল্যাপটপ থেকে কমান্ড দেবেন।

Step 3: টেস্ট করুন: পাসওয়ার্ড ছাড়া লগইন

Bash

ssh tolearn@10.0.0.1

ব্যস, পাসওয়ার্ড ছাড়াই লগইন হয়ে যাবে!

Step 4: সার্ভার হার্ডেনিং – /etc/ssh/sshd_config

সতর্কতা: এই ফাইল এডিট করার আগে অবশ্যই আরেকটি SSH সেশন খোলা রাখুন। ভুল হলে লকআউট হয়ে যাবেন।

Bash

sudo nano /etc/ssh/sshd_config

এই ৫টি লাইন মাস্ট চেঞ্জ করুন:

Port 2222 # 1. ডিফল্ট 22 পোর্ট চেঞ্জ করুন
PermitRootLogin no # 2. root দিয়ে ডিরেক্ট লগইন বন্ধ
PasswordAuthentication no # 3. পাসওয়ার্ড লগইন সম্পূর্ণ বন্ধ
PubkeyAuthentication yes # 4. শুধু Key দিয়ে লগইন Allow
AllowUsers tolearn developer # 5. শুধু এই ইউজাররা লগইন করতে পারবে

সেভ করে SSH রিস্টার্ট দিন:

Bash

sudo systemctl restart sshd

নতুন পোর্ট দিয়ে লগইন:

Bash

ssh -p 2222 tolearn@10.0.0.1

Step 5: Fail2Ban দিয়ে Brute-Force অ্যাটাক বন্ধ করা

কেউ বারবার ভুল পাসওয়ার্ড দিলে তার IP অটো ব্যান হয়ে যাবে।

১. ইনস্টল:

Bash

sudo apt update && sudo apt install fail2ban -y

২. কনফিগারেশন কপি করুন:

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local

৩. [sshd] সেকশন এডিট করুন:

[sshd]
enabled = true
port = 2222
maxretry = 3
bantime = 1h
findtime = 10m

ব্যাখ্যা: 10 মিনিটে 3 বার ভুল করলে 1 ঘন্টার জন্য ব্যান।

৪. রিস্টার্ট ও স্ট্যাটাস চেক:

sudo systemctl restart fail2ban
sudo fail2ban-client status sshd

Step 6: বোনাস হার্ডেনিং টিপস

  1. UFW Firewall: শুধু দরকারি পোর্ট খুলুন।

sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 2222/tcp
sudo ufw enable

  1. Automatic Updates: সিকিউরিটি প্যাচ অটো ইনস্টল।

sudo apt install unattended-upgrades -y
sudo dpkg-reconfigure unattended-upgrades


3. সিরিজের পরবর্তী পর্ব

Part-4: লিনাক্স ওয়েব সার্ভার সেটআপ – Nginx/Apache, PHP, MySQL – tolearn ইউজার দিয়ে একটি সম্পূর্ণ ওয়েবসাইট হোস্ট করা শিখব।

ssh-copy-id tolearn@10.0.0.1 কাজ না করার ৭টা কমন কারণ + সমাধান দিচ্ছি। ৯০% কেস এগুলোর মধ্যেই পড়ে।

Troubleshooting: ssh-copy-id কাজ না করলে কী করবেন

1. প্রথমে বেসিক চেক: ping ও ssh চলে কিনা

আপনার ল্যাপটপ থেকে:

Bash

ping 10.0.0.1
ssh tolearn@10.0.0.1

যদি ssh পাসওয়ার্ড দিয়ে লগইন না হয়, তাহলে ssh-copy-id ও হবে না। আগে ssh ঠিক করুন।

Error: Connection refused → সার্ভারে SSH ইনস্টল নেই।
সমাধান – সার্ভারে লগইন করে:

Bash

sudo apt update && sudo apt install openssh-server -y
sudo systemctl enable ssh --now
sudo systemctl status ssh

2. Error: Permission denied (publickey,password)

কারণ: সার্ভারের /etc/ssh/sshd_config এ PasswordAuthentication no করা আছে।
সমাধান: সাময়িকভাবে পাসওয়ার্ড লগইন চালু করুন।

সার্ভারে:

Bash

sudo nano /etc/ssh/sshd_config

এই লাইন খুঁজে চেঞ্জ করুন:

Bash

PasswordAuthentication yes

সেভ করে রিস্টার্ট:

Bash

sudo systemctl restart sshd

এখন ল্যাপটপ থেকে আবার ssh-copy-id দিন। হয়ে গেলে PasswordAuthentication no করে দিন।

3. Error: ssh: connect to host 10.0.0.1 port 22: Connection timed out

কারণ ১: IP ভুল অথবা সার্ভার বন্ধ
ip a দিয়ে সার্ভারের IP চেক করুন।

কারণ ২: Firewall ব্লক করছে
সার্ভারে:

Bash

sudo ufw allow 22/tcp
sudo ufw reload

কারণ ৩: পোর্ট 22 না, অন্য পোর্ট
আপনি যদি Part-3 অনুযায়ী পোর্ট 2222 করে থাকেন:

Bash

ssh-copy-id -p 2222 tolearn@10.0.0.1

4. Error: /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: .../.ssh/id_ed25519.pub does not exist

কারণ: আপনার ল্যাপটপে key বানানোই হয়নি।
সমাধান – ল্যাপটপে:

Bash

ssh-keygen -t ed25519 -C "my-laptop"

এন্টার চাপতে থাকুন। তারপর আবার ssh-copy-id দিন।

5. Error: WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!

কারণ: আপনি সার্ভার রি-ইনস্টল করেছেন, তাই fingerprint মিলছে না।
সমাধান – ল্যাপটপে:

Bash

ssh-keygen -R 10.0.0.1

এটা পুরনো key মুছে দেবে। তারপর আবার ট্রাই করুন।

6. Windows এ ssh-copy-id command not found

সমাধান ১: PowerShell এ ম্যানুয়ালি করুন

powershell

type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh tolearn@10.0.0.1 "cat >> .ssh/authorized_keys"

সমাধান ২: Git Bash ব্যবহার করুন – Git Bash এ ssh-copy-id কাজ করে।

7. ১০০% কাজ করবে এমন ম্যানুয়াল পদ্ধতি

যদি ssh-copy-id কোনোভাবেই কাজ না করে:

Step-1: ল্যাপটপে public key দেখুন

Bash

cat ~/.ssh/id_ed25519.pub

পুরো আউটপুট কপি করুন। ssh-ed25519 AAAAC3... my-laptop এর মতো হবে।

Step-2: সার্ভারে পাসওয়ার্ড দিয়ে লগইন করুন

Bash

ssh tolearn@10.0.0.1

Step-3: সার্ভারে key পেস্ট করুন

Bash

mkdir -p ~/.ssh
nano ~/.ssh/authorized_keys

কপি করা key টা পেস্ট করে Ctrl+O, Enter, Ctrl+X দিয়ে সেভ করুন।

Step-4: পারমিশন ঠিক করুন – এটা মাস্ট

Bash

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

Step-5: ল্যাপটপ থেকে টেস্ট

Bash

exit  # সার্ভার থেকে বের হনssh tolearn@10.0.0.1

এখন পাসওয়ার্ড ছাড়া লগইন হবে।


Quick Debug Checklist:

  1. ping 10.0.0.1 চলে?
  2. ssh tolearn@10.0.0.1 পাসওয়ার্ড দিয়ে ঢোকে?
  3. সার্ভারে sudo systemctl status ssh active?
  4. ls ~/.ssh/id_ed25519.pub ফাইল আছে?
  5. পোর্ট 22 নাকি অন্য কিছু? sudo ss -tulpn | grep sshd

ed25519 vs rsa – কোনটা ব্যবহার করবেন?

Key Typeকমান্ডসাইজসিকিউরিটিস্পিডরেকমেন্ডেশন
ed25519ssh-keygen -t ed25519256 bitসবচেয়ে বেশিসবচেয়ে ফাস্ট2026 এটাই বেস্ট
rsassh-keygen -t rsa -b 40964096 bitঅনেক বেশিস্লোপুরনো সার্ভারের জন্য
ecdsassh-keygen -t ecdsa256 bitভালোফাস্টএখন আর ইউজ হয় না
dsassh-keygen -t dsa1024 bitদুর্বলস্লোব্যবহার নিষেধ

1. ed25519 কেন বেস্ট?

  1. ছোট সাইজ: Key মাত্র 68 ক্যারেক্টার, RSA 4096-bit হয় 800+ ক্যারেক্টার
  2. ফাস্ট: লগইন, সাইন করতে সময় কম লাগে
  3. সিকিউর: 256-bit ed25519 = 3072-bit RSA এর সমান সিকিউরিটি
  4. Modern: OpenSSH 6.5+ এ ডিফল্ট। এখন সব সার্ভার সাপোর্ট করে

2. কখন rsa ব্যবহার করবেন?

যদি আপনার সার্ভার খুব পুরনো হয় – যেমন Ubuntu 14.04, CentOS 6। সেগুলো ed25519 সাপোর্ট করে না।

RSA Key বানানোর কমান্ড:

Bash

ssh-keygen -t rsa -b 4096 -C "my-laptop"

-b 4096 মাস্ট দেবেন। 2048 এখন দুর্বল।

3. ssh-copy-id সব টাইপেই কাজ করে

আপনি যে টাইপের key ই বানান, কমান্ড একই:

Bash

ssh-copy-id tolearn@10.0.0.1

এটা অটো ~/.ssh/id_ed25519.pub অথবা ~/.ssh/id_rsa.pub যেটা পাবে সেটা কপি করবে।

স্পেসিফিক ফাইল দিতে চাইলে:

Bash

ssh-copy-id -i ~/.ssh/id_rsa.pub tolearn@10.0.0.1

4. চেক করুন সার্ভার কোনটা সাপোর্ট করে

সার্ভারে লগইন করে:

Bash

ssh -Q key

আউটপুটে ssh-ed25519 থাকলে → ed25519 সাপোর্টেড।

সারসংক্ষেপ: আপনি কোনটা ইউজ করবেন?

আপনার সার্ভার যদি 2020 এর পরের হয় → ed25519 ইউজ করুন:

Bash

ssh-keygen -t ed25519 -C "tolearn-laptop"

যদি “Key type not supported” Error দেয় → rsa ইউজ করুন:

Bash

ssh-keygen -t rsa -b 4096 -C "tolearn-laptop"

ed25519 ফিক্সড না, কিন্তু 2026 এ এটাই ইন্ডাস্ট্রি স্ট্যান্ডার্ড। dsa বাদে বাকি সব চলবে।


cat is not recognized Error মানে আপনি Windows এর Command Prompt বা PowerShell এ আছেন। লিনাক্সের কমান্ড Windows এ সরাসরি চলে না।

সমাধান: আপনি কোন OS এ আছেন তার উপর নির্ভর করে

Case 1: আপনার ল্যাপটপ Windows, সার্ভার Linux

এটাই সবচেয়ে কমন কেস। ssh-keygen আর ssh-copy-id আপনার Windows ল্যাপটপে রান করবেন।

Windows এ cat এর বদলে type ব্যবহার করুন:

১. Public Key দেখতে:

powershell

type %USERPROFILE%\.ssh\id_ed25519.pub

ব্যাখ্যা: %USERPROFILE% = C:\Users\YourName। এটা cat ~/.ssh/id_ed25519.pub এর Windows ভার্সন।

২. ssh-copy-id Windows এ নেই। তাই ম্যানুয়ালি করুন:

Step-A: Key কপি করুন

powershell

type %USERPROFILE%\.ssh\id_ed25519.pub

পুরো ssh-ed25519 AAAAC3... user@DESKTOP লাইনটা কপি করুন।

Step-B: সার্ভারে লগইন করুন

powershell

ssh tolearn@10.0.0.1

Step-C: সার্ভারের ভিতর পেস্ট করুন

Bash

mkdir -p ~/.sshecho "ssh-ed25519 AAAAC3... user@DESKTOP" >> ~/.ssh/authorized_keyschmod 700 ~/.sshchmod 600 ~/.ssh/authorized_keysexit

echo "..." এর ভিতর আপনার কপি করা key পেস্ট করবেন।

Step-D: টেস্ট করুন – Windows থেকে

powershell

ssh tolearn@10.0.0.1

এখন পাসওয়ার্ড ছাড়া ঢুকবে।

Case 2: Windows এ লিনাক্স কমান্ড চালাতে চান

Option 1: Git Bash ব্যবহার করুন
Git ইনস্টল করলে Git Bash পাবেন। ওটা খুললে cat, ls, ssh-keygen, ssh-copy-id সব চলবে। লিনাক্সের মতোই।

Option 2: PowerShell এ OpenSSH
Windows 10/11 এ বিল্ট-ইন আছে। PowerShell ওপেন করে ssh-keygen দিন। cat এর বদলে Get-Content বা type ইউজ করুন।

Option 3: WSL ব্যবহার করুন
wsl --install দিয়ে Ubuntu ইনস্টল করলে পুরো লিনাক্স টার্মিনাল পাবেন।

কুইক চিটশিট: Windows vs Linux কমান্ড

কাজLinux/MacWindows CMDWindows PowerShell
ফাইল দেখাcat file.txttype file.txtGet-Content file.txt বা type file.txt
ফোল্ডার লিস্টls -ladirls বা dir
হোম ডিরেক্টরি~ বা \$HOME%USERPROFILE%\$HOME বা \$env:USERPROFILE

সারসংক্ষেপ: cat Error মানে আপনি Windows এ। type %USERPROFILE%\.ssh\id_ed25519.pub দিয়ে key দেখুন, তারপর ম্যানুয়ালি সার্ভারে পেস্ট করুন।

The post লিনাক্স সার্ভার কনফিগারেশন পার্ট-৩: SSH Key-Based Authentication ও সার্ভার হার্ডেনিং appeared first on To Learn Team.

]]>
লিনাক্স সার্ভার কনফিগারেশন পার্ট-২: ফাইল পারমিশন ও ACL মাস্টারক্লাস https://tolearnteam.com/linux-file-permission-acl-bangla-tutorial/ Tue, 04 Aug 2026 16:02:15 +0000 http://tolearnteam.com/?p=2031 Part-1 এ আমরা tolearn ইউজার বানিয়েছি। কিন্তু সে কোন ফাইল পড়তে পারবে, কোনটা এডিট করতে পারবে? সেটা ঠিক করে দেয় ফাইল পারমিশন। ভুল পারমিশন = হ্যাক হওয়ার রাস্তা খুলে দেওয়া। প্রয়োজনীয় প্যাকেজ: coreutils এবং acl – sudo…

The post লিনাক্স সার্ভার কনফিগারেশন পার্ট-২: ফাইল পারমিশন ও ACL মাস্টারক্লাস appeared first on To Learn Team.

]]>
Part-1 এ আমরা tolearn ইউজার বানিয়েছি। কিন্তু সে কোন ফাইল পড়তে পারবে, কোনটা এডিট করতে পারবে? সেটা ঠিক করে দেয় ফাইল পারমিশন। ভুল পারমিশন = হ্যাক হওয়ার রাস্তা খুলে দেওয়া।

প্রয়োজনীয় প্যাকেজ: coreutils এবং acl – sudo apt install acl দিয়ে ACL ইনস্টল করুন।

Step 1: বেসিক পারমিশন বোঝা – ls -l

যেকোনো ফাইলের পারমিশন দেখুন:

Bash

ls -l /var/www/project/index.php

আউটপুট: -rwxr-xr-- 1 tolearn www-data 2048 Aug 4 22:00 index.php

ব্যাখ্যা:

অংশমানে
-ফাইল, d হলে ডিরেক্টরি
rwxOwner tolearn এর পারমিশন: Read, Write, Execute
r-xGroup www-data এর পারমিশন: Read, Execute
r--Others এর পারমিশন: শুধু Read

Numeric Value: r=4, w=2, x=1। তাই rwx = 7, r-x = 5, r-- = 4। rwxr-xr-- মানে 754।

Step 2: পারমিশন পরিবর্তন – chmod

সবচেয়ে কমন পারমিশন:

Bash

chmod u+x script.sh  # User/Owner কে Execute পারমিশন দিন
chmod g-w file.txt   # Group থেকে Write পারমিশন কেড়ে নিন
chmod o=r file.txt   # Others কে শুধু Read পারমিশন দিন

Symbolic Way:

chmod u+x script.sh # User/Owner কে Execute পারমিশন দিন
chmod g-w file.txt # Group থেকে Write পারমিশন কেড়ে নিন
chmod o=r file.txt # Others কে শুধু Read পারমিশন দিন

Step 3: মালিকানা পরিবর্তন – chown ও chgrp

ফাইলের মালিক ও গ্রুপ চেঞ্জ:

Bash

sudo chown tolearn:www-data /var/www/project/index.php

ব্যাখ্যা: tolearn হলো নতুন Owner, www-data হলো নতুন Group।

শুধু গ্রুপ চেঞ্জ:

Bash

sudo chgrp developers /var/www/project/

Step 4: স্পেশাল পারমিশন – setuid, setgid, sticky bit

এগুলো অ্যাডভান্সড সিকিউরিটির জন্য।

১. setuid 4xxx: ফাইলটি যে Owner-এর, তার পারমিশন নিয়ে রান হবে। passwd কমান্ড এভাবে কাজ করে।

Bash

sudo chmod 4755 /usr/bin/program

২. setgid 2xxx: ফোল্ডারে নতুন ফাইল তৈরি হলে Parent ফোল্ডারের গ্রুপ পাবে। শেয়ার্ড ফোল্ডারের জন্য দরকারি।

Bash

sudo chmod 2775 /var/www/shared_project/

৩. sticky bit 1xxx: /tmp ফোল্ডারে থাকে। ইউজার শুধু নিজের ফাইল ডিলিট করতে পারবে।

Bash

sudo chmod 1777 /tmp

Step 5: ACL – Access Control List: আসল ক্ষমতা

chmod দিয়ে শুধু 3 ধরনের ইউজার কন্ট্রোল করা যায়। কিন্তু যদি tolearn ইউজারকে রিড আর developer ইউজারকে রাইট দিতে চান? তখন লাগবে ACL।

১. ACL চেক করা:

Bash

getfacl /var/www/project/index.php

২. নির্দিষ্ট ইউজারকে পারমিশন দেওয়া:

Bash

sudo setfacl -m u:developer:rw /var/www/project/index.php

ব্যাখ্যা: developer ইউজারকে Read+Write দিলাম, অথচ ফাইলের Owner tolearn ই আছে।

৩. নির্দিষ্ট গ্রুপকে পারমিশন দেওয়া:

Bash

sudo setfacl -m g:testers:r /var/www/project/

৪. ACL মুছে ফেলা:

Bash

sudo setfacl -b /var/www/project/index.php

Step 6: ডিরেক্টরি স্ট্রাকচার ও বেস্ট প্র্যাকটিস

ওয়েব সার্ভারের জন্য রেকমেন্ডেড পারমিশন:

/var/www/ root:root 755
└── project/ tolearn:www-data 755
├── index.php tolearn:www-data 644
├── uploads/ www-data:www-data 775 + setgid
└── config.php tolearn:www-data 640 # Others পড়তে পারবে না

গোল্ডেন রুল:

  1. ফোল্ডার: 755, ফাইল: 644
  2. কনফিগ ফাইল: 640 বা 600
  3. কখনোই 777 পারমিশন দেবেন না।

3. সিরিজের পরবর্তী পর্ব

Part-3: SSH Key-Based Authentication ও সার্ভার হার্ডেনিং – পাসওয়ার্ড ছাড়া সিকিউর লগইন এবং root লগইন বন্ধ করা শিখব।

The post লিনাক্স সার্ভার কনফিগারেশন পার্ট-২: ফাইল পারমিশন ও ACL মাস্টারক্লাস appeared first on To Learn Team.

]]>