Linux запустить скрипт под root

Обновлено: 03.07.2024

Вся сила Linux в использовании терминала. Это такая командная оболочка, где вы можете выполнять различные команды, которые будут быстро и эффективно выполнять различные действия. Ну впрочем, вы наверное это уже знаете. Для Linux было создано множество скриптов, которые выполняются в различных командных оболочках. Это очень удобно, вы просто объединяете несколько команд, которые выполняют определенное действие, а затем выполняете их одной командой или даже с помощью ярлыка.

Но у новичков может возникнуть вопрос - как запустить скрипт в Linux, что для этого нужно сделать, что будет происходить и какие команды нужно выполнить. Но сначала нужно рассмотреть как работают скрипты и что такое исполняемость.

Как работают скрипты

В Linux почти не используется расширение файла для опережения его типа на системном уровне. Это могут делать файловые менеджеры и то не всегда. Вместо этого, используются сигнатуры начала файла и специальные флаги. Система считает исполняемыми только те файлы, которым присвоен атрибут исполняемости.

Теперь о том, как работают скрипты. Это обычные файлы, которые содержат текст. Но если для них установлен атрибут исполняемости, то для их открытия используется специальная программа - интерпретатор, например, оболочка bash. А уже интерпретатор читает последовательно строку за строкой и выполняет все команды, которые содержатся в файле. У нас есть несколько способов выполнить запуск скрипта linux. Мы можем запустить его как любую другую программу через терминал или же запустить оболочку и сообщить ей какой файл нужно выполнять. В этом случае не нужно даже флага исполняемости.

Запуск скрипта sh в Linux

Сначала рассмотрим пример небольшого sh скрипта:

Вторая строка - это действие, которое выполняет скрипт, но нас больше всего интересует первая - это оболочка, с помощью которого его нужно выполнить. Это может быть не только /bin/bash, но и /bin/sh, и даже /usr/bin/python или /usr/bin/php. Также часто встречается ситуация, что путь к исполняемому файлу оболочки получают с помощью утилиты env: /usr/bin/env php и так далее. Чтобы выполнить скрипт в указанной оболочке, нужно установить для него флаг исполняемости:

chmod ugo+x script.sh

Мы разрешаем выполнять запуск sh linux всем категориям пользователей - владельцу, группе файла и остальным. Следующий важный момент - это то место где находится скрипт, если вы просто наберете script.sh, то поиск будет выполнен только глобально, в каталогах, которые записаны в переменную PATH и даже если вы находитесь сейчас в той папке где находится скрипт, то он не будет найден. К нему нужно указывать полный путь, например, для той же текущей папки. Запуск скрипта sh в linux:

Или полный путь от корня:

Если вы не хотите писать полный путь к скрипту, это можно сделать, достаточно переместить скрипт в одну из папок, которые указаны в переменной PATH. Одна из них, которая предназначена для ручной установки программ - /usr/local/bin.

cp script.sh /usr/local/bin/script.sh

Теперь вы можете выполнить:

Это был первый способ вызвать скрипт, но есть еще один - мы можем запустить оболочку и сразу же передать ей скрипт, который нужно выполнить. Вы могли редко видеть такой способ с bash, но он довольно часто используется для скриптов php или python. Запустим так наш скрипт:

А если нам нужно запустить скрипт на php, то выполните:

Вот так все просто здесь работает. Так можно запустить скрипт как фоновый процесс, используйте символ &:

Даже запустить процесс linux не так сложно.

Выводы

Как видите, запуск скрипта sh в linux - это довольно простая задача, даже если вы еще плохо знакомы с терминалом. Существует действительно много скриптов и некоторые из них вам возможно придется выполнять. Если у вас остались вопросы, спрашивайте в комментариях!

Изображение пользователя DarkneSS.

В бунтах: бла бла бла
sudo бла бла бла
sudo бла бла бла
Или перед запуском скрипта sudo /путь/скрипт.sh

Изображение пользователя DarkneSS.

Можно Alt+F2 : kdesu ./script
PS Подождите, народ подтянется, посоветует чего-нибудь.

У тебя абсолютно верный совет.
В папке рабочего стола правый клик мышкой -> Создать -> Ссылку на приложение. -> Там во вкладке Приложение команду kdesudo script

Изображение пользователя knuckles.

Изображение пользователя DarkneSS.

Изображение пользователя knuckles.

:-) На самом деле твой вариант и вариант _KoT_'а православнее. Правда, в твоем варианте kdesu доставлять придется (по умолчанию он не стоит).

Вообще, я советую создать UpStart Job. Тогда все само будет делаться: выдернул кабель - интерфейс опустился, вставил - поднялся.

