WebExtract

بعد از تحریم cpanel و جایگزینی اون با plesk یکی از گلایه های مشتری ها عدم امکان باز کردن فایلهای فشرده از طریق کنترل پنل بوده.

از اونجایی که این امکان، امکان پرطرفداری بود. تصمیم گرفتم که برنامه ای برای این کار بنویسم تا کور بشه چشم هر کی که بخواد ما رو تحریم کنه :D

این شد که دست به کار شدم و WebExtract رو با پایتون نوشتم. این برنامه یک Daemon هست که به صورت یک سرویس نصب میشه و روی پورت 2121 سرویس میده و از یوزر و پسورد های سیستم برای احراز هویت استفاده میکنه. به عبارتی بعد از نصب این برنامه کاربر با رفتن به آدرس سایت خودش روی پورت 2121 می‌تونه با وارد کردن نام کاربری و رمز ftp ، فایلها و فولدرهای خودش رو ببینه و فایل های فشرده رو آنلاین باز کنه.

در ادامه نحوه نصبش رو توضیح میدم.

قبل از هر چیز این نکته رو بگم که برای نصب این برنامه باید دسترسی root به سرور داشته باشید. به عبارتی اگر میخواین این امکان رو روی هاستتون داشته باشید باید با مدیر سرورتون تماس بگیرید و ازش بخواهید که این برنامه رو براتون روی سرور نصب کنه. (که البته اگر نصب نکرد کاری از من ساخته نیست و اگر هم نصب کرد مسئولیتش با خودشه!)

اما نحوه نصب:

برای اجرای این برنامه باید پایتون 2.5 به بالا داشته باشید که اگر ندارید میتونید از سایتش دریافت، کامپایل و نصب کنید:

wget http://www.python.org/ftp/python/2.7/Python-2.7.tgz
tar xvfz Python-2.7.tgz
cd Python-2.7
./configure
make
make install

بسته‌ی webextract رو هم از اینجا دریافت و نصب ‌کنید:

wget http://github.com/downloads/farhadi/webextract/webextract-1.0.tar.gz
tar xvfz webextract-1.0.tar.gz
cd webextract-1.0
make install

برنامه آمادست. در ضمن پورت 2121 هم باید روی فایروال سرور باز باشه.

اگر موقع باز کردن فایلهای فشرده با خطای «sorry, you must have a tty to run sudo» مواجه شدید باید دستور visudo رو اجرا کنید و دنبال خط «Default requiretty» بگردید و کامنتش کنید و ذخیرش کنید. (دیگه vi باید بلد باشید.)

در صورت لزوم پورت برنامه رو هم می‌تونید در فایل ‎/etc/webextract.conf تغییر بدید. البته یادتون باشه بعد از تغییر، برنامه رو restart کنید. (‎/etc/init.d/webextract restart)

من این برنامه رو روی debian ، ubuntu و CentOS تستش کردم ولی باید روی همه‌ی توزیع های بر پایه دبیان و ردهت کار کنه.

اگر به مشکلی برخوردید اینجا گزارش بدید.

