The system mode ignores users permissions. In system mode, Apex code has access to all objects and fields— object permissions, field-level security, sharing rules aren’t applied for the current user. This is to ensure that code won’t fail to run because of hidden fields or objects for a user. For example, logged in user doesn’t have a “create” permission but they are able to create a record in System mode.
All apex code run in system mode. It ignores user’s permissions. The only exception is anonymous blocks like developer console and standard controllers. Even `runAs()` method doesn’t enforce user permissions or field-level permissions, it only enforces record sharing.
“Without sharing” keyword tells Apex code to ignore sharing rules, but not users permissions.