منبع اصلی نوشتار زیر در این لینک قرار دارد

پلاسکو در آتش سوخت…

پلاسکو در آتش سوخت و با خودش آتش نشان هایی رو برد که
شجاعتشون باعث شده ما امروز احساس امنیت و آرامش بکنیم…

ادامه مطلب

منبع اصلی نوشتار زیر در این لینک قرار دارد

Dance Me to the End of Love …

RIP Leonard Cohen (1934 – 2016) ادامه مطلب

منبع اصلی نوشتار زیر در این لینک قرار دارد

دسترسی به پورت های روی سرور از طریق SSH بر روی سیستم لوکال

گاهی نیاز داریم به صورت مستقیم به پورتی از سرور لینوکسی بر روی سیستم لوکال دسترسی داشته باشیم. مثل وقتی که بخوایم به دیتابیس روی سرور دسترسی داشته باشیم. برای اینکار میتونیم به راحتی با استفاده از SSH پورت مورد نظرمون رو روی کامپیوتر لوکال فوروارد کنیم. برای اینکار از سوئیچ L بصورت زیر استفاده میکنیم.

ssh -L port:address:port host

که تو دستور بالا port اول پورت مورد نظر ما روی سیستم لوکال بوده و address:port آدرسی بر روی سرور هستش که میخواین بهش از طریق SSH دسترسی داشته باشیم.

ادامه مطلب

منبع اصلی نوشتار زیر در این لینک قرار دارد

نمایش رنگی خروجی grep در bash

آپدیت: از دو روش زیر روش اول از grep ورژن 2.21 توصیه نمیشه و اگه از اون استفاده کنید با پیغام هشدار زیر روبرو میشوید.

grep: warning: GREP_OPTIONS is deprecated; please use an alias or script

یکی از سوئیچ هایی که موقع کار با grep خیلی به دردمون میخوره سوئیچ color هستش که مقدار جستجو رو بصورت رنگی نشون میده. ممکنه تو بعضی دیستروها این سوئیچ بطور پیش فرض ست نشده باشه و مجبور باشیم هر دفعه این سوئیچ رو تایپ کنیم.
برای اینکه این گزینه رو بطور پیش فرض داشته باشیم، میتونیم از یکی از دو روش زیر استفاده کنیم:

روش اول:

 برای اینکار کافیه که متغیر GREP_OPTIONS رو ست کنیم و برای اینکه تو هر بار اجرای bash این متغیر ها ست بشن میتونیم اون رو تو فایل .bashrc خودمون ست کنیم.

export GREP_OPTIONS=" --color"

روش دوم: 

راه دوم اینه که از alias ها استفاده کنیم. برای این موضوع میتونیم یک alias برای grep بصورت زیر تعریف کنیم و اون رو به فایل .bashrc خودمون اضافه کنیم:

alias grep='grep --color'

ادامه مطلب

منبع اصلی نوشتار زیر در این لینک قرار دارد

اتفاقات اخیر پاریس و مقایسه اون با عراق، سوریه، افغانستان و …

اول از هر چیز موضع خودم در رابطه با اتفاقات اخیر پاریس:

من فکر میکنم یه حمله تروریستی تو پاریس انجام شده و همونطور که اگه این اتفاق برای ما میوفتاد این موج همدردی هیچ دردی از ما درمون نمیکرد، الان هم زیاد با این جریان موافق نیستم و برای همین هم خودم رو زیاد قاطی این جریانات نمیکنم. پس موضع من: نه مخالف و نه موافق …

خوب حالا  بریم سر اصل داستان:
یه سری هستن که تا یه اتفاقی تو اروپا ( مثل اتفاقات شارلی ابدو و یا اتفاقات اخیر پاریس) میوفته و همدردی جامعه رو میبینن شروع میکنن که آآآی مگه مردم بقیه دنیا آدم نیستن !!! چرا هفته پیش که تو فلان کشور تو خاورمیانه شونصد نفر کشته شدن صداتون در نیومد؟‌ و به مردم هزار تا انگ غرب زدگی میچسبونن.

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

ادامه مطلب