Изображение пользователя DarkneSS.

Я его не доставлял. Скорее всего как рекомендуемый с чем-то поставился.

Изображение пользователя knuckles.

А может и нет - мне не стоит верить на слово )

Изображение пользователя DarkneSS.

По ходу kdesu это линк на kdesudo, потому что пакета kdesu нет.

Изображение пользователя knuckles.

Серьезно? Может, ты его не из репов ставил? :-)

Изображение пользователя DarkneSS.

>UpStart Job
это как? и что? (лень гуглить)

Изображение пользователя knuckles.

Да, собственно, что тут гуглить, вот.
Дело в том, что мне приходилось делать это только один раз, да и то давно это было. Сейчас я сходу не расскажу по шагам - надо смотреть, вспоминать, заново разбираться. Думаю, с тем же успехом ты можешь сделать это сам :-)
Из того, что помню:
- нужно создать в каталоге /etc/init файл с расширением *.conf. Например, my_job.conf. Он должен быть обычным текстовым файлом, не исполняемым;
- в начале файла нужно указать директиву start on <имя_события> - самое сложное здесь, это выяснить какое событие возникает в UpStart, когда кабель втыкается;
- ниже написать что-то вроде:
script
ifconfig eth0 down
ifconfig eth0 hw ether ПУ:МП:УМ:ТР:АТ:АА up
pon dsl-provider
end script
Т.е. идея в том, что код между script и end script выполняется при возникновении события <имя_события>, которое указывается в директиве start on. Но, опять же, насколько я помню, описанных шагов недостаточно. Надо там еще что-то делать. Помню еще только, что вручную можно запускать так: sudo start my_job

UPD: Кстати, в том самом каталоге /etc/init можно посмотреть примеры файликов *.conf ;-)

Root sudo Linux

В дистрибутивах Linux пользовательские привилегии предоставляются путем открытия доступа к root. Наличие таких прав позволяет использовать функциональность операционной системы более широко и выполнять необходимые действия в корневом каталоге.

Давайте детально обсудим, что может суперпользователь в Linux, как настроить root и для чего нужна команда sudo .

Предназначение root-прав в Linux

Права обычного пользователя в Linux крайне ограничены. Он может управлять только своим каталогом и открывать для чтения определенные файлы из корня. Доступ для их изменения или установки программ отсутствует, что делает привилегии суперпользователя крайне важными при настройке ОС и решении разных проблем. Обычный пользователь ограничивается следующим набором прав:

  • чтение, запись и изменение любых атрибутов пользовательской папки;
  • то же самое и для каталога /tmp ;
  • выполнение программ в любом месте, где нет ограничений;
  • чтение файлов с соответствующим атрибутом для всех пользователей.

При наличии рут-прав у юзера появляется гораздо больше возможностей и расширяются границы взаимодействия с операционной системой. Становятся доступными любые действия со всеми папками и файлами.

Безопасность использования прав суперпользователя

Если с предназначением root-прав в Linux все понятно, то вот к безопасности их использования есть вопросы. В основном, относится это к серверным машинам, поскольку риск взлома домашнего компьютера очень мал, да и кому нужны файлы обычного пользователя, чтобы ради этого затевать процедуру взлома. Если вы используете Linux как обычную операционную систему, работаете с документами и стандартными программами, используйте root для установки приложений и защиты системы от случайных изменений, которые могут внести другие пользователи компьютера.

С серверной частью все гораздо сложнее, поскольку рут как таковой не предоставляет полной защиты. Часто используемые пароли взламываются путем перебора или поиском бэкдора. Поэтому не стоит полагаться исключительно на защиту паролем, если вы владеете файлами сайтов или используете сервер для других целей. Займитесь настройкой файрвола, если это повысит уровень защиты.

Команда sudo и примеры ее использования

Команда sudo тесно связана с root в Linux, поскольку отвечает за передачу прав суперпользователя и позволяет от его имени выполнять команды в Терминале. Существует несколько ее вариаций, использующихся при разных обстоятельствах. Подходит эта команда как для выполнения всего одного действия, так и для передачи прав на всю текущую сессию.

Использование команды sudo в Linux

Самый простой пример использования sudo – запуск программы от имени суперпользователя. Для этого вводится:

Еще sudo применяется для установки софта, команда в таком случае обретает вид:

Если же вы желаете использовать сразу несколько команд, например, введя sudo cat file.txt | grep text > file.txt , появится ошибка, поскольку при выполнении второй команды права суперпользователя отсутствуют, а значит, запись в файл невозможна. Решается такая ситуация добавлением sudo перед каждым выражением.

