ایجاد کاربر SFTP فقط‌خواندنی برای دریافت فایل‌های ضبط مکالمه در سرور ویپ



> **پیش از شروع:** ابتدا باید ماژول **VoIP** را فعال کنید. به **تنظیمات → ارتقای سیستم** بروید، > ماژول **VoIP** را فعال کنید، سپس به این راهنما بازگردید.

معرفی

وقتی گزینه **Voice Record** فعال باشد، نرم‌افزار ویندوزی **رابط VoIP لویال‌اکسیس** فایل ضبط‌شده هر تماس را از طریق **SFTP** از سرور آستریسک دانلود می‌کند و آن را به CRM می‌فرستد. در تنظیمات این نرم‌افزار، فیلدها **UserRoot** و **PassRoot** نام دارند، اما برخلاف این نام‌ها، نرم‌افزار اصلاً به حساب `root` نیازی **ندارد**.
در این راهنما یاد می‌گیرید چطور روی سرور آستریسک یک کاربر جداگانه بسازید که **فقط بتواند فایل‌های ضبط‌شده را از طریق SFTP بخواند**. این کاربر:
  • نمی‌تواند خط فرمان (شل) باز کند.
  • نمی‌تواند هیچ فایلی را آپلود، ویرایش، تغییر نام یا حذف کند.
  • به هیچ چیز خارج از پوشه فایل‌های ضبط‌شده دسترسی ندارد.
این مراحل روی **FreePBX** (سنگوما لینوکس یا دبیان)، **Issabel** و **آستریسک** معمولی روی دبیان، اوبونتو، CentOS یا Rocky Linux کار می‌کند. در این راهنما نام کاربر `voiprec` در نظر گرفته شده است.

چرا نباید از root استفاده کنید

  • **رمز عبور بدون رمزنگاری ذخیره می‌شود.** نرم‌افزار ویندوزی رمز را به‌صورت متن ساده در رجیستری ویندوز نگه می‌دارد. هر کسی که به آن پروفایل ویندوز یا نسخه پشتیبان آن دسترسی داشته باشد، می‌تواند رمز را ببیند.
  • **رمز روی رایانه همه کارشناسان وجود دارد.** همین رمز روی رایانه تک‌تک کارشناسان وارد می‌شود. اگر `root` باشد، هر کدام از این رایانه‌ها کنترل کامل سرور تلفن شما را در اختیار دارد.
  • **اغلب root اصلاً اجازه ورود ندارد.** در بسیاری از سامانه‌های PBX ورود `root` از طریق SSH بسته است (`PermitRootLogin no`)، پس ممکن است اصلاً کار نکند.

نرم‌افزار ویندوزی به چه دسترسی‌ای نیاز دارد

این نرم‌افزار فقط فایل می‌خواند. کاری که دقیقاً انجام می‌دهد:
موردمقدار
پروتکلSFTP، همیشه روی **پورت ۲۲** (قابل تغییر نیست)
روش ورود**فقط رمز عبور** (کلید SSH پشتیبانی نمی‌شود)
پوشه اصلیمقدار تنظیم **Rec Path**، به‌طور پیش‌فرض `/var/spool/asterisk/monitor`
کارهافهرست پوشه اصلی و پوشه‌های تاریخ‌دار `yyyy/MM/dd` را می‌گیرد و سپس فایل ضبط‌شده را دانلود می‌کند
هرگز انجام نمی‌دهدنوشتن، تغییر نام، حذف یا اجرای دستور
بنابراین کاربر فقط به این دسترسی‌ها نیاز دارد:
  • اجازه **عبور** از همه پوشه‌ها از `/` تا پوشه فایل‌های ضبط‌شده.
  • اجازه **خواندن و دیدن فهرست** پوشه فایل‌های ضبط‌شده و همه زیرپوشه‌های آن.
  • اجازه **خواندن** خود فایل‌های ضبط‌شده.
  • یک نشست SFTP، و نه چیز دیگر.

پیش از شروع

  • به **دسترسی root** روی سرور آستریسک نیاز دارید (از طریق SSH یا کنسول خود سرور).
  • همه دستورات این راهنما را **با کاربر root** روی سرور آستریسک اجرا کنید.
  • تا پایان مرحله ۵، نشست فعلی root خود را **باز نگه دارید**. اگر در تنظیمات SSH اشتباهی رخ دهد، هنوز می‌توانید از همین نشست آن را درست کنید.