منبع اصلی نوشتار زیر در این لینک قرار دارد

کوئری بر روی آیتم های فیلد از نوع آرایه در mongodb

درصورتی که قصد داشته باشیم document هایی از یک collection خاص را براساس شرطی بر روی یکی از فیلد های از نوع آرایه ای آنها پیدا کنیم میتونیم از عبارت $elemMatch بصورت زیر استفاده کنیم:

مثال اول:

فرض میکنیم collection ما شامل موارد زیر باشد:

{ _id: 1, results: [ 82, 85, 88 ] }
{ _id: 2, results: [ 75, 88, 89 ] }

در این صورت برای پیدا کردن document هایی که قیلد result آنها دارای عدد ۸۸ است بصورت زیر عمل میکنیم:

db.collection.find({
results: { $elemMatch: 88 }
})

همچنین میتوان از شرط های پیچیده تری استفاده نمود:

db.collection.find({
results: {
$elemMatch: { $gte: 80, $lt: 85 }
}
})

مثال دوم (آیتم های آرایه از نوع آبجکت):

فرض میکنیم collection ما شامل موارد زیر باشد:

{ _id: 1, results: [ { product: "abc", score: 10 }, { product: "xyz", score: 5 } ] }
{ _id: 2, results: [ { product: "abc", score: 8 }, { product: "xyz", score: 7 } ] }
{ _id: 3, results: [ { product: "abc", score: 7 }, { product: "xyz", score: 8 } ] }

برای یافتن مواردی که در آنها product ی با مقدار score بزرگتر مساوی 8 باشد بصورت زیر عمل میکنیم:

db.collection.find({
results: {
$elemMatch: {
product: "xyz",
score: { $gte: 8 }
}
}
})

ادامه مطلب

منبع اصلی نوشتار زیر در این لینک قرار دارد

اتصال به یک سرور لینوکسی از طریق SSH بدون نیاز به رمز عبور

ممکنه لازم باشه بطور روزمره به یه سرور ssh بزنیم. برای اینکار با دستور زیر میتونیم کلید عمومی خودمون رو به سرور اضافه کنیم تا موقع لاگین دیگه نیازی به رمز عبور نباشه:

$ ssh-copy-id [email protected]

یا اگه مسیر فایل کلید عمومی رو بخوایم تغییر بدیم بصورت زیر عمل میکنیم:

$ ssh-copy-id -i ~/.ssh/id_dsa.pub [email protected]

یا برای ssh به پورتی غیر از پورت پیش فرض:

$ ssh-copy-id -i /path/key/file.pub "[email protected] -p PORT_NUMBER"

بروز رسانی: برای ماشین هایی که دستور ssh-copy-id رو پشتیبانی نمیکنند میتوان بصورت زیر عمل نمود:

cat ~/.ssh/id_rsa.pub | ssh user@machine "mkdir ~/.ssh; cat >> ~/.ssh/authorized_keys"

ادامه مطلب

منبع اصلی نوشتار زیر در این لینک قرار دارد

تغییر نام دیتابیس در MongoDB

اگه تا بحال راجع به بانک های اطلاعاتی NoSQL شنیده باشید، حتما اسم MongoDB رو هم شنیدید. یک بانک اطلاعاتی Document Based که اطلاعات رو بصورت داکیومنت هایی به فرمت JSON ذخیره میکنه.

الان یه مدته که من هم سر و کارم به این بانک اطلاعاتی افتاده و دارم ازش استفاده میکنم. از این به بعد نکاتی رو که در رابطه با MongoDB بهشون بر میخورم رو هم تو این وبلاگ داکیومنت میکنم تا شاید بعدا به درد خودم یا کس دیگه ای بخوره.

خوب یکی از مواردی که تو کار با MongoDB ممکنه بهش بر بخوریم تغییر نام یک دیتابیس هستش. از اونجایی که خود MongoDB (حداقل تا الان) دستوری رو برای این منظور نداره و باید برای اینکار بصورت دیگه ای عمل کنیم. که در ادامه به چند روش انجام این کار اشاره میکنم:

