معرفی: راه‌اندازی سرور openVPN با چند کلید

از vpn می‌شه برای اهداف مختلفی استفاده کرد. تو کشور ما که یه کاربرد مرسوم داره که همه می‌دونن. علاوه بر اون، وقتی داریم از شبکه‌های عمومی استفاده می‌کنیم (مثل شبکه تو یه کافی‌شاپ یا شبکه دانشگاه یا محل کار) اطلاعاتی که تبادل می‌کنیم خیلی راحت ممکنه شنود بشه. برای جلوگیری از این شنود یکی از راه‌های خوب استفاده از vpn اه.
خود vpn ها انواع مختلف دارن. روش pptp علاوه بر اینکه روی شبکه مخابراتی کشور وصل نمی‌شه، حفره امنیتی هم داره. راه حل جایگزین می‌تونه استفاده از openVPN باشه: هم به شدت امنه، هم برای پلتفرم‌های مختلف کلاینت داره.
اگر احیانا VPS داشتید یا مثلا خواستید روی راسپبریتون سرور این نوع vpn رو راه بندازید، باید تنظیمات زیادی انجام بدید. خوشبختانه به جای همه این تنظیمات حوصله-سربر می‌شه از یه اسکریپت ساده آماده استفاده کرد. کافیه اسکریپت دانلود و اجرا بشه. بعد از اجر خودش کانکشن آماده رو به شکل یه فایل برمی‌گردونه تا کلاینتی که داریم استفاده می‌کنیم درون‌ریزی (import) بشه.

لینک اسکریپت

معرفی کوتاه: transmission به عنوان سرویس

والا من خیلی وقت بود با torrent کار نمی‌کردم. بعد از راه انداختن راسپبریم اما استفاده از torrent خیلی وسوسه‌کننده و روتین شده برام.

برای دانلود torrentها برنامه‌های مختلفی هست. به عنوان مثال تو اوبونتو کلاینت پیش‌فرض برای این کار transmissionه. این کلاینت خوش‌دسته و تا حد خیلی خوبی قابل تنظیمه. داشتم دنبال می‌گشتم که چطور می‌شه کلاینتی برای torrent تو خط فرمان داشت که متوجه شدم همین کلاینت transmission رو می‌شه به شکل daemon هم اجرا کرد. بعد هم می‌شه با استفاده از رابط وب یا نرم‌افزار خط فرمان transmission-remote یا transmission-remote-cli اون رو کنترل کرد. توضیح روش نصب و باقی قضایا هم تو لینک‌های پایین صفحه هست. غرض فقط معرفی بود.

لینک
لینک

اشتراک مخزن git

مساله اینه که من می‌خوام مخازن git که روی راسبری‌پی خونه دارم رو با بقیه اعضای تیم به اشتراک بزارم. قبلا کارهای مربوط به dynamic dns و port forwarding رو انجام دادم (+ و +) و می‌شه از طریق ssh با یه آدرس ثابت به خونه وصل شد. بقیه کار سادست. الان مراحل کار رو می‌گم و بعد یه مثال می‌زنم.

۱- برای هر کدوم از اعضای تیم یه یوزر می‌سازم.
۲- برای هر پروژه یه گروه می‌سازم.
۳- اعضای هر پروژه رو به گروه اون پروژه اضافه می‌کنم.
۴- یه فولدر تو روت فایل سیستم می‌سازم به اسم git.
۵- برای هر پروژه تو فولدر git یه فولدر می‌سازم و مالکش رو به گروه اون پروژه تغییر می‌دم.
توجه: دستورات قدم‌های ۱ تا ۵ رو می‌تونید تو این لینک پیدا کنید.
۶- قدم خیلی مهم: تنظیم می‌کنم که از این به بعد هر فایل جدیدی که تو فولدر پروژه ساخته می‌شه مال گروه همون پروژست. (منبع)
۷- یه ریپو خالی تو اون دایرکتوری ایجاد می‌کنم. (+)
۸- حالا کاربر می‌تونه از راه دور به مخزن وصل بشه و پوش کنه.

