আমি কীভাবে কেবল এসএসএইচপ ব্যবহারকারীদের তাদের বাড়িতে প্রবেশ করতে পারি?


123

আমি আমার সার্ভারে একটি ক্লায়েন্টকে অ্যাক্সেস দিতে চাই, তবে আমি সেই ব্যবহারকারীদের তাদের হোম ডিরেক্টরিতে সীমাবদ্ধ রাখতে চাই। আমি দেখতে চাইলে যে কোনও ফাইল বাঁধতে পারে।

আমি কল করা একটি ব্যবহারকারী তৈরি করেছি bobএবং তাকে নতুন একটি গ্রুপে যুক্ত করেছি sftponly। তাদের একটি হোম ডিরেক্টরি রয়েছে /home/bob। আমি /bin/falseএসএসএইচ লগইন বন্ধ করতে তাদের শেল পরিবর্তন করেছি । এখানে তাদের /etc/passwdলাইন:

bob:x:1001:1002::/home/bob:/bin/false

আমি /etc/ssh/sshd_configনিম্নলিখিতগুলি অন্তর্ভুক্ত করতে পরিবর্তন করেছি :

Match Group sftponly
        ChrootDirectory /home/%u
        ForceCommand internal-sftp
        AllowTcpForwarding no

আমি যখন তাদের হিসাবে লগ ইন করার চেষ্টা করি তখন আমি যা দেখছি তা এখানে

$ sftp bob@server
bob@server's password: 
Write failed: Broken pipe
Couldn't read packet: Connection reset by peer

যদি আমি ChrootDirectoryলাইনটিতে মন্তব্য করতে পারি তবে আমি এসএফটিপি করতে পারি তবে তারপরে তাদের সার্ভারের উপর নিখরচায় লাগাম রয়েছে। আমি খুঁজে পেয়েছি যে ChrootDirectory /homeকাজ করে, তবে এটি তাদের যে কোনও হোম ডিরেক্টরিতে অ্যাক্সেস দেয়। আমি স্পষ্টভাবে চেষ্টা করেছি ChrootDirectory /home/bobকিন্তু এটিও কাজ করে না।

আমি কি ভুল করছি? আমি কিভাবে সীমিত করতে পারেন bobকরতে /home/bob/?

---- সম্পাদনা -----

ঠিক আছে তাই আমি এটি একবার /var/log/auth.logদেখেছিলাম এবং এটি দেখেছি:

May  9 14:45:48 nj sshd[5074]: pam_unix(sshd:session): session opened for user bob by (uid=0)
May  9 14:45:48 nj sshd[5091]: fatal: bad ownership or modes for chroot directory component "/home/bob/"
May  9 14:45:48 nj sshd[5074]: pam_unix(sshd:session): session closed for user bob

আমি সেখানে পুরোপুরি নিশ্চিত নই যে এটি ব্যবহারকারীর ডিরেক্টরিতে কিছু ভুল আছে is এখানে ls -h /homeফলাফল:

drwxr-xr-x 26 oli      oli      4096 2012-01-19 17:19 oli
drwxr-xr-x  3 bob      bob      4096 2012-05-09 14:11 bob

2
আমি বিশ্বাস করি ChrootDirectory /home/%uযে প্রতিস্থাপন করা যেতে পারে ChrootDirectory %h
ফ্রাঙ্ক ডারননকোর্ট

উত্তর:


119

এই সমস্ত ব্যথা এখানে বর্ণিত বেশ কয়েকটি সুরক্ষা সমস্যার জন্য ধন্যবাদ । মূলত chroot ডিরেক্টরি মালিকানাধীন হতে হবে rootএবং কোনও গ্রুপ-লেখার অ্যাক্সেস হতে পারে না। বাহ। সুতরাং আপনি মূলত একটি হোল্ডিং কোষে আপনার chroot চালু করতে হবে ও তাতে থাকা যে আপনি আপনার সম্পাদনাযোগ্য বিষয়বস্তু থাকতে পারে।

sudo chown root /home/bob
sudo chmod go-w /home/bob
sudo mkdir /home/bob/writable
sudo chown bob:sftponly /home/bob/writable
sudo chmod ug+rwX /home/bob/writable

এবং বাম, আপনি লগ ইন এবং লিখতে পারেন /writable


3
সত্যিই দরকারী আপনাকে ধন্যবাদ। দুটি সমস্যা যদিও। ১) যদিও আমি লিখতে পারি না, তবুও আমি পুরো ফাইল সিস্টেমটি ব্রাউজ করতে পারি। ২) শেলটি / বিন / মিথ্যাতে পরিবর্তন করা এসএফটিপি সম্পূর্ণরূপে বাধা দেয়। আমি কি ভুল কিছু করছি?
কিম