16 دیدگاه برای “WebExtract”

  1. امید گفته:

    بسیار عالی، اما یک پیشنهاد/سوال داشتم.
    چرا تحت وب‌سرور اینو اجرا نمی‌کنید؟ (فرانهش (آپلود) از طریق اف.تی.پی انجام می‌شه و این برنامه فقط و فقط باید فایل فشرده رو باز کنه!)

    ۱- می‌تونه فایلی باشه که خود آپلودکننده‌ی سایت آپلود کنه و سایت خودش رو ببینه و فایل‌های بسته رو باز کنه و باز‌ها رو اگر خواست ببنده! تو این حالت دسترسی کاربر می‌خواد و خیلی بهتره!

    ۲- می‌تونه مثل همین، توی یک شاخه مشترک بین تمامی کلاینت‌ها (چیزی مشابه شاخه‌ی cgi-bin در آپاچی) قرار بگیره و همه‌ی کاربرها توی اون شاخه‌ی خودشون داشته باشند! این شاخه می‌تونه حتا مشابه شاخه‌ی cpanel توی سی‌پنل باشه، یعنی از دستور Location توی تنظیمات آپاچی استفاده کنی.

  2. علی گفته:

    امید جان راستش من سه چهار بار کامنت شما رو خوندم ولی چیز زیادی متوجه نشدم.

    چرا تحت وب‌سرور اینو اجرا نمی‌کنید؟

    راستش من توی این زمینه ها یکم سوادم کمه.
    باید برنامه دسترسی روت می داشت(برای اهراز هویت) و نمیدونستم چه طور میشه تحت وب سرور با mod_php یا mod_python برنامه ای نوشت که با دسترسی روت اجرا بشه برای همین تنها راهی که به ذهنم رسید نوشتن یک برنامه مستقل با پایتون بود.

    ۱- می‌تونه فایلی باشه که خود آپلودکننده‌ی سایت آپلود کنه و سایت خودش رو ببینه و فایل‌های بسته رو باز کنه و باز‌ها رو اگر خواست ببنده! تو این حالت دسترسی کاربر می‌خواد و خیلی بهتره!

    منظورت اینه که فایلهای بسته رو خودکار باز کنه خودش؟
    منظورت از دسترسی کاربر رو هم متوجه نشدم.

    ۲- می‌تونه مثل همین، توی یک شاخه مشترک بین تمامی کلاینت‌ها (چیزی مشابه شاخه‌ی cgi-bin در آپاچی) قرار بگیره و همه‌ی کاربرها توی اون شاخه‌ی خودشون داشته باشند! این شاخه می‌تونه حتا مشابه شاخه‌ی cpanel توی سی‌پنل باشه، یعنی از دستور Location توی تنظیمات آپاچی استفاده کنی.

    منظورت اینه که مثلا یک شاخه webextract داشته باشیم که داخلش به ازای هر کاربر یک شاخه باشه که کاربر با اضافه کردن webextract به انتهای آدرس سایت خودش به اون شاخه دسترسی داشته باشه؟
    آیا برای اینکار باید فایل کانفیک آپاچی مربوط به هر سایت جداگانه ویرایش بشه یا راه دیگه ای وجود داره؟

  3. امید گفته:

    شرمنده که اینقدر کج و کوله نوشته بودم :دی

    ۱- نه، منظورم خودکار نیست، یه چیزی شبیه فایل منیجر که بتونه فایل رو اکسترکت هم بکنه!
    از دسترسی کاربر منظورم این بود که کاربر می‌تونه فایل رو آپلود کنه و ازش استفاده کنه. اینی که شما نوشتی، اگر روی یک سرور نصب نباشه، خوب قابل استفاده نیست برای کاربر!

    ۲- البته بعد از کامنت که یکم فکر کردم دیدم با Location نمی‌شه و مشابه Location می‌شه از Alias استفاده کرد که توضیحات‌اش اینحا هست:
    http://httpd.apache.org/docs/2.0/mod/mod_alias.html#alias
    البته من تا حالا فایل داینامیک با این دستور alias اجرا نکردم، نمی‌دونم نتیجه واقعن همونی که انتظار دارم/داری بشه یا نه!

    برای هر کاربر یک شاخه نمی‌خواد، یه شاخه واسه همه کافیه، دقیقن مثل آدرس cpanel که توی کنترل‌پنل‌های cpanel باهاش کار می‌شه و پست همه‌ی دامنه‌ها می‌شه گذاشت. مثل farhadi.ir/cpanel

    برای هر کاربر یه کانفیگ جدا هم نمی‌خواد اصولن! (البته یکمی به دلیل تست نکردن در این مورد شک دارم :دی)

    و در نهایت، یه سوال، که نام کاربری و رمز عبور رو از کجا (کدوم فایل) می‌خونه؟

  4. علی گفته:

    ممنون از توضیحات. ایندفعه کامل متوجه شدم.
    من دو تا مشکل داشتم یک اینکه میخواستم فایلها با دسترسی خود کاربر باز بشن. البته میدونم با suphp میشه اینکار رو کرد ولی نمیدونستم چطور آپاچی رو کانفیک کنم که فقط این شاخه ای که من میخوام با mod_suphp اجرا بشه و بقیه با mod_php
    مشکل دوم هم اهراز هویت بود که به دسترسی روت نیاز داره. که من برای اینکار از ماژول های spwd و crypt پایتون استفاده کردم که فکر میکنم پسورد ها رو از فایل ‎/etc/shadow میخونه.

  5. امید گفته:

    مشکل اول: با راه حلی که توی مشکل دوم توضیح دادم، هر دو مشکل حل می‌شه :دی

    مشکل دوم: برای احراز هویت به طور کلی نیازی به داشتن دسترسی روت می‌تونی نداشته باشی!
    یک راه احمقانه ولی خیلی خیلی موثر اینه که: اف.تی.پی کنی به خود سرور :دی

    البته ممکنه راه‌های دیگه‌ای هم باشه، ولی ممکنه این راه‌های مختلف توی سرورهای مختلف کار نکنه!

  6. علی گفته:

    استفاده از ftp برای احراز هویت ایده‌ی خوبیه ولی برای ذخیره‌ی فایلها مناسب نیست چون هم کنده و هم کدنویسیش زیاد و پیچیده میشه. ولی الان با حدود 200 خط سر و تهش رو هم آوردم.

  7. امید گفته:

    در حالت سرور که خیلی کند نیست (نسبت به فایل سیستم عادی قطعن کند هست!)

    کدنویسیش هم اصولن قبلن انجام شده، برای پی.اچ.پی می‌شه به اینا اشاره کرد:
    توی خود پی.اچ.پی: http://php.net/manual/en/ref.ftp.php
    کلاس نوشته شده با پی.اچ.پی: http://www.geckotribe.com/php-ftp/

  8. امید گفته:

    اینجا هم کلی کلاس هست: https://encrypted.google.com/search?q=php+ftp+class

  9. علی گفته:

    منظورم این بود که با وجود توابعی که php برای کار با ftp داره باز هم کد نویسیش زیاد میشه تصورش رو بکن اول باید کلاس های مختلف برای باز کردن انواع مختلف فایلهای فشرده گیر بیاری بعدش فایلها رو یکجای موقت باز کنی بعد یک کد recursive بنویسی که همه فایل ها رو با ftp ذخیره کنه. البته شاید اگه بگردیم یک نفر پیدا بشه که کل این کار رو قبلا انجام داده باشه :)

  10. محمد صالح گفته:

    سلام علی
    عالی بود. منتها تا دایرکت ادمین هست چرا پلسک و …..

  11. علی گفته:

    @محمد صالح:
    سلام
    فکر میکنم plesk کاملتر از direct admin باشه.
    در هر صورت ما تابع بازاریم یعنی وقتی مشتری ها plesk رو بیشتر بپسندند ما هم مجبور plesk نصب کنیم.

  12. ابراهیم گفته:

    تحریم؛ دلیلی دیگر بر لزوم حرکت به سمت نرم‌افزارهای آزاد.

    [گفتم تا این جا اومدم یه صدایی ازم در آد بدونی می‌خونمت!]

  13. علی گفته:

    @ابراهیم:
    ممنون که به من سر میزنی :)

  14. منصوری گفته:

    احسنت.این یه مرگ بر آمریکای واقعی است
    درود بر شما

  15. نبی گفته:

    سلام علی جان،

    (1)
    کلاً با Daemon حال میکنم. اتفاقاً چند وقت پیش یه پروژه شخصی با بچه ها داشتیم برای نوشتن یک Daemon به نتایج خوبی هم رسیدیم ولی اختلاف نظر هایی هم وجود داشت. مثلاً آخر به اتفاق نظر نرسیدیم که آیا یک Daemon یک حلقه شبیه Loop هست که دائم در حال چک یا اجرای دستور خاص هست یا اینکه یه جورایی توی ورودی خروجی های کرنل مقیم میشه و به این نحو در حافظه به صورت دائم مستقر میشه و گوش وایمیسه!

    (2)
    دلیل خاصی داشت که از python استفاده کردی؟

    (3)
    من که از python سر در نمیارم ولی موقع نصب اینجوری شد:
    Installing WebExtract …
    Starting webextract:lTraceback (most recent call last):
    File “/usr/share/webextract/webextract.py”, line 11, in ?
    import time, re, subprocess, urllib, os, crypt, pwd, spwd, base64, sys
    ImportError: No module named spwd
    [FAILED]
    Installation complete.
    حالا این پکیج spwd چطور باید نصب بشه نمیدونم. سرچ هم کردم چیزی نیافتم.

    (4)
    ضمناً دستور wget باید با سوئیچ –no-check-certificate اجرا بشه.

    (5)
    در مجموع کارت درسته و خسته نباشی ;-)

  16. علی گفته:

    سلام آقا نبی

    1- Daemon یک برنامه هست که توی پس‌زمینه اجرا میشه. حالا ممکنه یک حلقه باشه یا به یک پورت گوش بده یا منتظر یک event یا سیگنال بمونه.

    2- اون موقع من گزینه ی دیگه ای به غیر از php و python نداشتم و python رو به خاطر راحتتر بودن انتخاب کردم. اما اگه الان قرار باشه دوباره بنویسمش با node.js می نویسمش.

    3- ماژول spwd توی پایتون 2.5 به بعد هست.

    4- از وقتی ریدایرکت میشه به https اینجوری شده.

    5- ممنون، لطف داری.

دیدگاهی بنویسید