مثال کاربر user1 برای پروژه myproject:
[bash]
useradd -m user1
groupadd myproject
useradd -Gmyproject user1
mkdir -p /git/myproject.git
chgrp -R myproject /git/myproject.git
chmod -R g+rws /git/myproject.git
cd /git/myproject.git
git init –bare
[/bash]
و در سمت کاربر:
[bash]
git remote add origin ssh://example.com:/git/myproject.git
git push -u origin master
[/bash]

به روز رسانی:
دستورات رو اصلاح کردم و به علاوه چک می‌کنم که پروژه‌ای که ساخته شده حتما برای کار با گروه‌ها تنظیم شده باشه. (+)
[bash]
useradd -m user1
groupadd myproject
useradd -Gmyproject user1
mkdir -p /git/myproject.git
cd /git/myproject.git
git init –bare
git config core.sharedRepository group
chgrp -R myproject .
chmod -R g+rwX .
find . -type d -exec chmod g+s ‘{}’ +
[/bash]

به روز رسانی ۲:
برای اضافه کردن ریپوی اشتراکی یه اسکریپت کوچیک دارم که رو گیست به اشتراک گذاشته‌ام.

دستورات کار با گروه‌ها، کاربران و دسترسی‌ها

تو پست قبلی یه مخزن گیت روی دراپ‌باکس راه انداختم. ولی خوب وقتی آدم راسپبری داره چرا یه همچین مخزنی رو روی راسپبری راه نندازه؟ برای این کار باید کمی دسترسی کاربران رو تنظیم می‌کردم. من تا حالا در این سطح ناچار به انجام این کار نشده بودم. بنا بر این خیلی هم با دستوراتش آشنا نبودم. واسه همین تو این پست یه خلاصه‌ای از دستورات جدیدی که یادگرفتم و مربوط به کار با کاربرا، گروه‌ها و مجوزها بود می‌ذارم تا بعدا پست اصلی رو بنویسم.

کاربران و گروه‌ها
تو لینوکس هر کسی که داره با کامپیوتر کار می‌کنه یه کاربره. هر کاربر حداقل به یه گروه تعلق داره و البته می‌تونه متعلق به چند تا گروه هم باشه. دستورایی که برای کار با کاربران و گروه‌ها نیاز داشتم اینا بودن:

اضافه کردن یه کاربر جدید [bash]useradd user[/bash]
اضافه کردن یک کاربر جدید به علاوه ساختن فولدر home برای او [bash]useradd -m user[/bash]
عوض کردن پسورد کاربر [bash]passwd user[/bash]
اضافه کردن یه کاربر جدید به یه گروه جدید [bash]useradd -gbasicgroup user[/bash]
اضافه کردن یه کاربر جدید به دو گروه [bash]useradd -gbasicgroup -Ganothergroup user[/bash]
گرفتن اطلاعات کاربر [bash]id user[/bash]
لیست کل کاربران [bash]users[/bash]
لیست کل گروه‌ها [bash]groups[/bash]
لیست گروه‌های کاربر [bash]groups user[/bash]
اضافه کردن یه گروه جدید [bash]groupadd group[/bash]
اضافه کردن یه کاربر موجود به یه گروه [bash]usermod -a -G group user[/bash]
حذف کاربر از یک گروه [bash]userdel user group[/bash]
حذف کاربر به طور کلی [bash]userdel user[/bash]
حذف کاربر و فولدر خانه‌اش [bash]userdel -r user[/bash]

فایل‌ها و مجوزها
تو سیستم فایل ext هر فایلی سه تا خاصیت داره:
۱. یک کاربر مالک
۲. یک گروه مالک
۳. مجوزهای دسترسی برای کاربر مالک، گروه مالک و هر کس دیگری غیر این دو

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

