اگرچه من احساساتم نسبت به snap در اوبونتو متناقضه و نمیدونم باهاش حال میکنم یا نه، اما امروز یه موضوع جالب رو کشف کردم. روی App Center اوبونتو، VSCode رو نصب کردم و وقتی خواستم یه پکیجی رو با sudo apt توی ترمینال یکپارچه نصب کنم این خطا رو گرفتم:
sudo: The "no new privileges" flag is set, which prevents sudo from running as root.
sudo: If sudo is running in a container, you may need to adjust the container configuration to disable the flag.
این خطا به دلیل سیاستهای امنیتی Snap اتفاق میافته. Snap برای ایزولهسازی برنامهها از سیستم اصلی، فلگ امنیتی به نام no new privileges (NNP) رو فعال میکنه. این فلگ مانع از اجرای دستورات با دسترسی ریشه (root) در محیط محدود Snap میشه. به همین دلیل، حتی اگر کاربر مجاز به استفاده از sudo باشه، در ترمینال داخلی VS Code نسخه Snap این امکان وجود نداره.
راهکارهای رفع مشکل
۱. نصب نسخهی رسمی (deb) از وبسایت مایکروسافت
راهکار اول اینه که VS Code رو از وبسایت رسمی Visual Studio Code دانلود کنید. نسخهی .deb محدودیتهای Snap رو ندارد و بهطور کامل با ترمینال داخلی سازگار هستش:
sudo apt install ./code_*.deb
۲. نصب VS Code با حالت کلاسیک Snap
اگر همچنان اصرار دارید که از Snap استفاده کنید، میتونید VS Code را با گزینهی --classic نصب کنید تا محدودیتهای امنیتی کاهش یابد:
sudo snap remove code
sudo snap install code --classic
۳. فلگ no-sandbox
وقتی VS Code رو با Snap نصب میکنیم، اون محدودیت امنیتی (sandbox) باعث میشه نتونیم داخل ترمینال داخلی از sudo استفاده کنیم. یکی از راههای دور زدن این موضوع اینه که VS Code رو با فلگ --no-sandbox اجرا کنیم:
code --no-sandbox
این کار باعث میشه اون پرچم امنیتی غیرفعال بشه و پروسههایی که VS Code اجرا میکنه بتونن به صورت root کار کنن. در نتیجه، دستورهای sudo داخل ترمینال VS Code جواب میدن.
⚠️ نکته مهم
این راهحل یه جور میانبره و امنیت سیستم رو کمتر میکنه. Snap عمداً جلوی اجرای پروسهها با دسترسی root رو گرفته تا اگه یه افزونه یا کدی داخل VS Code مشکل امنیتی داشت، نتونه به کل سیستم آسیب بزنه. وقتی --no-sandbox رو میزنی، این محافظ برداشته میشه.
🚫 کارهایی که نمیتونی انجام بدی
- نمیتونی این پرچم رو با ویرایش فایل
/etc/sudoersیا تنظیمات VS Code غیرفعال کنی. - نمیتونی برای هر دستور جداگانه داخل محیط Snap این محدودیت رو دور بزنی.
- این محدودیت بهصورت ذاتی داخل مدل امنیتی Snap قرار داده شده — پس تنها راه واقعی برای «غیرفعال کردنش» اینه که VS Code رو خارج از حالت محدودکنندهی Snap اجرا کنی.

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