مرحله ۱: ساخت کاربر

  1. برنامه `nologin` را روی سرور پیدا کنید. مسیر آن در دبیان، اوبونتو و FreePBX 17 برابر `/usr/sbin/nologin` و در CentOS، سنگوما لینوکس و Issabel برابر `/sbin/nologin` است. این دستور مسیر را خودش پیدا می‌کند:
bash
NOLOGIN=$(command -v nologin)
  1. کاربر `voiprec` را بدون پوشه خانگی و بدون امکان ورود بسازید:
bash
useradd --system --no-create-home --home-dir /nonexistent --shell "$NOLOGIN" voiprec
  1. برای کاربر رمز عبور تعیین کنید:
bash
passwd voiprec
  1. یک **رمز طولانی و تصادفی** انتخاب کنید. این همان رمزی است که بعداً در فیلد **PassRoot** نرم‌افزار ویندوزی وارد می‌کنید.
شل `nologin` جلوی ورود معمولی از طریق SSH را می‌گیرد. با این حال SFTP همچنان کار می‌کند، چون در مرحله ۳ سرور SFTP داخلی (`internal-sftp`) را اجباری می‌کنیم و این سرور اصلاً از شل کاربر استفاده نمی‌کند.

مرحله ۲: دسترسی فقط‌خواندنی به فایل‌های ضبط‌شده

فایل‌های ضبط‌شده معمولاً متعلق به کاربر و گروه `asterisk` هستند و پوشه‌های تاریخ‌دار اغلب برای همین گروه قابل نوشتن‌اند. اگر فقط `voiprec` را به گروه `asterisk` اضافه کنید، این کاربر می‌تواند فایل‌های ضبط‌شده را **حذف** کند و تنظیمات آستریسک را هم بخواند. به‌جای این کار از **ACL** (فهرست کنترل دسترسی) استفاده کنید که امکان می‌دهد فقط به یک کاربر مشخص دسترسی خواندن بدهید.
  1. مسیر پوشه فایل‌های ضبط‌شده را در یک متغیر ذخیره کنید. اگر **Rec Path** شما متفاوت است، مسیر خودتان را اینجا بنویسید:
bash
REC=/var/spool/asterisk/monitor
  1. مطمئن شوید ابزارهای ACL نصب هستند. معمولاً از قبل نصب‌اند:
bash
command -v setfacl >/dev/null || { apt-get install -y acl 2>/dev/null || yum install -y acl; }
  1. به `voiprec` اجازه خواندن همه پوشه‌ها و فایل‌های موجود را بدهید:
bash
setfacl -R -m u:voiprec:rX "$REC"
  1. یک **ACL پیش‌فرض** تنظیم کنید تا پوشه‌ها و فایل‌های جدید هم به‌طور خودکار همین دسترسی را بگیرند:
bash
setfacl -R -d -m u:voiprec:rX "$REC"
  1. اجازه عبور از پوشه‌های بالادستی را به کاربر بدهید:
bash
for d in /var /var/spool /var/spool/asterisk; do setfacl -m u:voiprec:x "$d"; done
> **مهم:** ACL پیش‌فرض در بند ۴ را جا نیندازید. آستریسک هر روز یک پوشه جدید `yyyy/MM/dd` می‌سازد. بدون ACL پیش‌فرض، `voiprec` فایل‌های ضبط‌شده هیچ روز جدیدی را نمی‌بیند.

مرحله ۳: محدود کردن کاربر به SFTP فقط‌خواندنی

  1. از فایل تنظیمات سرور SSH نسخه پشتیبان بگیرید:
bash
cp -a /etc/ssh/sshd_config /etc/ssh/sshd_config.bak.$(date +%F)
  1. فایل `/etc/ssh/sshd_config` را باز کنید و این بخش را **در انتهای** فایل اضافه کنید. هر چیزی که بعد از یک خط `Match` بیاید تا خط `Match` بعدی جزو همان بخش حساب می‌شود، پس حتماً باید در انتهای فایل باشد.
javascript
Match User voiprec
    ForceCommand internal-sftp -R
    PasswordAuthentication yes
    PermitTTY no
    AllowTcpForwarding no
    AllowAgentForwarding no
    X11Forwarding no
    PermitTunnel no
  1. بررسی کنید که آیا در فایل خطی با `AllowUsers` یا `AllowGroups` وجود دارد:
