روی یکی از Windows Server هایی که داشتم، با فایلی مواجه شدم که رفتار غیرعادی داشت و امکان Copy/Past/Rename/Delete/Edite آن وجود نداشت. زمانیکه روی فایل راست کلیک کردم و تب Security را باز کردم خطای زیر نمایش داده میشد. کلا هیچ تغییری روی فایل نمیشد داد. فایلی که داشتم با نام COM2.licens-g.cer روی سرور ایجاد شده بود.

این خطا "The requested security information is either unavailable or cannot be displayed" غالبا به دلیل خرابی در (ACL (Access Control List فایل یا از دست رفتن مالکیت (Ownership) فایل رخ میدهد.
برای حل مشکل از روش های گوناگونی میشه استفاده کرد. مطابق زیر استفاده از ابزار takeown و Unlocker یا سایر ابزارها میباشد.
تغییر مالکیت فایل از طریق خط فرمان (Command Prompt)
چون رابط گرافیکی (GUI) اجازه دسترسی نمیدهد، CMD را با دسترسی Administrator باز میکنیم سپس از دستور takeown در ویندوز سرور خود استفاده میکنیم که مالکیت فایل رو بگیریم ازش. (به جای مسیر فایل، مسیر دقیق خود را بگذارید. آپشن /a مالکیت را به گروه Administrators میدهد) :
سپس برای دادن دسترسی کامل به خودتان، این دستور را بزنید :
من در اینجا زمانیکه از دستور takeown استفاده کردم خطای ERROR The system cannot find the file specified نمایش داده شد :
خطای ERROR The system cannot find the file specified زمانی رخ میده که نام فایل با کلماتی مثل COM1 تا COM9 ، LPT1 ، CON ، PRN و NUL شروع شده باشد که این نامهای رزرو شده (Reserved Names) سیستم عامل ویندوز هستند که به درگاههای سختافزاری اشاره دارند و قابل استفاده در نام فایل های دیگر نیستند. برای همین ویندوز به صورت عادی اجازه دسترسی، حذف یا تغییر امنیت این فایلها را نمیدهد چون آنها را به عنوان فایل فیزیکی نمیشناسد. برای همین ممکن است سرویس هایی که روی سیستم عامل هستند زمانیکه به فایلی با نام COM2 میرسد، ویندوز به نرمافزار یا آن سرویس ها میگوید که این یک فایل نیست، یک پورت سختافزاری است، و چون پاسخی دریافت نمیشود، آن سرویس با اختلال یا خطا مواجه میگردد. حتی گهگاهی هکران عمدتا فایل هایی با این نامها ایجاد میکنند که ابزارهای امنیتی یا مدیران سرورها نتوانند این فایل ها را اسکن و پیدا کنند یا به صورت دستی حذف نمایند و باعث اختلال در عملکرد سرویس ها بشه.
لیست نام ها و پورت های رزرو شده در مایکروسافت را میتوانید از طریق لینک زیر مشاهده بفرمایید :
حذف فایل با استفاده از مسیر مستقیم (UNC)
برای حل این مشکل، باید از سینتکس مخصوص "Universal Naming Convention" برای دور زدن محدودیتهای Win32 استفاده کرد. اگر میخواهید تنها نام فایل را تغییر نام دهید از دستور اول و در صورتیکه قصد حذف فایل را دارید از دستور دوم استفاده کنید.
با توجه به اینکه فایلی که من داشتم خراب و مشکوک بود، آنرا حذف کردم. در صورتیکه شما آنرا نیاز دارید با توجه موارد امنیتی که گفته شد حتما بعد از درست شدن فایل آنرا با استفاده از ابزارهای امنیتی اسکن کنید.
همچنین ممکن است این سوال برای شما پیش بیاید که چرا زمانیکه سیستم عامل ویندوز یکسری نامهای رزرو شده دارد اجازه ایجاد همچین فایلی با نام ها رزرو شده داده شده است؟
علت اصلی این تضاد، تفاوت در نحوه تعامل پروتکلهای انتقال فایل (مثل FTP یا File Manager کنترل پنل هایی مانند سی پنل، پلسک، دایرکت ادمین و ...) با هسته سیستمعامل ویندوز است. ویندوز از دو لایه زیرساختی Win32 API و NT استفاده میکند.
Win32 API :
اکثر برنامههای معمولی و حتی Windows Explorer از این لایه استفاده میکنند که محدودیت نامهایی مثل COM1 یا PRN را اعمال میکند.
NT Layer :
هسته اصلی ویندوز (Kernel) این محدودیتها را ندارد.
کنترل پنل ها یا سرویسهای دیگر (مانند IIS یا سرویس FTP) مستقیماً با لایههای پایینتر یا سیستمفایل (NTFS) صحبت میکنند. به همین دلیل سیستم اجازه ایجاد (Create) فایل را میدهد، اما ابزارهای گرافیکی ویندوز بعدا نمیتوانند آن را مدیریت کنند.
یا دلیل دیگر حتی میتواند این فایل قبلا از طریق لینوکس یا سیستمعاملهای دیگر ایجاد یا آپلود شده باشد که چنین محدودیتهایی ندارند (مثل لینوکس یا مک که این نام ها کاملا قانونی هستند). زمانی که فایل از طریق پروتکل FTP یا کنترلپنل آپلود میشود، کنترل پنل ها صرفا فایل را در درایو ذخیره میکنند. از نظر فایلسیستم NTFS، نام COM2.xxx یک رشته متنی ساده است و تا زمانی که برنامهای نخواهد از طریق متدهای قدیمی Win32 آن را باز کند، مشکلی ایجاد نمیشود.
در آخر مطابق صحبتی که بالاتر انجام شد ممکن است این یک تکنیک نفوذ (Exploit) باشد. جالب است بدانید که نفوذگران یا نویسندگان بدافزار عمدا فایلهایی با این نامها (مثل CON یا COM1) ایجاد میکنند تا آنتیویروسهای قدیمی نتوانند آنها را اسکن یا حذف کنند یا مدیر سرور نتواند به راحتی آنها را به صورت دستی حذف کند.
استفاده از نام کوتاه DOS یا Illegal Characters
در صورتیکه روش بالا جواب نداد میتوانید از روش Rename/Remove Illegal Characters یا (نام کوتاه DOS) استفاده کنید. گاهگاهی به دلیل کاراکترهای خاص، استفاده از نام کوتاه 8 کاراکتری (8.3 filename) موثر است.
ابتدا با استفاده از دستور زیر به دایرکتوری مورد نظر بروید :
سپس لیست نامهای کوتاه را توسط دستور زیر پیدا کنید :
در ستونی که نامهای کوتاه (مثلاً چیزی شبیه COM2~1.CER) را نشان میدهد، نام فایل خود را پیدا کنید. فایل را با استفاده از آن نام کوتاه حذف کنید. به جای OLDNAME.CER~1 دقیقاً همان چیزی را بنویسید که در مرحله قبل مشاهده کردید.
در صورتیکه تا اینجای مقاله مشکل شما حل شده که هیچ در غیر اینصورت در ادامه یکسری ابزارهای دیگری که جهت حل این مشکل قابل استفاده میباشد را بررسی میکنیم.
استفاده از ابزار Unlocker یا MoveOnBoot
اگر فایل توسط پروسهای درگیر شده باشد که اجازه دسترسی به Security را نمیدهد، از نرمافزارهای جانبی زیر استفاده کنید :
IObit Unlocker : این ابزار میتواند قفل فایل را شکسته و آن را حذف یا جابهجا کند.
EMCO UnLock IT : برای شناسایی پروسهای که فایل را مسدود کرده بسیار مفید است.
بررسی و رفع خطای سیستم فایل (Chkdsk)
گاهی این خطا ناشی از خرابی در فایل سیستم (File System Corruption) است که باعث میشود متادیتای امنیت فایل قابل خواندن نباشد. در CMD دستور زیر را تایپ کنید. اگر فایل در درایو دیگری است، حرف آن درایو را جایگزین C کنید.
نکته : ممکن است نیاز به Restart سرور باشد تا اسکن قبل از بالا آمدن ویندوز انجام شود.
حذف فایل از طریق Safe Mode یا CMD در Recovery
اگر همچنان فایل حذف نمیشود، سرور را در حالت Safe Mode بالا بیاورید. سعی کنید فایل را حذف کنید. اگر نشد، از طریق Advanced Startup Options وارد محیط Command Prompt (خارج از محیط سیستم عامل) شوید و فایل را با دستور del حذف کنید. در این حالت هیچ پروسهای در Windows مانع شما نخواهد بود.
استفاده از Process Explorer
برای اینکه ببینید چه نرمافزاری فایل را نگه داشته است برنامه Process Explorer را اجرا کنید. از منوی Find گزینه Find Handle or DLL را انتخاب کرده و نام فایل را جستجو کنید. سپس پروسه مربوطه را پیدا کرده و آن را Kill کنید.
نویسنده مقاله :
محمد نعمتی هابیلی (Mohammad Nemati Habili)
کد PHP:
the requested security information is either unavailable or cannot be displayed
این خطا "The requested security information is either unavailable or cannot be displayed" غالبا به دلیل خرابی در (ACL (Access Control List فایل یا از دست رفتن مالکیت (Ownership) فایل رخ میدهد.
برای حل مشکل از روش های گوناگونی میشه استفاده کرد. مطابق زیر استفاده از ابزار takeown و Unlocker یا سایر ابزارها میباشد.
تغییر مالکیت فایل از طریق خط فرمان (Command Prompt)
چون رابط گرافیکی (GUI) اجازه دسترسی نمیدهد، CMD را با دسترسی Administrator باز میکنیم سپس از دستور takeown در ویندوز سرور خود استفاده میکنیم که مالکیت فایل رو بگیریم ازش. (به جای مسیر فایل، مسیر دقیق خود را بگذارید. آپشن /a مالکیت را به گروه Administrators میدهد) :
کد PHP:
takeown /f "C:\path\your\file.ext" /a
سپس برای دادن دسترسی کامل به خودتان، این دستور را بزنید :
کد PHP:
icacls "C:\path\to\your\file.ext" /grant administrators:F
من در اینجا زمانیکه از دستور takeown استفاده کردم خطای ERROR The system cannot find the file specified نمایش داده شد :
کد PHP:
takeown /f "C:\hosts\httpdocs\COM2.licens-g.cer" /a
ERROR: The system cannot find the file specified.
خطای ERROR The system cannot find the file specified زمانی رخ میده که نام فایل با کلماتی مثل COM1 تا COM9 ، LPT1 ، CON ، PRN و NUL شروع شده باشد که این نامهای رزرو شده (Reserved Names) سیستم عامل ویندوز هستند که به درگاههای سختافزاری اشاره دارند و قابل استفاده در نام فایل های دیگر نیستند. برای همین ویندوز به صورت عادی اجازه دسترسی، حذف یا تغییر امنیت این فایلها را نمیدهد چون آنها را به عنوان فایل فیزیکی نمیشناسد. برای همین ممکن است سرویس هایی که روی سیستم عامل هستند زمانیکه به فایلی با نام COM2 میرسد، ویندوز به نرمافزار یا آن سرویس ها میگوید که این یک فایل نیست، یک پورت سختافزاری است، و چون پاسخی دریافت نمیشود، آن سرویس با اختلال یا خطا مواجه میگردد. حتی گهگاهی هکران عمدتا فایل هایی با این نامها ایجاد میکنند که ابزارهای امنیتی یا مدیران سرورها نتوانند این فایل ها را اسکن و پیدا کنند یا به صورت دستی حذف نمایند و باعث اختلال در عملکرد سرویس ها بشه.
لیست نام ها و پورت های رزرو شده در مایکروسافت را میتوانید از طریق لینک زیر مشاهده بفرمایید :
کد HTML:
https://learn.microsoft.com/en-us/windows/win32/fileio/naming-a-file
حذف فایل با استفاده از مسیر مستقیم (UNC)
برای حل این مشکل، باید از سینتکس مخصوص "Universal Naming Convention" برای دور زدن محدودیتهای Win32 استفاده کرد. اگر میخواهید تنها نام فایل را تغییر نام دهید از دستور اول و در صورتیکه قصد حذف فایل را دارید از دستور دوم استفاده کنید.
کد PHP:
ren "\\?\C:\hosts\httpdocs\COM2.licens-g.cer" "new_file_name.cer"
and
del "\\?\C:\hosts\httpdocs\COM2.licens-g.cer"
با توجه به اینکه فایلی که من داشتم خراب و مشکوک بود، آنرا حذف کردم. در صورتیکه شما آنرا نیاز دارید با توجه موارد امنیتی که گفته شد حتما بعد از درست شدن فایل آنرا با استفاده از ابزارهای امنیتی اسکن کنید.
همچنین ممکن است این سوال برای شما پیش بیاید که چرا زمانیکه سیستم عامل ویندوز یکسری نامهای رزرو شده دارد اجازه ایجاد همچین فایلی با نام ها رزرو شده داده شده است؟
علت اصلی این تضاد، تفاوت در نحوه تعامل پروتکلهای انتقال فایل (مثل FTP یا File Manager کنترل پنل هایی مانند سی پنل، پلسک، دایرکت ادمین و ...) با هسته سیستمعامل ویندوز است. ویندوز از دو لایه زیرساختی Win32 API و NT استفاده میکند.
Win32 API :
اکثر برنامههای معمولی و حتی Windows Explorer از این لایه استفاده میکنند که محدودیت نامهایی مثل COM1 یا PRN را اعمال میکند.
NT Layer :
هسته اصلی ویندوز (Kernel) این محدودیتها را ندارد.
کنترل پنل ها یا سرویسهای دیگر (مانند IIS یا سرویس FTP) مستقیماً با لایههای پایینتر یا سیستمفایل (NTFS) صحبت میکنند. به همین دلیل سیستم اجازه ایجاد (Create) فایل را میدهد، اما ابزارهای گرافیکی ویندوز بعدا نمیتوانند آن را مدیریت کنند.
یا دلیل دیگر حتی میتواند این فایل قبلا از طریق لینوکس یا سیستمعاملهای دیگر ایجاد یا آپلود شده باشد که چنین محدودیتهایی ندارند (مثل لینوکس یا مک که این نام ها کاملا قانونی هستند). زمانی که فایل از طریق پروتکل FTP یا کنترلپنل آپلود میشود، کنترل پنل ها صرفا فایل را در درایو ذخیره میکنند. از نظر فایلسیستم NTFS، نام COM2.xxx یک رشته متنی ساده است و تا زمانی که برنامهای نخواهد از طریق متدهای قدیمی Win32 آن را باز کند، مشکلی ایجاد نمیشود.
در آخر مطابق صحبتی که بالاتر انجام شد ممکن است این یک تکنیک نفوذ (Exploit) باشد. جالب است بدانید که نفوذگران یا نویسندگان بدافزار عمدا فایلهایی با این نامها (مثل CON یا COM1) ایجاد میکنند تا آنتیویروسهای قدیمی نتوانند آنها را اسکن یا حذف کنند یا مدیر سرور نتواند به راحتی آنها را به صورت دستی حذف کند.
استفاده از نام کوتاه DOS یا Illegal Characters
در صورتیکه روش بالا جواب نداد میتوانید از روش Rename/Remove Illegal Characters یا (نام کوتاه DOS) استفاده کنید. گاهگاهی به دلیل کاراکترهای خاص، استفاده از نام کوتاه 8 کاراکتری (8.3 filename) موثر است.
ابتدا با استفاده از دستور زیر به دایرکتوری مورد نظر بروید :
کد PHP:
cd /d "C:\Inetpub\vhosts\dibache-edalat.ir\httpdocs"
سپس لیست نامهای کوتاه را توسط دستور زیر پیدا کنید :
کد PHP:
dir /x
در ستونی که نامهای کوتاه (مثلاً چیزی شبیه COM2~1.CER) را نشان میدهد، نام فایل خود را پیدا کنید. فایل را با استفاده از آن نام کوتاه حذف کنید. به جای OLDNAME.CER~1 دقیقاً همان چیزی را بنویسید که در مرحله قبل مشاهده کردید.
کد PHP:
ren OLDNAME.CER~1 NEWNAME.CER
OR
del OLDNAME.CER~1 NEWNAME.CER
در صورتیکه تا اینجای مقاله مشکل شما حل شده که هیچ در غیر اینصورت در ادامه یکسری ابزارهای دیگری که جهت حل این مشکل قابل استفاده میباشد را بررسی میکنیم.
استفاده از ابزار Unlocker یا MoveOnBoot
اگر فایل توسط پروسهای درگیر شده باشد که اجازه دسترسی به Security را نمیدهد، از نرمافزارهای جانبی زیر استفاده کنید :
IObit Unlocker : این ابزار میتواند قفل فایل را شکسته و آن را حذف یا جابهجا کند.
EMCO UnLock IT : برای شناسایی پروسهای که فایل را مسدود کرده بسیار مفید است.
بررسی و رفع خطای سیستم فایل (Chkdsk)
گاهی این خطا ناشی از خرابی در فایل سیستم (File System Corruption) است که باعث میشود متادیتای امنیت فایل قابل خواندن نباشد. در CMD دستور زیر را تایپ کنید. اگر فایل در درایو دیگری است، حرف آن درایو را جایگزین C کنید.
کد PHP:
chkdsk C: /f
نکته : ممکن است نیاز به Restart سرور باشد تا اسکن قبل از بالا آمدن ویندوز انجام شود.
حذف فایل از طریق Safe Mode یا CMD در Recovery
اگر همچنان فایل حذف نمیشود، سرور را در حالت Safe Mode بالا بیاورید. سعی کنید فایل را حذف کنید. اگر نشد، از طریق Advanced Startup Options وارد محیط Command Prompt (خارج از محیط سیستم عامل) شوید و فایل را با دستور del حذف کنید. در این حالت هیچ پروسهای در Windows مانع شما نخواهد بود.
استفاده از Process Explorer
برای اینکه ببینید چه نرمافزاری فایل را نگه داشته است برنامه Process Explorer را اجرا کنید. از منوی Find گزینه Find Handle or DLL را انتخاب کرده و نام فایل را جستجو کنید. سپس پروسه مربوطه را پیدا کرده و آن را Kill کنید.
نویسنده مقاله :
محمد نعمتی هابیلی (Mohammad Nemati Habili)