دیدن اطلاعات فایل
[bash]ls -l[/bash]
جلوی هر فایل مجوزها، اسم کاربر و اسم گروه نمایش داده می‌شه. فرمت مجوزها به شکل drwxrwxrwx هست. کاراکتر اول اگه – باشه یعنی یه فایل معمولیه و اگه d باشه یعنی یه دایرکتوریه. rwx اول مربوط به کاربر، rwx بعدی مربوط به گروه و rwx آخر مربوط به همه افراده. r نشون دهنده حق خوندن، w نشون دهنده حق نوشتن و x نشون دهنده حق اجرا کردنه. اگر کسی هر کدوم از این مجوزها رو نداشته باشه به جاش یه – نمایش داده می‌شه. مثلا اگه مجوز یه فایل drwxr–r-x باشه یعنی کاربر مالک فایل می‌تونه فایل رو بخونه، روش بنویسه و اجراش کنه، گروه فایل می‌تونه فقط بخونتش و همه افراد دیگه می‌تونن فایل رو بخونن و اجرا کنن.

تغییر دسترسی دایرکتوری برای گروه به شکل بازگشتی
[bash]chmod -R g+rwx DirectoryName[/bash]
تو این دستور حرف g برای گروهه. برای مالک اصلی o برای همه از a استفاده می‌شه. اگه هیچ حرفی نباشه اتوماتیک a در نظر گرفته می‌شه. + برای اعطای دسترسی و – برای سلب دسترسیه.

تغییر مالک فایل‌ها
[bash]chown username file1 file2 …[/bash]
تغییر مالک یک دایررکتوری به شکل بازگشتی
[bash]chown -R username somedir[/bash]
تغییر گروه فایل
[bash]chgrp groupname file1 file2 ….[/bash]
تغییر گروه یک دایرکتوری به شکل بازگشتی
[bash]chgrp -R groupname somedir[/bash]
تغییر مالک و گروه
[bash]chown username:groupname file1 file2 …[/bash]

من و راسبری-پی و دانلودهای شبانه

یه دونه راسبری پی خریدم که تو خونه گذاشتم و باهاش عشق دنیا رو می‌کنم. چند وقتی بود که می‌خواستم مثل این یادداشت بیت نیم‌سوز یه مدیر دانلود روش راه بندازم. چیزی که هدفم بود این بود که (۱) خیلی راحت بتونم فایل‌هام رو به لیست دانلودهام اضافه کنم (۲) دانلود خیلی اتوماتیک و تمیز انجام بشه.

ساختن لیست دانلودها
تو یه پوشه از هاستم یه اسکرپت کوچیک php گذاشتم که هر چی براش بفرستم، به آخر یه فایل تکست اضافه می‌کنه. به این ترتیب هر جا که باشم، لینکایی که می‌خوام دانلود شن رو خیلی تمیز برای این اسکریپت می‌فرستم و و این اسکریپت برام لیست دانلودهام رو می‌سازه. مثلا:
[html]
http://melmi.ir/downloads/append.php?link_to_download_file
[/html]
من php بلد نیستم، واسه همین هم اصل اسکریپت رو از این‌جا برداشتم و یه کم تغییرش دادم. این هم اسکریپت تغییر پیدا کرده:

البته برای اینکه هر کسی نتونه به این فایل چیزی اضافه کنه، رو فولدر این اسکرپت پسورد گذاشتم. نتیجتا برای دسترسی به این اسکرپت، یه همچین چیزی لازمه:
[html]
http://folani:passwordesh@melmi.ir/downloads/append.php?link_to_download_file
[/html]
امن‌ترین روش توی دنیا نیست، اما برای من کافیه.

تو مرحله بعد برای اینکه تنبلی رو به اوجش برسونم، دنبال یه افزونه گشتم که از تو کروم با یه کلیک مستقیما بتونم لینکم رو به این ارسال کنم. با یه کم گشتن افزونه خیلی خوب Context Menus رو پیدا کردم که اجازه می‌ده به راحتی برای کانتکست منوی کروم، آیتم‌های اضافه با اسکرپت‌های سفارشی تعریف کنیم. من البته کار خاصی نداشتم و فقط همون دستور بالا رو با یه کم تغییر به قسمت Custom از منوی LinkMenu اضافه کردم:
[html]
http://folani:passwordesh@melmi.ir/downloads/append.php?%s
[/html]
و تمام. حالا می‌تونم با یه کلیک از هر جای دنیا لینک دانلود فایلی که می‌خوام رو تو سایتم ثبت کنم.