تغییر نام بوسیله کپی کردن بانک اطلاعاتی:

یکی از روش هایی که برای تغییرنام میتونیم استفاده کنیم کپی بانک و پاک کردن نسخه قدیمی اون از روی سرور هستش، برای اینکار بصورت زیر عمل میکنیم:

> db.copyDatabase('old_database', 'new_database')
> use old_database
> db.dropDatabase()

تغییر نام بوسیله BackupRestore:

MongoDB برای Backup گیری از بانک ها و همچنین برگردوندن Backup ها دو تا دستور mongodump و mongorestore رو ارائه داده که میشه از اونها برای backup گیری از دیتابیس و برگردوندن backup با اسم جدید از اونها استفاده کرد. برای این منظور بصورت زیر عمل میکنیم:

mongodump --db old_database
mongorestore --db new_database /path/to/old_db_backup

پس از برگردوندن backup به سرور وصل میشیم و نسخه قدیمی رو با دستور dropDatabase پاک میکنیم:

mongo

> use old_database
> db.dropDatabase()


ادامه مطلب

منبع اصلی نوشتار زیر در این لینک قرار دارد

فعال سازی autoindent در ویرایشگر متن vi

برای کسانی که با لینوکس کار میکنن و زیاد با محیط shell سر و کار دارند، vi یکی از ابزاریه که کار کردن با اون یکی از واجبات به حساب میاد. از ویرایش فایل های config گرفته تا کارهای سطح بالاتری مثل diff گرفتن بین دو فایل.این ادیتور امکانات زیادی رو در اختیار کاربر میزاره که کاربر با کانفیگ vi حتی میتونه از اون به عنوان یه IDE حرفه ای استفاده کنه.

یکی از امکاناتی که vi در اختیار کاربر میزاره indent گزاری خودکار هستش که معمولا بطور پیش فرض این گزینه غیر فعال هستش.(البته تا اونجایی که من باهاش برخورد داشتم) برای اینکه بتونیم این امکان رو فعال کنیم باید توی فایل .vimrc خودمون این امکان رو فعال کنیم. برای اینکار این خط رو به فایل تنظیمات خودمون اضافه میکنیم :

set autoindent

بعد از انجام این تنظیم vi بطور خودکار خط های جدید رو با indentation خط قبلی ایجاد میکنه که این امکان بخصوص موقع کدنویسی خیلی بکارمون میاد.


ادامه مطلب

منبع اصلی نوشتار زیر در این لینک قرار دارد

رفع مشکل نصب obfsproxy بر روی ubuntu

چند وقت پیش که داشتم tor رو روی اوبونتو نصب میکردم، سراغ پروکسی گیج کننده (obfsproxy) هم رفتم. اما چون به یه خطایی خوردم بیخیالش شدم و با خود tor بدون استفاده از obfsproxy کار میکردم. تا اینکه امروز تنبلی رو کنار گذاشتم و با یه سرچ کوچیک توی اینترنت راه حل رفع مشکل نصب obfsproxy رو توی اوبونتو پیدا کردم.

برای اینکار، بعد از نصب tor باید بسته obfsproxy رو هم نصب کنیم:

sudo apt-get install tor
sudo apt-get install obfsproxy

حالا که بسته های مورد نیاز خودمون رو نصب کردیم باید تنظیمات tor رو انجام بدیم تا از obfsproxy استفاده کنه. برای اینکار فایل torrc خودمون رو ویرایش می‌کنیم:

sudo vi /etc/tor/torrc

تنظیمات زیر رو به انتهای این فایل اضافه میکنیم:

UseBridges 1
ClientTransportPlugin obfs2 exec /usr/bin/obfsproxy --managed
ClientTransportPlugin obfs3 exec /usr/bin/obfsproxy --managed

در اینجا یه نکته ای وجود داره و اونم اینه که ممکنه که obfsproxy تو مسیر دیگه ای نصب شده باشه ( توی راهنماهایی که توی اینترنت وجود داشت معمولا در مسیر /usr/local/bin ) که باید با توجه به مسیر نصب روی سیستم خودتون مسیر های دو خط آخر رو اصلاح کنید.