bash
grep -E '^\s*(AllowUsers|AllowGroups)' /etc/ssh/sshd_config
  1. اگر این دستور خطی نمایش داد، `voiprec` را به آن خط اضافه کنید (مثلاً `AllowUsers admin voiprec`). در غیر این صورت ورود کاربر رد می‌شود.
  1. فایل را از نظر خطا بررسی کنید:
bash
sshd -t
  1. اگر بررسی هیچ پیامی نشان نداد، تنظیمات جدید را اعمال کنید:
bash
systemctl reload sshd 2>/dev/null || systemctl reload ssh
> **هشدار:** اگر `sshd -t` خطایی نشان داد، سرویس را **بارگذاری مجدد نکنید**. اول فایل را اصلاح کنید یا آن را از نسخه پشتیبانی که در بند ۱ گرفتید برگردانید.
کاری که هر خط انجام می‌دهد:
خطکاربرد
`ForceCommand internal-sftp -R`سرور SFTP را در **حالت فقط‌خواندنی** اجرا می‌کند. آپلود، حذف، تغییر نام و ساخت پوشه رد می‌شود، حتی اگر مجوزهای فایل اجازه بدهند.
`PasswordAuthentication yes`ورود با رمز عبور را مجاز می‌کند، چون نرم‌افزار ویندوزی فقط از رمز پشتیبانی می‌کند. این تنظیم فقط برای `voiprec` اعمال می‌شود و `root` و سایر حساب‌ها می‌توانند همچنان فقط با کلید وارد شوند.
`PermitTTY no`جلوی باز شدن ترمینال تعاملی را می‌گیرد.
`AllowTcpForwarding no`، `AllowAgentForwarding no`، `X11Forwarding no`، `PermitTunnel no`هر نوع تونل و ارسال ترافیک از طریق این حساب را مسدود می‌کند.
ACLهای مرحله ۲ و حالت فقط‌خواندنی در این مرحله، **مستقل از هم** از فایل‌های ضبط‌شده محافظت می‌کنند. اگر یکی از آن‌ها روزی به اشتباه تغییر کند، دیگری همچنان جلوی هر تغییری را می‌گیرد.