1
ধন্যবাদ! এই বিষয়টির আরও অনেক নিবন্ধ এই বিশদটি মিস করে এবং কিছু এটি তৈরি করে যাতে সার্ভার এসএসএস সংযোগগুলি গ্রহণ করতে পারে না (আপনি ইসি 2 তে থাকাকালীন কী ধরণের স্তন্যপান করেন এবং ... এটিই একমাত্র উপায়)।
টম হ্যারিসন জুনিয়র

4
কিম 3er: এটি আপনাকে ব্যবহারকারীর শেলটি / sbin / nologin - / বিন / মিথ্যাতে কোনও ধরণের অ্যাক্সেস অক্ষম করে।

8
আমি আরও লক্ষ করতে চাই যে আপনার ক্রুট ফোল্ডারের দিকে পরিচালিত সমস্ত ফোল্ডারগুলির মালিকানা উচিত root। এই /homeউদাহরণেও মূলের মালিকানাধীন হওয়া উচিত।
শিকি

2
14.04 এ, আমাকেও এই কাজ Subsystem sftp /usr/lib/openssh/sftp-serverকরার Subsystem sftp internal-sftp -f AUTH -l VERBOSEআগে লাইনটি পরিবর্তন করতে হয়েছিল।
অংশবিশেষ thing

57

একটি এসএফটিপি ডিরেক্টরি ক্রুট করতে, আপনাকে অবশ্যই আবশ্যক

  1. একটি ব্যবহারকারী তৈরি করুন এবং মূলটিকে এর মালিক হতে বাধ্য করুন

    cd /home
    mkdir john
    useradd -d /home/john -M -N -g users john
    sudo chown root:root /home/john
    sudo chmod 755 /home/john
    
  2. / Etc / ssh / sshd_config- এ সাব-সিস্টেমের অবস্থানটি পরিবর্তন করুন:

    #Subsystem sftp /usr/lib/openssh/sftp-server
    Subsystem sftp internal-sftp
    

    এবং ফাইলটির শেষে একটি ব্যবহারকারীর বিভাগ তৈরি করুন (সাবসিস্টেম লাইনের পরে রাখলে এসএসএস শরণে মরে যেতে পারে):

    Match User john
        ChrootDirectory /home/john
        ForceCommand internal-sftp
        AllowTCPForwarding no
        X11Forwarding no
    

3
এটি কাজ করে না বলে মনে হচ্ছে। আপনার উদাহরণ হিসাবে, ব্যবহারকারী ডিরেক্টরিতে johnলক করা আছে /home/john। আপনি 755ডিরেক্টরিতে অনুমতি দিয়েছেন। সুতরাং মালিক (4) পড়েছেন, (2) লিখুন এবং সম্পাদন করুন (1), এবং গোষ্ঠীটি (4) পড়ে এবং (1) কার্যকর করেছে। এছাড়াও আপনি মালিকের এবং গ্রুপ সেট করেছি root, তাই johnঅন্যান্য জন্যে। তিনি তখন (4 + 1 = 5) পড়েছেন এবং কার্যকর করেছেন। সুতরাং আপনি জনকে এমন একটি ডিরেক্টরিতে লক করেছেন যেখানে তাঁর লেখার কোনও সুযোগ নেই। কিভাবে এটি ঠিক করবেন? বিশেষাধিকার পরিবর্তন করে 757এমনকি 777লগইনকে ভেঙে দেয়। গোষ্ঠী বা মালিককে জনতে পরিবর্তন করাও লগইন ভঙ্গ করে।
ড্যানিয়েল

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

আমি অন্য কোনও ব্যবহারকারীর হোম ফোল্ডারে একটি এসএফটিপি ডিরেক্টরি বানাতে চাই। আমার কাছে ইউজারএক্স /home/userx/sftproot/uploadsএবং / হোম / এসফ্টপিউসে এসফিউপিউজার রয়েছে। আমি /home/usex/sftprootরুট: রুট এবং chmod 755 এর মালিকানায় chroot সেট /home/usex/sftproot/uploadsকরে রেখেছি ft আমি উপরের প্রাথমিক প্রশ্নের মতো একই ত্রুটি পেয়েছি। Sftp কাজ করার জন্য chroot এবং সমস্ত পিতা-মাতার ফোল্ডারগুলি রুট: রুটের মালিকানাধীন হওয়া দরকার?
প্রিমোজ রোম

6

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

এবং আমি এখানে এটি কীভাবে কাজ করলাম তা এখানে:

প্রথমে আমি একটি ব্যবহারকারী তৈরি করেছি:

sudo useradd netdrive

তারপরে সম্পাদনা /etc/passwdকরে নিশ্চিত করে নিন যে এটি /bin/falseব্যবহারকারীর জন্য তাই লাইনটি ছিল:

netdrive:x:1001:1004:Net Drive User,,,:/home/netdrive:/bin/false

আমি /etc/ssh/sshd_configঅন্তর্ভুক্ত সম্পাদনা :