حالا بعد از انجام تنظیمات بالا نیاز داریم تا یکسری bridge برای استفاده tor داشته باشیم که برای بدست آوردن جدید ترین bridge ها یک ایمیل به آدرس [email protected] میفرستیم و توی متن ایمیل مون از یکی از دستورات زیر با توجه به نوع bridgeی که لازم داریم، استفاده میکنیم:

جهت دریافت bridge های عادی:

get bridges

جهت دریافت bridge های بر پایه obfs2:

get transport obfs2

 جهت دریافت bridge های بر پایه obfs3:

get transport obfs3

بعد از اینکه ایمیل درخواست خودمون رو ارسال کردیم، به فاصله چند لحظه یک ایمیل دریافت میکنیم که حاوی ۳ تا آدرس bridge از نوع مورد نظر ماست، این آدرس ها رو هم بصورت زیر در ادامه فایل تنظیمات اضافه میکنیم:

bridge [transport type] IP_ADDRESS:PORT [finger print]

بطور مثال برای bridge های عادی:

bridge 111.111.111.111:1111 21b87f4b3e43cce851344f0e85a24694b27d114b

و برای bridge های از نوع obfs2:

bridge obfs2 111.111.111.111:1111 21b87f4b3e43cce851344f0e85a24694b27d114b

حالا که تنظیمات خودمون رو انجام دادیم، فایل تنظیمات رو ذخیره میکنیم و سرویس tor رو دوباره راه اندازی میکنیم:

sudo service tor restart

بعد از راه اندازی سرویس tor میتونیم با مشاهده انتهای لاگ فایل tor از وصل شدن اون مطلع بشیم:

tailf /var/log/tor/log 

Nov 14 20:21:24.000 [notice] We now have enough directory information to build circuits.
Nov 14 20:21:24.000 [notice] Bootstrapped 80%: Connecting to the Tor network.
Nov 14 20:21:24.000 [notice] Bootstrapped 90%: Establishing a Tor circuit.
Nov 14 20:21:31.000 [notice] Tor has successfully opened a circuit. Looks like client functionality is working.
Nov 14 20:21:31.000 [notice] Bootstrapped 100%: Done.

خوب تا اینجا روش معمول راه اندازی bridge ها بر روی tor بود و اگه قرار نباشه از obfsproxy استفاده کنیم تا اینجا کارمون راه افتاده و میتونیم از tor استفاده کنیم.

اما اگه بخوایم از  bridge های بر پایه obfsproxy استفاده کنیم موقع اجرای tor با خطای زیر روبرو میشیم:

Nov 14 19:56:34.000 [warn] We were supposed to connect to bridge '54.164.6.73:40872' using pluggable transport 'obfs3', but we can't find a pluggable transport proxy supporting 'obfs3'. This can happen if you haven't provided a ClientTransportPlugin line, or if your pluggable transport proxy stopped running.

این خطا به دلیل مشکلی پیش میاد که توی اسکریپت apparmor برای tor وجود داره و برای رفع اون باید فایل اسکریپت apparmor برای tor رو ویرایش کنیم:

sudo vi /etc/apparmor.d/system_tor

توی این فایل باید مسیر obfsproxy رو بصورت زیر اضافه کنیم:

/usr/bin/obfsproxy  Ux,

که فایل اسکریپت به صورت زیر تغییر میکنه:

# vim:syntax=apparmor
#include <tunables/global>

profile system_tor {
  #include <abstractions/tor>

  owner /var/lib/tor/** rwk,
  owner /var/log/tor/* w,

  /usr/bin/obfsproxy  Ux,  ## this is the FIX

  /{,var/}run/tor/control w,
  /{,var/}run/tor/tor.pid w,
  /{,var/}run/tor/control.authcookie w,
  /{,var/}run/tor/control.authcookie.tmp rw,

  # Site-specific additions and overrides. See local/README for details.
  #include <local/system_tor>
}

حالا با راه اندازی مجدد tor خطای قبلی برطرف میشه و به شبکه tor وصل میشیم.


ادامه مطلب