انجام دانلود
نظم دادن به خود دانلود دردسر زیادی نداره. باید یه اسکرپت داشته باشم که تو یه فاصله زمانی مشخص دانلودهام رو انجام بده.
تو اسکریپت اول از هم می‌رم به فولدر دانلودها و فایل dllist.txt رو (بعد از پاک کردن فایل قبلی) از سرور می‌گیرم:
[bash]
cd ~/Downloads/auto/
rm dllist.txt
wget –user=folani –password=passwordesh melmi.ir/downloads/dllist.txt
[/bash]
برای استفاده از این فایل به دو تا فایل دیگه هم احتیاج دارم. یه فایل به اسم done.txt که لیست فایلایی رو نگه می‌داره که دانلودشون تکمیل شده، و یه فایل به اسم active.txt که لیست فایلایی هست که هنوز دانلودشون انجام یا کامل نشده. بعد از دانلود فایل dllist.txt، اولین کار اینه که ازش فایل done.txt رو فریق کنم تا فایل active.txt تشکیل بشه:
[bash]
comm dllist.txt done.txt -23 –nocheck-order > active.txt
[/bash]
دستور comm تفریق رو انجام می‌ده. معنی پارامترهاش رو هم می‌شه راحت تو منوال‌هاش دید.
مرحله بعد اینه که یه حلقه بنویسم که تا وقتی فایل active.txt خالی نشده، فایلای اون تو رو یکی یکی (۱) دانلود کنه (۲) بعد از اینکه دانلودشون تموم شد، بذاره تو done.txt و (۳) فایل دانلود شده رو از active.txt خارج کنه:
[bash]
while [ -s active.txt ]
do
head -n 1 active.txt | sed -e’s/%\([0-9A-F][0-9A-F]\)/\\\\\x\1/g’ | xargs echo -e | xargs -I {} wget -c “{}”
head -n 1 active.txt >> done.txt
tail -n +2 active.txt > tmp.txt
mv tmp.txt active.txt
done
[/bash]
فقط خط اول حلقه یه کم توضیح می‌خواد. لینک‌ها تو فایل لینکای من به شکل کدبندی درصدی می‌یاد. از طرف دیگه wget میونش زیاد با این فرمت کدبندی درصدی خوب نیست و ممکنه اسم فایلا رو به هم بریزه. برای همین با استفاده از بخش sed و echo اون پایپ‌لاین لینک‌ها رو به شکل اول برمی‌گردونم. (راستش این مشکل رو با پرسیدن سوال حل کردم.)
و نهایتا اسکریپت ما این شکلی خواهد بود:

والبته یادم نمی‌ره که مجوز اجرایی هم بهش بدم.
[bash]
sudo chmod +x dl.sh
[/bash]

خوب برای اجرای این اسکریپت به شکل منظم یه cron احتیاج دارم که البته کار باهاش رو قبلا این‌جا تجربه کرده بودم. اینا هم دستورایی هستن که تو cron می‌ذارم. به این ترتیب اسکریپت عزیز دانلودها رو ساعت یک شب شروع و ساعت ۹ صبح قطع می‌کنه. فکر کنم واضح باشن:
[bash]
۰ ۱ * * * /home/pi/Downloads/auto/dl.sh
۰ ۹ * * * kill $(pgrep dl.sh)
۰ ۹ * * * killall wget
[/bash]

والسلام. دو تا نکته. اول این که برای این کار حتی یه برنامه اضافه هم تو rpi نصب نکردم و فقط با ابزارای ساده لینوکس و وصل کردن اون‌ها به هم کل این سیستم رو راه انداختم. نکته دیگه اینکه این ویندوزیا با همه دانلود منیجرای غول تشنشون نمی‌تونن به سادگی یه همچین سیستمی راه بندازن.

آپدیت: اسکریپت‌ها به گیست اضافه شد و از آنجا در متن قرار گرفت.