Match User netdrive
  ChrootDirectory /home/netdrive
  ForceCommand internal-sftp
  AllowTcpForwarding no
  X11Forwarding no

পরিবর্তিত হোম ডিরেক্টরি মালিক এবং অনুমতিগুলি:

sudo chown root:root /home/netdrive/
sudo chmod 755 /home/netdrive/

ঠিক আছে এত কিছুর পরেও আমি ব্যবহার করে সংযোগ করতে সক্ষম হয়েছি sshfsতবে কেবল পঠন মোডেই। একটি লিখনযোগ্য ফোল্ডারটি পেতে আমাকে কী করতে হয়েছিল:

sudo mkdir -p /home/netdrive/home/netdrive/
sudo chown netdrive:netdrive /home/netdrive/home/netdrive/
sudo chmod 755 /home/netdrive/home/netdrive/

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

ক্রুট কনফিগারেশনের কারণে নেটড্রাইভ ব্যবহারকারীর sshfsসাথে অ্যাক্সেস করার সময় আমি কেবল সার্ভারের ডিরেক্টরিতে থাকা জিনিসগুলি দেখতে পাই নিখুঁত। পুনরাবৃত্তি ডিরেক্টরি কাঠামো এটিই একটি পরিষ্কার chroot ssh লিখনযোগ্য সমাধান করতে আমার জন্য কাজ করে তোলে ।/home/netdrive//home/netdrive/home/netdrive/

আমি এখন আমার যে সমস্যাগুলি ছিল তা নীচে ব্যাখ্যা করতে যাচ্ছি:

আপনার সম্ভবত নিম্নলিখিত অনুচ্ছেদগুলি কার্যকর করা উচিত নয় :

উপরের সমাধানগুলি দেখার পরে (এবং নেটটিতে আরও অনেকে যা এমনকি এসিএল (অ্যাক্সেস নিয়ন্ত্রণের তালিকা) ব্যবহার করেছিল) আমি এখনও এটি কাজ করতে সক্ষম হইনি কারণ আমি যা করেছি তা হ'ল:

নিম্নলিখিত হয়নি না আমার জন্য কাজ:

sudo mkdir /home/netdrive/writable/
sudo chown netdrive:netdrive /home/netdrive/writable/
sudo chmod 755 /home/netdrive/writable/

কারণ নেটড্রাইভ ব্যবহারকারী /home/netdrive/writable/ফোল্ডারটির মালিকানাধীন এবং অনুমতি থাকা সত্ত্বেও সেই ডিরেক্টরিতে লিখতে সক্ষম হয়নি। তারপরে আমি করেছি: sudo chmod 775 / home / নেটড্রাইভ / লিখনযোগ্য / এবং এখন আমি একটি ডিরেক্টরি তৈরি করতে এবং এটি মুছতে পারতাম তবে আমি এটি সম্পাদন করতে পারিনি কারণ এটি গ্রুপ লিখনযোগ্য অনুমতি ছাড়া তৈরি করা হয়েছিল। এখানে আমি নেটে যা দেখেছি তা থেকে aclএটি ঠিক করার জন্য ব্যবহার হয়। তবে আমি এতে সন্তুষ্ট নই যেহেতু এটি আমাকে ইনস্টল করতে হয়েছিল acl, তারপরে মাউন্ট পয়েন্টগুলি কনফিগার করতে হবে ইত্যাদিও একই ধারণা নেই যে একই ব্যবহারকারীর মালিকানাধীন কোনও ফোল্ডারে লেখার জন্য আমার কেন গ্রুপের অনুমতি লাগবে।

দেখে মনে হচ্ছে যে কোনও কারণে /home/netdrive/home/netdriveশেষ netdriveফোল্ডারটি তৈরি এবং মালিকানা দেওয়ার কারণে আমি গোষ্ঠীর অনুমতি নিয়ে গোলযোগ না করে সমস্ত কিছু করতে সক্ষম হয়েছি ।


1

আমি এই নিবন্ধটি অনুসরণ করেছিলাম কিন্তু এটি কার্যকর হয়নি। আমি এই পরিবর্তনটি করার পরে এটি কাজ শুরু করে (উপরের উত্তরে প্রস্তাবিত):

#Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp

প্লাস রুটটিতে নিজস্ব হোম ডিরেক্টরি তৈরি করে যার অধীনে আমার ব্যবহারযোগ্য লিখিত উপ ডিরেক্টরি ছিল (উপরে বর্ণিত হিসাবে)।

এই উত্তরের সাথে আমি যে নতুন এবং দরকারী জিনিসটি যুক্ত করতে চাই তা হ'ল আপনি% h টি ব্যবহারকারী হোম ডিরেক্টরি হিসাবে নির্দিষ্ট করে কনফিগারেশনটি সহজ করতে পারেন:

ChrootDirectory %h

আমি এই লিঙ্কটি ধন্যবাদ এটি আবিষ্কার করেছি ।

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