В следующем разделе статьи речь пойдет о передаче прав суперпользователя, что тоже реализуемо при помощи sudo . Я рассмотрю два полезных аргумента. Советую ознакомиться с ними, если хотите упростить выполнение действий через Терминал.

VDS Timeweb арендовать

Переключение на суперпользователя

Еще раз уточню, что команда sudo идеально подходит для получения необходимых привилегий без переключения учетной записи. Ее можно использовать как для выполнения одного действия, так и нескольких. Если вы желаете временно получить рут-права через эту команду, введите sudo -s или sudo -i . В первом случае домашний каталог остается текущим, а во втором меняется на /root.

Примерно так же работает и команда su , но она обладает дополнительными аргументами, которые следует уточнить:

  • -c – позволяет выполнить команду;
  • -g – устанавливает группу для пользователя;
  • -G – дополнительные группы для юзера;
  • - , -l , --login – один из режимов входа, при котором происходит переключение домашнего каталога;
  • -p – сохранение переменных окружения;
  • -s – выбор оболочки для выхода.

Есть вариант выполнить вход в оболочку под суперпользователем, но он имеет свои неудобства. Он заключается в переключении в доступную виртуальную консоль, что осуществляется комбинацией Ctrl + Alt + F1-F6 . Там понадобится ввести логин и пароль root для получения доступа. Главный недостаток этого метода – потеря возможности взаимодействия с графическим интерфейсом операционной системы.

Второй вариант – ввод такого же логина и пароля при входе через графическую форму авторизации. Так вы сразу получите доступ ко всем файлам, даже не надо будет вводить sudo . Однако неопытным пользователям такой метод не подходит, поскольку возникает риск удаления или изменения системных файлов, что иногда приводит к поломке ОС.

Вы уже сами решайте, какой вариант хотите использовать, и готовы ли смириться со всеми ограничениями и недостатками, которые накладывает каждый из них.

Предоставление и отзыв прав суперпользователя

Каждому пользователю в Linux можно предоставить root-права, добавив его в соответствующую группу. Точно так же их можно и отнять, если вдруг это понадобится. Рассмотрю три варианта действий.

Создание нового пользователя с root

Допустим, что вы, единственный юзер в Linux, хотите создать еще одну учетную запись с правами суперпользователя. В таком случае алгоритм действий обретет следующий вид:

sudo Linux

  1. Откройте Терминал и введите команду sudo adduser user (user замените на нужное имя пользователя).
  2. В консоли появятся инструкции по созданию нового пользователя. Присвойте пароль и подтвердите действие, чтобы завершить создание.
  3. Добавьте новую учетную запись в группу sudo, введя sudo usermod -aG sudo user ( user здесь тоже понадобится заменить).
  4. Проверьте выполненные действия, переключившись на новую учетную запись через su testuser . Для подтверждения введите пароль (при вводе символы не отображаются на экране).
  5. Выполните любую команду с sudo и убедитесь, что все прошло успешно.

Для существующей учетной записи

Если учетная запись уже добавлена, в консоли остается ввести только одну команду, чтобы добавить пользователя в группу sudo и разрешить ему получение рут-прав. Сама команда представлена ниже, вам остается только скопировать ее и поменять имя юзера.

Предоставление прав суперпользователя существующей учетной записи в Linux

Используйте предыдущую инструкцию для проверки внесенных изменений.

Откат прав суперпользователя

Если вдруг вы решили, что одна из учетных записей больше не должна состоять в группе sudo, отзовите права, введя команду:

Измените user на необходимое имя. Можете переключиться на эту учетную запись и убедиться в том, что теперь команды с sudo она выполнять не может.

Откат прав суперпользователя в Linux

Это была вся основная информация о правах суперпользователя в Linux. Вы знаете, что дают такие привилегии, как их правильно использовать и управлять пользователями. В качестве рекомендации скажу, что всегда нужно читать текст ошибок, появляющихся в Терминале, если что-то пошло не так. Это позволит вам быстрее решить проблему без траты времени на поиски в Google.

Доброго времени суток!
Возникла задача, написать bash скрипт, который бы запускался от имени пользователя, но внутри выполнял команды, которые можно выполнить только из-под root-а. Если быть точным, то мне надо просто скопировать файл командой cp.

Запуск скрипта выдаёт Permission denied.
Есть предложения по реализации? __________________
Помощь в написании контрольных, курсовых и дипломных работ здесь

Запуск bash через php
есть bash скрипт, удаётся его запустить через php, но он не хочет выполнять установку apt-get -y.


