Я пытаюсь запустить скрипт bash в Cygwin.
Я получаю Must run as root, i.e. sudo ./scriptname
ошибки.
chmod 777 scriptname
ничего не помогает
Я искал способы подражать sudo на Cygwin, чтобы добавить пользователя root, так как вызов "su" отображает ошибку su: user root does not exist
, что-нибудь полезное, и ничего не нашел.
У кого-нибудь есть предложения?
what
сценарии, который вы пытаетесь запустить? В оболочке cygwin нет эквивалента sudo - права принадлежат пользователю win, запустившему оболочку cygwin, поэтому ссылка KyleWpppd хороша для избежания ошибок, таких как «неизвестная команда sudo». В вашем случае звучит так, как будто это специфическая проблема со скриптом, который вы хотите выполнить.Ответы:
Я ответил на этот вопрос в SuperUser, но только после того, как OP проигнорировал бесполезный ответ, который был в то время единственным ответом на вопрос.
Вот правильный способ повышения разрешений в Cygwin, скопированный из моего собственного ответа на SuperUser:
Я нашел ответ в списке рассылки Cygwin . Для запуска
command
с повышенными привилегиями в Cygwin, перед командойcygstart --action=runas
введите так:Откроется диалоговое окно Windows с запросом пароля администратора и запустите команду, если введен правильный пароль.
Это легко в сценарии, пока
~/bin
на вашем пути. Создайте файл~/bin/sudo
со следующим содержанием:Теперь сделайте файл исполняемым:
Теперь вы можете запускать команды с реальными повышенными привилегиями :
Возможно, вам придется добавить
~/bin
к вашему пути. Вы можете запустить следующую команду в Cygwin CLI или добавить ее в~/.bashrc
:Протестировано на 64-битной Windows 8.
Вы также можете вместо вышеуказанных шагов добавить псевдоним для этой команды
~/.bashrc
:источник
cat << 'EOF' > ~/bin/sudo\n #!/usr/bin/bash\n cygstart --action=runas "$@"\n EOF
(я не могу понять, как вставить новые строки в этом комментарии, поэтому я добавил '\ n' в код). Остальное с PATH = ... и далее хорошо ,ls
- это обернуть их в длительный процесс, такой как mintty, bash или zsh. Но все это появляется в отдельном терминале. Который на данный момент, я мог бы просто открыть его через графический интерфейс с помощью ConEMU."$@"
расширяется до чего-то вроде"$1" "$2" "$3" ...
и без,$@
расширяется до$1 $2 $3...
.Вам, вероятно, нужно запустить оболочку cygwin с правами администратора. Вы можете щелкнуть правой кнопкой мыши ярлык и выбрать запуск от имени администратора или перейти в свойства ярлыка и проверить его в разделе совместимости. Только остерегайтесь .... root-права могут быть опасными.
источник
sudo
в Linux.chown --changes --verbose --recursive [USER] /cygdrive/c/[PATH TO FOLDER]/*
, Без этого я не мог получить доступ к rsynced папкам и файлам.Основываясь на ответе dotancohen, я использую псевдоним:
Работает как брелок:
И если у вас установлен SysInternals, вы даже можете легко запустить командную оболочку как системный пользователь
источник
Я нашел sudo-for-cygwin , возможно, это сработает, это клиент-серверное приложение, использующее скрипт python для порождения дочернего процесса в windows (pty) и связывающее tty пользователя и процесс ввода / вывода.
Требуется python в windows и модули Python greenlet, а также eventlet в Cygwin.
источник
Или установите пакет syswin, который включает порт su для cygwin: http://sourceforge.net/p/manufacture/wiki/syswin-su/
источник
Кажется, что
cygstart/runas
он не обрабатывает должным образом,"$@"
и поэтому команды, которые имеют аргументы, содержащие пробелы (и, возможно, другие метасимволы оболочки - я не проверял), не будут работать правильно.Я решил просто написать небольшой
sudo
скрипт, который работает, написав временный скрипт, который правильно выполняет параметры.источник
Этот ответ основан на другом ответе . Прежде всего, убедитесь, что ваша учетная запись находится в группе администраторов.
Затем создайте общий файл «runas-admin.bat» со следующим содержимым:
Затем выполните командный файл следующим образом:
Например:
Просто убедитесь, что каждая отдельная команда заключена в двойные кавычки. Вы получите приглашение UAC только один раз, используя этот метод, и эта процедура была обобщена, поэтому вы можете использовать любой вид команды.
источник
Новое предложение по улучшению SUDO для CygWin от GitHub в этой теме под названием TOUACExt :
Все еще в Pre-Beta , но, кажется, работает.
источник
Я попал сюда через Google, и я действительно считаю, что нашел способ получить полнофункциональный root-запрос в Cygwin.
Вот мои шаги.
Сначала вам нужно переименовать учетную запись администратора Windows в «root». Для этого откройте man start и введите «gpedit.msc».
Измените запись в разделе Политика локального компьютера> Конфигурация компьютера> Параметры Windows> Параметры безопасности> Локальные политики> Параметры безопасности> Учетные записи: переименовать учетную запись администратора
Тогда вам придется включить учетную запись, если она еще не включена. Политика локального компьютера> Конфигурация компьютера> Параметры Windows> Параметры безопасности> Локальные политики> Параметры безопасности> Учетные записи: состояние учетной записи администратора
Теперь выйдите и войдите в учетную запись root.
Теперь установите переменную окружения для cygwin. Чтобы сделать это простым способом: щелкните правой кнопкой мыши Мой компьютер> Свойства
Нажмите (на левой боковой панели) «Расширенные настройки системы»
В нижней части нажмите кнопку «Переменные среды»
В разделе «Системные переменные» нажмите кнопку «Создать ...»
Для названия поставьте «cygwin» без кавычек. В качестве значения введите в корневой каталог cygwin. (Мой был C: \ Cygwin)
Нажмите OK и закройте все это, чтобы вернуться на рабочий стол.
Откройте терминал Cygwin (cygwin.bat)
Отредактируйте файл / etc / passwd и измените строку
На это (ваши номера и имя машины будут другими, просто убедитесь, что вы изменили выделенные номера на 0!)
Теперь, когда все это закончено, следующий бит заставит работать команду "su". (Не идеально, но он будет функционировать достаточно для использования. Я не думаю, что скрипты будут работать правильно, но, эй, вы дошли до этого, может быть, вы сможете найти способ. И, пожалуйста, поделитесь)
Запустите эту команду в cygwin, чтобы завершить сделку.
Выйдите из учетной записи root и вернитесь в свою обычную учетную запись Windows.
После всего этого, запустите новый su.bat вручную, дважды щелкнув по нему в проводнике. Введите свой пароль и идите вперед и закройте окно.
Теперь попробуйте запустить команду su из cygwin и посмотрите, все ли работает нормально.
источник
Будучи недовольным доступным решением, я принял скрипт nu774, чтобы повысить безопасность и упростить его настройку и использование. Проект доступен на Github
Чтобы использовать его, просто скачайте
cygwin-sudo.py
и запустите его черезpython3 cygwin-sudo.py **yourcommand**
.Вы можете настроить псевдоним для удобства:
источник
Используйте это, чтобы получить окно администратора с запущенным bash или cmd из любого контекстного меню каталогов. Просто щелкните правой кнопкой мыши на имени каталога и выберите запись или нажмите выделенную кнопку.
Это основано на инструменте chere и, к сожалению, не работающем ответе (для меня) от link_boy. Он отлично работает для меня, используя Windows 8,
Побочным эффектом является другой цвет в окне администратора cmd. Чтобы использовать это на bash, вы можете изменить файл .bashrc пользователя с правами администратора.
Я не могу запустить «фоновую» версию (щелкнуть правой кнопкой мыши в открытом каталоге). Не стесняйтесь добавлять это.
источник
Очень простой способ иметь оболочку cygwin и соответствующие дочерние оболочки для работы с правами администратора - это изменить свойства ссылки, которая открывает начальную оболочку.
Следующее действительно для Windows 7+ (возможно, и для предыдущих версий, но я не проверял)
Обычно я запускаю оболочку cygwin по ссылке cygwin в кнопке запуска (или на рабочем столе). Затем я изменил свойства cygwin-ссылки во вкладках
/ Совместимость / Уровень привилегий /
и проверил поле,
«Запустите эту программу от имени администратора»
Это позволяет оболочке cygwin открываться с правами администратора и соответствующими подоболочками.
источник
Я встретил эту дискуссию в поисках некоторых деталей о
sudo
реализации в разных операционных системах. Прочитав его, я обнаружил, что решение @ brian-white ( https://stackoverflow.com/a/42956057/3627676 ) полезно, но его можно немного улучшить. Я избегал создания временного файла и реализовал все для выполнения одним скриптом.Также я исследовал следующий шаг улучшения для вывода в одном окне / консоли. К сожалению, безуспешно. Я попытался использовать именованные каналы для захвата STDOUT / STDERR и печати в главном окне. Но дочерний процесс не записывал в именованные каналы. Однако запись в обычный файл работает хорошо.
Я отбросил любые попытки найти основную причину и оставил текущее решение как есть. Надеюсь, что мой пост может быть полезным.
Улучшения:
mintty
илиbash
, если первый не найденисточник
cygstart --wait --action=runas $mintty /bin/bash "$0" "$@"
не ломается, если в аргументе есть пробелы? Это всегда было для меня при прохождении таких через cygstart / runas.Основываясь на ответе @ mat-khor, я взял syswin
su.exe
, сохранил егоmanufacture-syswin-su.exe
и написал скрипт-обертку. Он обрабатывает перенаправление команды stdout и stderr, поэтому его можно использовать в конвейере и т. Д. Кроме того, сценарий завершается со статусом данной команды.Ограничения:
env USERNAME=...
к вызову сценария отменяет это. Если бы потребовались другие параметры, сценарий должен был бы различать syswin-su и аргументы команды, например, расщепление в начале--
.,
источник
Я не могу полностью протестировать это сам, у меня нет подходящего сценария, чтобы попробовать его, и я не эксперт по Linux, но вы можете взломать что-то достаточно близкое.
Я попробовал эти шаги, и они, кажется, работают, но не знаю, будет ли этого достаточно для ваших нужд.
Чтобы обойти отсутствие «пользователя root»:
Затем он запускает вас как пользователя с именем root в cygwin, что может быть достаточно в сочетании с «Запуск от имени администратора» в файле bash.exe.
Однако вам все еще нужно судо.
Я подделал это (и кто-то с большим знанием Linux, вероятно, может подделать это лучше), создав файл с именем 'sudo' в / bin и используя эту командную строку, чтобы вместо этого отправить команду su:
Командная строка 'sudo vim' и другие, кажется, работают нормально для меня, так что вы можете попробовать это.
Интересно узнать, работает ли это для ваших нужд или нет.
источник
Что я обычно делаю, так это помощника реестра «Открыть здесь», чтобы открыть оболочку cygwin с административными привилегиями из любого места на моем компьютере.
Имейте в виду, что у вас должен быть установлен пакет cygwin "chere", сначала используйте "
chere -i -m
" из привилегированной оболочки cygwin.Предполагая, что ваша установка cygwin находится в C: \ cygwin ...
Вот код реестра:
Надеюсь это поможет. Дайте мне знать, если это работает для вас. Спасибо.
PS: Вы можете взять этот код, скопировать и вставить его и сохранить его в файле name.reg, чтобы запустить его ... или вы можете вручную добавить значения.
источник
Пытаться:
где
<dir>
находится каталог, для которого вы хотите изменить права доступа.источник