مرحله ۴: فایروال و fail2ban

  • **فایروال (فایروال FreePBX، iptables، firewalld یا ufw):** پورت TCP **۲۲** را فقط برای آدرس IP کارشناسان یا شبکه دفتر باز کنید. فقط برای این کار، SSH را روی کل اینترنت باز نکنید. دستورات دقیق در بخش [فایروال](#فایروال) از مرجع دستورات آمده است.
  • **fail2ban:** اگر رمز روی رایانه یک کارشناس اشتباه باشد، نرم‌افزار بعد از هر تماس دوباره تلاش می‌کند و fail2ban آدرس IP آن رایانه را مسدود می‌کند. اگر ناگهان فایل‌های ضبط‌شده یک کارشناس دیگر دریافت نشد، فهرست مسدودشده‌ها را با `fail2ban-client status sshd` بررسی کنید. برای جلوگیری از این مشکل می‌توانید شبکه دفتر را به `ignoreip` در فایل `/etc/fail2ban/jail.local` اضافه کنید.

مرحله ۵: بررسی درستی تنظیمات

روی سرور آستریسک

  1. فهرست پوشه فایل‌های ضبط‌شده را با کاربر `voiprec` بگیرید. باید پوشه‌های سال را ببینید:
bash
sudo -u voiprec ls /var/spool/asterisk/monitor
  1. فهرست پوشه امروز را بگیرید. این کار نشان می‌دهد ACL پیش‌فرض درست کار می‌کند:
bash
sudo -u voiprec ls /var/spool/asterisk/monitor/$(date +%Y/%m/%d)
  1. یک فایل ضبط‌شده را بخوانید. به‌جای `<some-recording>.wav` نام یک فایل واقعی را بنویسید. خروجی باید `readable` باشد:
bash
sudo -u voiprec head -c 1 <some-recording>.wav >/dev/null && echo readable
  1. سعی کنید پوشه تنظیمات آستریسک را باز کنید. این دستور **باید** با پیام `Permission denied` **شکست بخورد**:
bash
sudo -u voiprec ls /etc/asterisk

از یک رایانه ویندوزی

OpenSSH در ویندوز ۱۰ و ۱۱ به‌صورت پیش‌فرض وجود دارد، پس می‌توانید از رایانه هر کارشناسی آزمایش کنید.
  1. **Command Prompt** را باز کنید و یک نشست SFTP شروع کنید. به‌جای `<pbx-ip>` آدرس سرور آستریسک را بنویسید و وقتی رمز خواسته شد، رمز `voiprec` را وارد کنید:
javascript
sftp voiprec@<pbx-ip>
  1. داخل نشست این دستورات را اجرا کنید. `ls` باید فهرست پوشه‌ها را نشان دهد و `get` باید فایل را دانلود کند:
javascript
cd /var/spool/asterisk/monitor
ls
get <some-recording>.wav
  1. سعی کنید فایل را حذف کنید. این کار **باید** با پیام `Permission denied` **شکست بخورد**:
javascript
rm <some-recording>.wav
  1. نشست را ببندید:
javascript
bye
  1. یک ورود معمولی SSH را امتحان کنید. این ورود **باید رد شود** یا اتصال بلافاصله بسته شود:
javascript
ssh voiprec@<pbx-ip>

مرحله ۶: وارد کردن کاربر در نرم‌افزار ویندوزی

  1. تنظیمات نرم‌افزار **رابط VoIP لویال‌اکسیس** را باز کنید.
  2. فیلدها را به این شکل پر کنید:
فیلدمقدار
**VoIP IP**آدرس سرور آستریسک
**UserRoot**`voiprec`
**PassRoot**رمزی که در مرحله ۱ تعیین کردید
**Rec Path**`/var/spool/asterisk/monitor` (یا پوشه فایل‌های ضبط‌شده شما)
  1. گزینه **Voice Record**، گزینه **Generate AI Call Summary Locally** یا هر دو را فعال کنید.
  2. روی دکمه **Browse** کنار **Rec Path** کلیک کنید. اگر پوشه‌های سال در فهرست نمایش داده شدند، کاربر درست کار می‌کند.
  1. یک تماس آزمایشی بگیرید. پس از پایان تماس، در گزارش نرم‌افزار باید `[SFTP] Found: ...` و سپس `[SFTP] Downloaded ... bytes` را ببینید.

مرجع دستورات

در این بخش همه دستورات این راه‌اندازی یک‌جا و به ترتیب اجرا آمده‌اند و زیر هر کدام توضیح کوتاهی نوشته شده است. همه را با کاربر root روی سرور آستریسک اجرا کنید. اگر **Rec Path** شما متفاوت است، مقدار `REC` را تغییر دهید و به‌جای `192.168.1.0/24` شبکه کارشناسان خود را بنویسید.

راه‌اندازی

bash
REC=/var/spool/asterisk/monitor
مسیر پوشه فایل‌های ضبط‌شده را در یک متغیر ذخیره می‌کند تا دستورات بعدی همه از همین مسیر استفاده کنند. این مقدار باید با **Rec Path** در نرم‌افزار ویندوزی یکی باشد.
bash
NOLOGIN=$(command -v nologin)
برنامه `nologin` را پیدا می‌کند: `/usr/sbin/nologin` در دبیان و FreePBX 17، و `/sbin/nologin` در CentOS، سنگوما لینوکس و Issabel. وقتی این برنامه شل کاربر باشد، کاربر نمی‌تواند وارد خط فرمان شود.
bash
useradd --system --no-create-home --home-dir /nonexistent --shell "$NOLOGIN" voiprec
حساب `voiprec` را می‌سازد. `--system` آن را یک حساب سرویس می‌کند (شناسه کاربری پایین و بدون انقضای رمز). `--no-create-home` و `/nonexistent` باعث می‌شوند کاربر پوشه خانگی برای ذخیره فایل نداشته باشد. `--shell` هم امکان ورود را از کاربر می‌گیرد.
bash
PASS=$(openssl rand -base64 24); echo "voiprec:$PASS" | chpasswd; echo "$PASS"
یک رمز تصادفی ۳۲ کاراکتری می‌سازد، بدون پرسیدن روی حساب تنظیم می‌کند و یک بار نمایش می‌دهد تا آن را در **PassRoot** کپی کنید. اگر ترجیح می‌دهید رمز را خودتان تایپ کنید، به‌جای آن از `passwd voiprec` استفاده کنید.
bash
command -v setfacl >/dev/null || { apt-get install -y acl 2>/dev/null || yum install -y acl; }
اگر ابزارهای ACL (`setfacl` و `getfacl`) نصب نباشند، آن‌ها را نصب می‌کند. معمولاً از قبل نصب هستند.
bash
setfacl -R -m u:voiprec:rX "$REC"
به `voiprec` اجازه خواندن هر چیزی را می‌دهد که الان در پوشه فایل‌های ضبط‌شده هست. `-R` یعنی همه زیرپوشه‌ها، `-m` یعنی افزودن یک مجوز و `r` یعنی خواندن. حرف بزرگ `X` اجازه «باز کردن پوشه» را فقط به پوشه‌ها می‌دهد، پس فایل‌های ضبط‌شده اجرایی نمی‌شوند.
bash
setfacl -R -d -m u:voiprec:rX "$REC"
همان مجوز را به‌عنوان **ACL پیش‌فرض** (`-d`) روی همه پوشه‌ها تنظیم می‌کند. آستریسک هر روز یک پوشه جدید `yyyy/MM/dd` می‌سازد و فایل‌ها و پوشه‌های جدید این مجوز را به ارث می‌برند. بدون آن، کاربر فایل‌های ضبط‌شده روزهای جدید را نمی‌بیند.
bash
for d in /var /var/spool /var/spool/asterisk; do setfacl -m u:voiprec:x "$d"; done
روی پوشه‌های بالادستی فقط اجازه عبور (`x`) می‌دهد. کاربر می‌تواند به پوشه فایل‌های ضبط‌شده برسد، اما نمی‌تواند محتوای دیگر این پوشه‌ها را ببیند. اگر این پوشه‌ها از قبل برای همه باز باشند، چیزی تغییر نمی‌کند.
bash
cp -a /etc/ssh/sshd_config /etc/ssh/sshd_config.bak.$(date +%F)
پیش از ویرایش، از تنظیمات سرور SSH نسخه پشتیبان می‌گیرد. `-a` مجوزهای فایل را حفظ می‌کند و تاریخ امروز به نام نسخه پشتیبان اضافه می‌شود.
bash
grep -q '^Match User voiprec' /etc/ssh/sshd_config || cat >> /etc/ssh/sshd_config <<'EOF'

Match User voiprec
    ForceCommand internal-sftp -R
    PasswordAuthentication yes
    PermitTTY no
    AllowTcpForwarding no
    AllowAgentForwarding no
    X11Forwarding no
    PermitTunnel no
EOF
بخش محدودیت را به انتهای فایل اضافه می‌کند، اما فقط اگر از قبل وجود نداشته باشد؛ پس اگر دو بار اجرا شود، تکراری اضافه نمی‌شود. توضیح هر خط در [مرحله ۳](#مرحله-۳-محدود-کردن-کاربر-به-sftp-فقط‌خواندنی) آمده است. به‌طور خلاصه، فقط SFTP فقط‌خواندنی را مجاز می‌کند و ورود با رمز را فقط برای همین کاربر فعال می‌کند.
bash
grep -E '^\s*(AllowUsers|AllowGroups)' /etc/ssh/sshd_config
نشان می‌دهد که آیا SSH به کاربران یا گروه‌های خاصی محدود شده است. اگر خطی نمایش داد، `voiprec` را به آن اضافه کنید (مثلاً `AllowUsers admin voiprec`). در غیر این صورت ورود رد می‌شود.
bash
sshd -t
فایل تنظیمات را بدون اعمال کردن، از نظر خطا بررسی می‌کند. اگر هیچ پیامی نشان ندهد، فایل سالم است. **اگر خطایی نمایش داد، بارگذاری مجدد نکنید.**
bash
systemctl reload sshd 2>/dev/null || systemctl reload ssh
تنظیمات جدید را اعمال می‌کند. نام سرویس در سیستم‌های خانواده CentOS برابر `sshd` و در دبیان و اوبونتو برابر `ssh` است. بارگذاری مجدد، نشست‌های SSH باز را قطع نمی‌کند.
bash
sshd -T -C user=voiprec,host=localhost,addr=127.0.0.1 | grep -Ei 'forcecommand|passwordauthentication|permittty'
تنظیماتی را نشان می‌دهد که SSH **در عمل** روی `voiprec` اعمال می‌کند. باید `forcecommand internal-sftp -R`، `passwordauthentication yes` و `permittty no` را ببینید. اگر چیز دیگری دیدید، یک بخش `Match` قبلی یا یک فایل ضمیمه‌شده تنظیمات شما را بازنویسی می‌کند.

فایروال

فقط دستورات مربوط به فایروالی را اجرا کنید که سرور شما از آن استفاده می‌کند.
bash
fwconsole firewall trust 192.168.1.0/24
**FreePBX:** شبکه کارشناسان را به ناحیه *Trusted* فایروال FreePBX اضافه می‌کند تا SSH از آن شبکه مجاز باشد. همین کار را می‌توانید در پنل مدیریت FreePBX از مسیر **Connectivity → Firewall** هم انجام دهید.
bash
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name="ssh" accept'
firewall-cmd --reload
**firewalld (CentOS، Rocky Linux، Issabel):** SSH را فقط از همان شبکه مجاز می‌کند. `--permanent` قانون را پس از راه‌اندازی مجدد هم نگه می‌دارد و `--reload` آن را همین حالا اعمال می‌کند.
bash
ufw allow from 192.168.1.0/24 to any port 22 proto tcp
**ufw (اوبونتو، دبیان):** پورت TCP ۲۲ را فقط برای همان شبکه باز می‌کند.

بررسی

bash
sudo -u voiprec ls "$REC"
sudo -u voiprec ls "$REC/$(date +%Y/%m/%d)"
فهرست پوشه اصلی و پوشه امروز را با کاربر `voiprec` می‌گیرد. اگر هر دو کار کنند، ACL و ACL پیش‌فرض درست هستند. `sudo -u` دستور را مستقیم اجرا می‌کند، پس شل `nologin` مانع نمی‌شود.
bash
sudo -u voiprec head -c 1 "$(find "$REC" -type f | tail -n 1)" >/dev/null && echo readable
اولین بایت یک فایل ضبط‌شده را با کاربر `voiprec` می‌خواند. اگر دانلود کار کند، `readable` نمایش داده می‌شود.
bash
sudo -u voiprec ls /etc/asterisk
sudo -u voiprec touch "$REC/test"
هر دو دستور **باید** با پیام `Permission denied` **شکست بخورند**. این نشان می‌دهد کاربر نمی‌تواند تنظیمات آستریسک را بخواند و نمی‌تواند در پوشه فایل‌های ضبط‌شده چیزی بنویسد.
bash
getfacl "$REC"
ACL پوشه فایل‌های ضبط‌شده را نشان می‌دهد. باید `user:voiprec:r-x` و `default:user:voiprec:r-x` را ببینید.
از یک رایانه ویندوزی:
javascript
sftp voiprec@<pbx-ip>
یک نشست SFTP دقیقاً به همان روشی باز می‌کند که نرم‌افزار ویندوزی باز می‌کند. داخل آن، `ls` و `get ` باید کار کنند و `rm ` و `put ` باید شکست بخورند.
javascript
ssh voiprec@<pbx-ip>
نباید خط فرمان باز شود. اتصال بسته می‌شود یا اعلام می‌کند که فقط SFTP را می‌پذیرد.

نگه‌داری

bash
passwd voiprec
رمز عبور را تغییر می‌دهد؛ مثلاً وقتی رایانه یک کارشناس گم یا دزدیده شده است. پس از آن، **PassRoot** را در نرم‌افزار ویندوزی روی همه رایانه‌ها به‌روز کنید.
bash
tail -f /var/log/auth.log
bash
tail -f /var/log/secure
ورودهای SSH را به‌صورت زنده نشان می‌دهد. در دبیان، اوبونتو و FreePBX 17 از `/var/log/auth.log` و در CentOS، سنگوما لینوکس و Issabel از `/var/log/secure` استفاده کنید. پیام `Accepted password for voiprec` یعنی یک رایانه با موفقیت وصل شده و `Failed password` یعنی رمز روی یکی از رایانه‌ها اشتباه است.
bash
fail2ban-client status
fail2ban-client status sshd
fail2ban-client set sshd unbanip 192.168.1.25
به ترتیب: فهرست بخش‌های (jail) fail2ban را نشان می‌دهد، آدرس‌های IP مسدودشده در بخش SSH را نمایش می‌دهد و یک آدرس IP را از حالت مسدود خارج می‌کند. در FreePBX ممکن است نام این بخش `ssh-iptables` باشد؛ خروجی دستور اول را بررسی کنید.
bash
setfacl -R -m u:voiprec:rX "$REC"
setfacl -R -d -m u:voiprec:rX "$REC"
پس از بازیابی یا ارتقای سرور، یا هر وقت فایل‌های ضبط‌شده خطای `Permission denied` دادند، این دو دستور را دوباره اجرا کنید. اجرای چندباره آن‌ها هیچ مشکلی ندارد.
bash
echo '*/10 * * * * root setfacl -R -m u:voiprec:rX /var/spool/asterisk/monitor/$(date +\%Y/\%m/\%d)' > /etc/cron.d/voiprec-acl
فقط وقتی لازم است که یک اسکریپت فایل‌های ضبط‌شده را به پوشه **منتقل** کند (مثلاً اسکریپت تبدیل به MP3)، چون فایل‌های منتقل‌شده ACL پیش‌فرض را به ارث نمی‌برند. این کار هر ۱۰ دقیقه دسترسی خواندن را فقط روی پوشه امروز درست می‌کند تا روی آرشیوهای بزرگ هم سریع باشد. در فایل‌های cron باید `%` را به شکل `\%` بنویسید.

حذف

bash
setfacl -R -x u:voiprec "$REC"
setfacl -R -d -x u:voiprec "$REC"
for d in /var /var/spool /var/spool/asterisk; do setfacl -x u:voiprec "$d"; done
مجوزهای ACL معمولی (`-x`) و پیش‌فرض (`-d -x`) کاربر را از پوشه فایل‌های ضبط‌شده و پوشه‌های بالادستی حذف می‌کند.
bash
userdel voiprec
rm -f /etc/cron.d/voiprec-acl
حساب کاربری و وظیفه زمان‌بندی‌شده اختیاری را حذف می‌کند. سپس بخش `Match User voiprec` را از فایل `/etc/ssh/sshd_config` پاک کنید، `sshd -t` را اجرا کنید و دستور بارگذاری مجدد را دوباره بزنید.

عیب‌یابی

آنچه در گزارش یا Browse می‌بینیدعلت احتمالی و راه‌حل
`Permission denied (password)` یا خطای ورودرمز اشتباه است، `PasswordAuthentication` برای این کاربر هنوز `no` است، `voiprec` در `AllowUsers` نیست، یا fail2ban آدرس IP رایانه را مسدود کرده است.
پایان مهلت اتصال (Connection timed out)فایروال پورت ۲۲ را بسته است، یا SSH روی پورت دیگری اجرا می‌شود. نرم‌افزار ویندوزی همیشه از پورت ۲۲ استفاده می‌کند.
**Browse** کار می‌کند، اما تماس‌های امروز خطای `Path not found` می‌دهند یا پیدا نمی‌شوندACL پیش‌فرض اعمال نشده، پس پوشه‌های تاریخ‌دار جدید قابل خواندن نیستند. هر دو دستور `setfacl` در مرحله ۲ را دوباره اجرا کنید.
`Permission denied` فقط هنگام دانلودفایل ضبط‌شده به‌جای اینکه در همان پوشه ساخته شود، به آنجا **منتقل** شده (مثلاً با اسکریپت تبدیل به MP3) و ACL پیش‌فرض را به ارث نبرده است. اسکریپت را طوری تنظیم کنید که فایل را در همان محل بسازد، یا از وظیفه زمان‌بندی‌شده در دستورات [نگه‌داری](#نگه‌داری) استفاده کنید.
قبلاً کار می‌کرد، اما پس از ارتقا یا بازیابی سرور متوقف شدبازیابی، ACLها را بازنشانی کرده است. مرحله ۲ را دوباره انجام دهید.

راه جایگزین: استفاده از گروه asterisk

اگر ACL روی سرور شما در دسترس نیست (مثلاً روی یک سیستم فایل غیرمعمول)، می‌توانید به‌جای مرحله ۲ کاربر را به گروه `asterisk` اضافه کنید:
bash
usermod -aG asterisk voiprec
> **هشدار:** این روش امنیت کمتری دارد. اگر پوشه‌های فایل‌های ضبط‌شده برای گروه قابل نوشتن باشند (خروجی `ls -ld` به شکل `drwxrwxr-x` باشد)، مجوزهای فایل به کاربر اجازه حذف فایل‌های ضبط‌شده را می‌دهند. کاربر همچنین می‌تواند فایل‌های دیگری را که گروه به آن‌ها دسترسی دارد بخواند، مانند `/etc/asterisk`. در این حالت **حتماً** `internal-sftp -R` در مرحله ۳ را نگه دارید، چون تنها چیزی است که جلوی تغییرات را می‌گیرد.