Запуск в батнике - команды на запуск файла (из консоли с правами администратора)
Добрый день, форумчане. Помогите решить вопрос. Существует файл, которого нужно часто запускать.

Если у вас установлена sudo
В скрипте нужно добавить перед командой cp
А в файле sudoers добавить строчку позволяющую беспарольно вызвать эту команду
user - это ваш логин
А не проще ли этот скрипт запускать сразу от рута?

Да, этот вариант, разумеется, есть, но он крайний.

в файле sudoers добавить строчку позволяющую беспарольно вызвать эту команду Хм. Довольно опасный ход. А есть у меня возможность таким же образом прописать путь к данному скрипту? (не могу проверить, GNU/Linux на рабочем компе стоит).

Решение

в файле sudoers добавить строчку позволяющую беспарольно вызвать эту команду Ну Вы махнули! Беспарольно вызывать сам скрипт через sudo это я могу понять, но системной команде присваивать беспарольный вызов это как-то через чур!

Почему? Вы лезете в системный каталог, где простому пользователю делать нечего.

Добавлено через 1 минуту

Кстати, не увидел сразу, может Вы примонтировали неправильно что Вам от администратора приходится копировать? Почему? Вы лезете в системный каталог, где простому пользователю делать нечего.

Логично) Давайте пока не будем тему закрывать. Мне всё-таки хочется сделать так, как я описал.

Не я монтировал. У меня задача кидать файлы в этот каталог. К слову, он удалённый. А в принципе можно примонтировать с предоставлением пользователю полного доступа? Я просто не силён в этом. можно примонтировать с предоставлением пользователю полного доступа Нужно. Как Вы монтируете покажите, подберем нужные опции. Нужно. Как Вы монтируете покажите, подберем нужные опции. Спасибо, я уточню этот момент. Просто, повторюсь, не я это делал, и я пока что слаб во многих аспектах этой ОС. Marinero Согласна, махнула! В идеале лучше создать промежуточный скрипт например vim cpl
Так же можно сделать команду cpl универсальной если в теле скрипта применить позиционные параметры

а в самом скрипте вместе с командой cpl употребить параметры source и target

Добавлено через 18 минут
Не успела дописать вот только от этой универсальности уязвимость останется прежней, так что результат
из последей строчки кода вернет нас на прежние позиции

Нужно. Как Вы монтируете покажите, подберем нужные опции.

Так. Монтируемая папка лежит, я так понял, на винде. Монтировал пользуясь командой mount.cifs. Согласно описанию команды первым аргументом указал адрес удалённой папки, вторым аргументом - директорию монтирования. Далее в опциях прописал только имя пользователя, имеющего доступ к этой папке на удалённой машине.
Пример:
mount.cifs //192.168.0.1/catalog /mnt/srv/ -o user=someUser

Очевидно, что здесь не указано ничего про доступ не root пользователя.
Какие опции надо указать, чтобы, например, пользователь devel имел полный доступ к этому каталогу?

Добавлено через 1 минуту

В идеале лучше создать промежуточный скрипт например vim cpl Интересное решение, спасибо. Буду иметь его ввиду, если ничего не выйдет с монтированием.

Не вышло:
cp: cannot create regular file `/mnt/srv/2015-11-05.xml': Permission denied

ls -l на этот каталог:
drwxrwxrwx 2 devel adm 4096 Nov 3 15:38 srv

Добавлено через 45 минут
Так, что заметил. ls -l на этот каталог выдаёт такие результаты до монтирования. После монтирования она выдаёт:
drwxr-xr-x 1 root root 0 Nov 5 10:26 srv

Процесс монтирования меняет у этой папки как владельца, так и уровни доступа.

sudo mount.cifs \\192.168.0.1\catalog /mnt/srv/ -o username=someUser,uid=501,forceuid После монтирования она выдаёт:
drwxr-xr-x 1 root root 0 Nov 5 10:26 srv

/dev/mapper/vg_srvrproxy01-lv_root / ext4 rw 0 0
proc /proc proc rw 0 0
sysfs /sys sysfs rw 0 0
devpts /dev/pts devpts rw,gid=5,mode=620 0 0
tmpfs /dev/shm tmpfs rw 0 0
/dev/mapper/ddf1_4c5349202020202080862925000000004711471100001450p1 /boot ext4 rw 0 0
/dev/mapper/vg_srvrproxy01-lv_home /home ext4 rw 0 0
none /proc/sys/fs/binfmt_misc binfmt_misc rw 0 0
//192.168.0.51/Lims_1C /mnt/srv-1c cifs rw 0 0

Читайте также: