С точки зрения безопасности, работать под администратором в Windows не самое правильно решение. Однако, никто этим вопросом не заморачивается, особенно на домашних компьютерах. Ведь так гораздо удобнее, чем дополнительно создавать пользовательскую учётную запись и постоянно вводить пароль администратора при любых изменениях в системе.
В операционной системе Linux все серьёзные настройки производятся с правами суперпользователя (root), аналог администратора в Windows. Правда, в отличие от «винды», в Linux сразу, при установке системы, предлагается создать обычного пользователя и работать уже от его имени.
Когда требуется выполнять какие-то действия от имени другого пользователя, в том числе и от суперпользователя, есть команда sudo. Выполняется она в терминале. В Linux вообще практически любые действия можно выполнять в терминале, но это отдельная большая тема, потому не будем сейчас в неё углубляться.
Пользователям Windows подобный подход тоже знаком. Наверняка вам приходилось запускать выполнение каких-то команд или программ от имени Администратора. По крайней мере вы встречали такой пункт в меню. Например, такой режим командной строки Windows может потребоваться для выполнения некоторых команд, вроде cброса настроек протокола TCP/IP и Winsock при сбоях в работе сети:
netsh winsock reset
Недавно у меня был странный случай с Windows Server 2012. Удалённо не удавалось войти в учётную запись Администратора, так как система никак не могла завершить предыдущую сессию. Такая же ситуация была и с несколькими пользователями, которые в это время работали на сервера. В общем, по непонятным причинам, Windows на серваке частично встала раком.
Зайти на сервер удалось под одним из пользователей, но на перезагрузку у него естественно прав не было. Запустить командную строку cmd от имени администратора или выбрать такой вариант в свойствах ярлыка система тоже не давала. Тут то мне и пригодилась команда runas, предназначенная для выполнения команд под учетной записью пользователя, указанной в качестве параметра командной строки:
runas /user:администратор «shutdown /r»
Признаю, что опыт весьма специфический, но возможно кому-то пригодится.
Если считаете статью полезной,
не ленитесь ставить лайки и делиться с друзьями.
sudo в виндовсе можно сделать батником-«костылём» sudo.cmd , поместив его в windows\system32 :
Дмитрий, т.е. и из под обычного пользователя без пароля запустится? али ж нет?
Art, не запустится: в зависимости от версии виндовс и ее настроек либо спросит имя и пароль пользователя с правами администратора, либо выдаст ошибку «в доступе отказано»
Это вторая часть статьи, посвящённой команде sudo, если вы ещё не видели первую часть, то перейдите к ней «Что такое sudo».
Продолжим знакомство с sudo, рассмотрим больше случаев применения и настройки.
Мы уже научились (в первой части) устанавливать ограничения для пользователя по использованию команд с повышенными привилегиями, то есть с sudo. Мы можем перечислить команды, которые пользователю разрешено запускать с sudo — запуск другим команд с правами root будет автоматически запрещён.
При этом очень важно, чтобы разрешённые для запуска с sudo файлы не имели у пользователя прав доступа на запись! Иначе ограничения sudo могут быть легко обойдены.
К примеру, в предыдущей части мы указали настройку:
Она разрешает пользователю выполнять команды /home/admin/backup.sh и /usr/bin/apt. Может ли этот пользователь выполнить, например, такую команду:
Если вы не понимаете приведённую выше команду, то смотрите «Азы работы в командной строке Linux (часть 1)».
Поскольку я уже знаю, что в этом случае я смогу обойти ограничение, то вместо удаления корневой файловой системы, я специально создам папки, для которых у обычного пользователя не будет прав на удаление (я залогинен как root):
Итак, я выполняю вход под пользователем admin:
Теперь я (пользователь admin) хочу совершить злодейство — я хочу удалить папку /root/test1 принадлежащую ненавистному мне root’у:
Недостаточно прав, попробую выполнить с правами суперпользователя:
Опять неудача — пользователю admin разрешено выполнять только команду /usr/bin/apt и команду /home/admin/backup.sh. Проверяем права доступа на эти файлы:
У пользователя есть право записи, но пользователем является root.
Проверяем второй файл:
Пользователем является admin и у него есть право записи!
Записываем нашу зловредную команду в этот файл:
Добавляем права выполнения этому файлу, если вдруг их не было:
И запускаем этот файл с sudo:
Как можно увидеть, программа завершилась без ошибки:
А папка /root/test1 больше не существует:
Неправильная настройка, которая позволила обойти sudo, в том, что у пользователя были права записи на один из файлов, которые он может запускать с sudo. В этот файл пользователь может записать что угодно и все эти команды выполнятся с повышенными привилегиями. Программа sudo проверяет только непосредственно запускаемый файл, но не проверяет, соответствует ли его содержимое политикам и настройке sudo.
Во время ввода пароля sudo, терминал не даёт никакой обратной связи, то есть не показывае звёздочки и, будто бы, никак не реагирует. У меня даже спрашивали в комментариях под какой-то статьёй: «появляется запрос ввода пароля и система зависает». На самом деле система прекрасно работает и считывает введённый пароль, причём такой вариант является более безопасным, поскольку не позволяет посторонним увидеть длину пароля.
Тем не менее если вам хочется, чтобы в терминале при вводе пароля sudo отображались звёздочки (*******) по количеству введённых символов, как это сделано в большинстве приложений, то дальше будет показано как это настроить.
Откройте для редактирования конфигурационный файл sudo:
и добавьте к ней pwfeedback, чтобы строка стала выглядеть так:
Если у вас редактор vim, то нажмите кнопку Esc, напечатайте :wq и нажмите ENTER. Если вы используете редактор nano, то нажмите Ctrl+x, затем y и нажмите ENTER для сохранения и закрытия файла.
Чтобы изменения вступили в силу, выполните следующую команду для сброса текущих настроек терминала:
Вот и всё, теперь каждый раз, когда вы вводите пароль в терминал, вы будете получать визуальный отзыв (****), как это показано на следующем скриншоте:
После ввода пароля пользователя для sudo? если вы хотите выполнить ещё одну команду с sudo, то в течение установленного промежутка времени у вас не будет спрошен пароль. Длина сессии, например, в Linux Mint составляет 15 минут. Если вы считаете, что длина сессии беспарольного выполнения команд sudo слишком маленькая или слишком большая, то далее показано, как её изменить.
Для установки таймпута пароля sudo, используется параметр timestamp_timeout. Вначале откройте файл /etc/sudoers с полномочиями суперпользователя, используя команды sudo и visudo примерно так:
Теперь в пункт Defaults добавьте директиву timestamp_timeout с нужным вам значением в минутах, например, в следующей строке установлено время, когда sudo не запрашивает повторно пароль на 20 минут:
Примечание: вы можете установить любое время в минутах на ваше усмотрение. Вы также можете установить время на 0, если вы хотите запрос пароля при каждом использовании команду sudo. Чтобы навсегда отключить запрос пароля, установите значение на -1.
Для сохранения изменений нажмите Ctrl+o, затем ENTER и для выхода Ctrl+x.
По умолчанию sudo ведёт журнал действий через системный лог (journalctl). Чтобы сохранять журнал действий с sudo, добавьте следующую директиву:
Пример записей из файла /var/log/sudo.log:
В каждой записи присутствуют следующие поля:
При желании можно добавить в эти записи имя хоста и номер года, для этого используйте, соответственно, параметры log_host и log_year следующим образом:
Ниже пример настроенного файла журнала sudo:
Можно не только просматривать команды, которые выполнялись с sudo, но и сохранять ввод и вывод этих команд. Использование параметров log_input и log_output включает запуск команды sudo в псевдо tty и ведёт журнал всего ввода и вывода, отправленного на экран:
По умолчанию данные сохраняются в директорию /var/log/sudo-io и, если имеется порядковый номер сеанса, то они сохраняются в директорию seq Вы можете настроить директорию хранения, структуру папок и имена файлов параметрами iolog_dir и iolog_file. По умолчанию данные будут сохраняться в структуре папок начиная с 00/00/01 и далее:
Когда пользователь вводит неверный пароль, соответствующее сообщение показывается в командной строке. По умолчанию сообщение на русском «Попробуйте ещё раз.», а на английском «sorry, try again». Вы можете отредактирвоать это сообщение используя параметр badpass_message примерно так:
Параметр passwd_tries используется для указания числа попыток, которое пользователь может сделать при вводе пароля. По умолчанию это значение равняется 3.
В дополнении к количеству попыток, вы можете установить время, которое командная строка будет ожидать пароль. По умолчанию это 5 минут. Используя параметр passwd_timeout можно установить любое количество минут:
Кроме уже рассмотренных имеется несколько других опций, которые могут пригодиться в той или иной ситуации:
In other words, pseudo sudo commands
If you’ve ever used Linux or know someone who uses Linux, then you’ve probably heard of the sudo command. The command is a critical component to just about every Linux distribution and what it does is let you run a command as a different user, most notably the root user. On certain Linux distributions, you can log in as the root user by using the su command, but this is considered highly risky and no one ever does it.
Actually, it’s so dangerous that it’s disabled by default on Linux distributions like Ubuntu. Instead, you have to use the sudo command if you want to run a command as the root user. So what about Windows? Well, unfortunately, most people are logged into Windows as Administrators, which is the same as root user in Linux. However, Microsoft has tried to lessen the dangerous effects of being logged in as an Administrator by enabling User Account Control or UAC.
That way, even if the user has Administrative privileges, applications running under that account will not inherit those privileges unless it’s manually authorized by the user. This helps prevent malware and spyware from infecting a Windows user who is logged in as an Administrator.
So while Linux users have the sudo command, what do Windows user have? Are there alternatives that Windows users can use to run commands with elevated privileges? Is there a sudo command for Windows? In this article, I’ll talk about five alternatives to the sudo command for Windows users.
Note: Some of these tools are quite old now, so they may or may not work with the latest versions of Windows.
Windows has the runas command, which is the direct counterpart to sudo on Linux. Using the runas command, you can execute a script, program or command as a different user or as an administrator. The full syntax for the runas command is:
If you wanted to open an administrative command prompt, you could type the following:
/noprofile will not load the current user profile. You can remove that if you need access to the user environment variables. If you wanted to open a text file using Notepad with administrator privileges, you could use this command:
You can checkout the Technet page on runas for more information on how to use it.
Note that when using runas command, if you install a program or make changes to settings, etc., the changes will be made to the user account that you are running the command on. For example, let’s say you have user X who is a normal user and user Y, who is an administrator. If you log into X and then do a runas using the Administrator credentials, changes will be made to the Administrator’s settings, not user X.
So if you install an application by right-clicking on the EXE file and choosing Run as Administrator, it’ll get installed to the built-in Administrator user profile, not the one you are logged into. If you want true elevated privileges like sudo without the profile issues, check out the next alternative below.
Sudo for Windows is a free program you can install that will give you the same experience of the sudo command on Linux for Windows. The only difference is that Sudo for Windows “preserves the user’s profile and ownership of created objects” as stated by the developer. This is really handy if you like to use elevated permissions for installing apps or making changes to user locations like My Documents, etc.
It’ll give you Administrative privileges, but will keep all the changes in the current profile instead of the account you’re using to run the command with. The program requires .NET version 2.0, which you can’t download individually. In order to get 2.0, you have to install .NET Framework 3.5, which include 2.0.
Once you install Sudo for Windows, you need to add the user accounts that you to allow to have elevated privileges to a specific group created by the program called Sudoers. Right-click on My Computer or This PC and click on Manage. Then expand Users and Groups and click on Groups. You should see one called Sudoers.
Double-click on Sudoers and click on the Add button.
On the next dialog, click the Advanced button and then click Find Now. This will list out all users and groups on the system. Double-click the user you want to add.
Repeat this step for however many users you want to add. Then click OK and you should see the members listed in the Members listbox shown above. Click OK and now you should be able to use the sudo GUI and command. If you right-click on a program, you’ll see the Sudo option.
You can also open a command prompt and type sudo to run command with elevated permissions.
Overall, it’s pretty nifty and works very well. However, note that this particular program is really useful for launching programs or processes either via right-click or via the command prompt, but it’s not meant for running command line apps. For example, if you wanted to do sudo mkdir “c:\Program Files\new”, this won’t work using Sudo for Windows. For that functionality, there is another program called the same thing, but by a different developer. Read below.
There’s another developer who wrote another Sudo for Windows that lets you execute command line apps too. So let’s go back to the example about creating a new folder in C:\Program Files. You can’t really do this by default.
Above I’m using PowerShell, but you’ll get the same error using the command prompt also. However, once you install Sudo for Windows, just add the word sudo to the front of the command and it works perfectly with no errors!
To install it, you need to open PowerShell and then type in the following commands in order:
If everything works OK, you should see the following output in PowerShell after each command:
That’s it! Now you can start typing in commands and adding sudo in front. The only annoying thing about this program is that the UAC window still pops up and you have click Yes for it to work. Even with that slight annoyance, the benefits are well worth it.
Elevate is a program that works with UAC and doesn’t work exactly like sudo. With Elevate, it will change the executing user to Administrator like the runas command does. However, it’s useful for working in the command line or with batch files.
The main purpose of elevate is not to get around UAC, but to start a process in an elevated state from a non-elevated shell and then continuing on as normal even after the command has completed. Elevate is useful for scripting because you don’t have to worry about trying to script the whole right-clicking and running a command prompt as Administrator process.
For those of you who do a lot of work on the command line or work with scripts and batch files, then the Elevation PowerToys for Windows page has quite a few useful tools and scripts.
The script elevation power toys were created to overcome the frustrating aspects of UAC when trying to elevate a program from the command line or running scripts as administrators.
Hopefully, that’s enough tools and programs for you to make you feel like you’re actually using sudo on Windows. There’s no perfect replacement for it, but there are quite a few options that come close. If you use something else to elevate programs, commands or scripts in Windows, let us know in the comments. Enjoy!
Founder of Help Desk Geek and managing editor. He began blogging in 2007 and quit his job in 2010 to blog full-time. He has over 15 years of industry experience in IT and holds several technical certifications. Read Aseem’s Full Bio