- What is Startup script in Linux?
- Remove the script from startup
- How do I run a bash script at startup?
- How do I get a script to run on startup in Linux?
- How do I run a command prompt at startup?
- What do you need to run PHP as root?
- How not to run PHP scripts as root!
- How do you adjust the sudoers file with visudo?
- You may also be interested in
- Re: запуск скрипта от имени root
- Re: запуск скрипта от имени root
- Re: запуск скрипта от имени root
- Re: запуск скрипта от имени root
- Re: запуск скрипта от имени root
- Re: запуск скрипта от имени root
- Re: запуск скрипта от имени root
- Re: запуск скрипта от имени root
- Re: запуск скрипта от имени root
- Re: запуск скрипта от имени root
- Re: запуск скрипта от имени root
- Re: запуск скрипта от имени root
- Re: запуск скрипта от имени root
- How do I make a shell script run automatically?
- How do I run a script without Sudo?
- Setting up the script with Cron
- How do I write a script in Linux?
- Setting up Cron
- How do I automate a Linux command?
- Detailed
- How do I run a shell script automatically in Unix?
- Troubleshooting Cron
- Случилась беда с KRoN73
- Using su
- Using sudo
- Problem
- How do I run a Sudo file?
- Using runuser
- How do I run a Linux command?
- Conclusion
What is Startup script in Linux?
Think of it like this: a startup script is something that is run automatically by some program. For example: say you don’t like the default clock your OS has.
Remove the script from startup
In the same way that the command was added to the crontab, it can be removed. To do this, open up a terminal and enter sudo crontab -e
. This will load the crontab file. Just delete the command that was added, save it, and restart the computer (or server).
How do I run a bash script at startup?
- Create a file for your startup script and write your script in the file: $ sudo nano /etc/init.d/superscript.
- Save and exit: Ctrl + X , Y , Enter.
- Make the script executable: $ sudo chmod 755 /etc/init.d/superscript.
- Register script to be run at startup: $ sudo update-rc.d superscript defaults.
How do I get a script to run on startup in Linux?
There is more than one way to do this.
- Put the command in your crontab file. The crontab file in Linux is a daemon that performs user-edited tasks at specific times and events. …
- Put a script containing the command in your /etc directory. Create a script such as «startup.sh» using your favorite text editor. …
- Edit the /rc.
How do I run a command prompt at startup?
Run a script on start up on Windows 10
- Create a shortcut to the batch file.
- Once the shortcut is created, right-click the shortcut file and select Cut.
- Click Start, then Programs or All Programs. …
- Once the Startup folder is opened, click Edit in the menu bar, then Paste to paste the shortcut file into the Startup folder.
Have you ever wanted to run a script at startup with root privileges? If you have a home server, or maybe even just a Linux desktop, this might have crossed your mind. This sounds iffy, but if you understand the risks, the reward for doing this can be quite good.
The main reasons are that there would be no more starting up the server, logging in over ssh, entering a password, getting a root shell and then manually executing script after script. Instead, harness the power of cron, and set your system to automatically run these scripts at startup! Here’s how to do it.
Tip: Check out our regular expressions cheatsheet.
What do you need to run PHP as root?
You will need to use visudo and edit the sudoers file.
How not to run PHP scripts as root!
In other words –
The install will typically fail because Apache would need to request elevated permissions. Believe me when I say that this is a good thing.
How do you adjust the sudoers file with visudo?
The bad way –
sudo visudo -f /etc/sudoers.d/myOverrides
www-data ALL=(ALL) NOPASSWD: ALL
Again, avoid this method at all costs! It is a bad idea.
The better way –
www-data ALL=(ALL) NOPASSWD: /path/to/myscript/createUser.sh
#!/bin/bash
echo "Adding user $1..."
pwd=$(perl -e 'print crypt($ARGV[0], "password")' $2)
useradd -m -p $pwd $1
<?php
echo shell_exec("sudo /path/to/my/script/createUser.sh myUsername myPassword");
?>
You may also be interested in
About the Authors
Anto’s editorial team loves the cloud as much as you! Each member of Anto’s editorial team is a Cloud expert in their own right. Anto Online takes great pride in helping fellow Cloud enthusiasts. Let us know if you have an excellent idea for the next topic! Contact Anto Online if you want to contribute.
Support the Cause
Support Anto Online and buy us a coffee. Anything is possible with coffee and code.
Buy me a coffee
I tend to address this by allowing the process that runs the server, in this case the webserver, to execute the relevant command, and only that command, via passwordless sudo.
nagios ALL=(root) NOPASSWD: /usr/lib/nagios/plugins/check_md_raid
You would have something similar, perhaps:
apache ALL=(root) NOPASSWD: /sbin/service dnsmasq restart
To address your concerns above, this doesn’t allow anyone who can subvert the apache process to run sudo bash
, sudo shutdown -h now
, or even sudo service dnsmasq stop
. It only allows exactly what’s specified in the sudoers file.
It’s true that if the service
command is badly written, and if someone can find a way to make running service dnsmasq stop
as root via sudo change the mode on the passwd
file, or start an allow-all sshd
on port 22222, or indeed do anything nefarious, then you have a problem. But in such a case you have a problem however you run the service command as root, whether it’s via sudo or any other mechanism. sudo
does its best to sanitise the environment, and the service command is a stock part of most GNU/Linuxes (and has been for some time) and therefore probably has no obvious holes.
Running the service
command via passwordless sudo
is no less safe than any other method of running it, and probably more safe than many home-brewed or other less-well-tested ways.
I’m trying to write a bash script (in Ubuntu) that will backup a directory using tar.
How can I do a check in the script so that it can only be run as root (or with sudo)?
I know there has to be an easy solution, I just haven’t been able to find it by googling.
asked Jul 8, 2009 at 17:30
To pull the effective uid use this command:
id -u
If the result is ‘0’ then the script is either running as root, or using sudo. You can run the check by doing something like:
if [[ $(/usr/bin/id -u) -ne 0 ]]; then
echo "Not running as root"
exit
fi
answered Jul 8, 2009 at 17:36
Scott Pack
10 gold badges53 silver badges83 bronze badges
I assume you know that by changing the ownership to root
chown root:root file
and setting the permissions to 700
chmod 700 file
you will accomplish the same thing — without the suggestion to run as sudo.
But I will post this answer for completeness.
answered Jul 8, 2009 at 17:43
19 gold badges70 silver badges102 bronze badges
The bash variable $EUID
shows the effective UID the script is running at, if you want to make sure the script runs as root, check wether $EUID
contains the value 0 or not:
if [[ $EUID -ne 0 ]]; then
echo "$0 is not running as root. Try using sudo."
exit 2
fi
This is better than the solution with /usr/bin/id
(for bash scripts!) because it doesn’t require an external command.
answered Mar 24, 2015 at 13:56
2 silver badges6 bronze badges
You can use whoami command as well.
if [ ! "`whoami`" = "root" ]
then
echo "\nPlease run script as root."
exit 1
fi
answered Jul 22, 2009 at 9:12
1 gold badge2 silver badges7 bronze badges
answered Jul 8, 2009 at 18:02
1 gold badge31 silver badges44 bronze badges
One simple way to make the script only runnable by root is to start the script with the line:
#!/bin/su root
answered Aug 13, 2016 at 20:55
1 gold badge2 silver badges9 bronze badges
answered May 15, 2017 at 18:12
How to make a script execute as root, no matter who executes it?
I read about setuid but I’m not sure how to do this.
I’m using Linux, Ubuntu 12.04 LTS.
17 gold badges72 silver badges114 bronze badges
asked Jun 22, 2012 at 19:29
8 gold badges19 silver badges34 bronze badges
Be really careful: scripts combined with setuid are dangerous!
First, please have a look on this question/answers, especially on this answer and security warning.
If you still want to execute your script with setuid
set, then you can write a short C program as wrapper and set the setuid
bit on the compiled binary.
int main(void) {
setuid(0);
clearenv();
system("/absolute/path/to/your/script.sh");
}
Another solution using sudo
(mentioned here):
As root, prevent write (and maybe other) access to your script:
chown root /absolute/path/to/your/script.sh chmod 700 /absolute/path/to/your/script.sh
Verify that noone except root can replace the script, e.g. by modifying the access rights of the parent folder:
chown root /absolute/path/to/your/ chmod 755 /absolute/path/to/your/
Modify sudo access rights in
/etc/sudoers
withvisudo
:ALL ALL = (root) NOPASSWD: /absolute/path/to/your/script.sh
sudo /absolute/path/to/your/script.sh
This is similar to using the wrapper/setuid solution above.
answered Jun 22, 2012 at 21:06
Easiest and safest way is to use SETUID bits in file permissions.
that way command permissions will be elevated to file owner permissions.
to prevent script from edition do not set write for everyone bits.
answered Nov 1, 2012 at 13:15
1 bronze badge
I don’t know if this may be useful but, to make the script only run as root, you could use this shebang on the first line of the script:
#!/bin/su root
answered May 25, 2019 at 11:29
Stumbled across this question when I was searching for a snippet like this:
[ "$(id -u)" != 0 ] && exec sudo "$0"
Adding this to the top of a script will preface it with sudo and ensure it’ll always run as root, allowing us to run our script as ./hello.sh
. Of course, sudo will still ask for a password, but the accepted answer will help avoid that.
answered Aug 12, 2020 at 15:29
allez
- Сообщения: 2223
- Статус: Не очень злой админ 🙂
- ОС: SuSE, CentOS, FreeBSD, Windows
Re: запуск скрипта от имени root
Можно, конечно, и так — использовать sudo в самом скрипте, а можно и просто весь скрипт запустить командой вида «sudo script.sh».
Bizdelnick
- Модератор
- Сообщения: 20366
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: запуск скрипта от имени root
safronowmax писал(а): ↑
vbox ALL=(ALL) ALL,
Вам, видимо, нужно что-то вроде
Код: Выделить всё
vbox localhost = NOPASSWD: /usr/local/bin/myscript
eddy
- Сообщения: 3321
- Статус: Красный глаз тролля
- ОС: ArchLinux
- Контактная информация:
Re: запуск скрипта от имени root
А не лучше ли по-человечески сделать: suid добавить, из демона вызвать или еще как?
RTFM
——-
KOI8-R — патриотичная кодировка
drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит…
- ОС: Slackware-current
- Контактная информация:
Re: запуск скрипта от имени root
trendix писал(а): ↑
А нельзя изменить пользователя у этого скрипта?
можно. А зачем? вопрос о запуске от имени рута — ему плевать на хозяина.
trendix писал(а): ↑
А нельзя ли его запускать при старте ОС?
дистрибутивозависимо. Есть универсальный вариант — /etc/rc.local
drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит…
- ОС: Slackware-current
- Контактная информация:
Re: запуск скрипта от имени root
liaonau писал(а): ↑
И вызван когнитивный диссонанс ☺
у гентушника? о_О
может вам рассказать, где у вас компилятор, и как называется?
По теме: используйте /etc/conf.d/local.start, если у вас гента, и вы этого не знаете.
liaonau писал(а): ↑
Нет универсального ответа
/etc/rc.local это универсальный ответ для большинства дистрибутивов, но он не Ъ. Например в слаке такого тоже делать не нужно, там /etc/rc.d/rc.local (только все слакварщики, в отличие от гентушников, в курсе)
Kopilov
- Сообщения: 929
- ОС: [K]Ubuntu, Debian
Re: запуск скрипта от имени root
drBatty писал(а): ↑
По теме: используйте /etc/conf.d/local.start, если у вас гента, и вы этого не знаете.
Откуда такая информация?
В моей рабочей генте (ветка stable, обновлял месяц назад) такого файла нет, и я не сталкивался с предложением его создать.
А каталог
liaonau писал(а): ↑
/etc/local.d/
имеется, и в нём лежит файл README с информацией:
Код: Выделить всё
This directory should contain programs or scripts which are to be run
when the local service is started or stopped.
If a file in this directory is executable and it has a .start extension,
it will be run when the local service is started. If a file is
executable and it has a .stop extension, it will be run when the local
service is stopped.
All files are processed in lexical order.
Poor Fred
- Сообщения: 1575
- Статус: Pygoscelis papua
- ОС: Gentoo Linux, FreeBSD
Re: запуск скрипта от имени root
Poor Fred »
safronowmax писал(а): ↑
Проблема в том, что данный скрипт будет отдавать данные в zabbix, и такой вариант не подойдет, попробовал в /etc/sudoerc прописать пользователя с правами root: vbox ALL=(ALL) ALL, но что-то все равно не работает
Как будет отдавать? Может быть, наоборот, zabbix-agent будет сам забирать? Тогда и пользователь должен быть другой. zabbix, как ни странно.
drBatty писал(а): ↑
По теме: используйте /etc/conf.d/local.start, если у вас гента, и вы этого не знаете.
В Генте это давно устарело.
Убить всех человеков!
Kopilov
- Сообщения: 929
- ОС: [K]Ubuntu, Debian
Re: запуск скрипта от имени root
Обратите внимание на дату:
Автор Xakep, дата создания 3 апреля, 2006 — 12:11.
/etc/conf.d/local.start
А чуть ниже и про /etc/local.d/README написано
Автор _SerEga_, дата создания 10 февраля, 2012 — 11:51.
cat /etc/local.d/README
Если в Slackware документация не теряет актуальности за шесть лет — я буду поражён её консервативностью.
liaonau
- Сообщения: 390
- ОС: gentoo
Re: запуск скрипта от имени root
drBatty писал(а): ↑
у гентушника? о_О
может вам рассказать, где у вас компилятор, и как называется?
У любого логичного человека. Поражаюсь всегда тому, что вам хочется комментировать любой вопрос вне зависимости от уровня осведомленности в нем:
drBatty писал(а): ↑
По теме: используйте /etc/conf.d/local.start, если у вас гента, и вы этого не знаете.
drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит…
- ОС: Slackware-current
- Контактная информация:
Re: запуск скрипта от имени root
Poor Fred писал(а): ↑
В Генте это давно устарело.
Kopilov писал(а): ↑
Если в Slackware документация не теряет актуальности за шесть лет — я буду поражён её консервативностью.
смотря на что. Когда KDE3 сменилась на KDE4 то очевидно и документация поменялась, но вот какой смысл менять загрузочные скрипты — мне непонятно. Ну а раз они не меняются, то и документация к ним тоже.
liaonau писал(а): ↑
У любого логичного человека. Поражаюсь всегда тому, что вам хочется комментировать любой вопрос вне зависимости от уровня осведомленности в нем
taaroa
- Сообщения: 1319
Re: запуск скрипта от имени root
Vascom писал(а): ↑
Да сделай уже автозагрузку через модуль systemd
в rhel6 и ubuntu 12.04 нет systemd, например.
— Рядовой Петров! А о чем вы думаете, когда смотрите на этот кирпич?
— О системд, товарищ старшина.
— Как о системд?!
— А я всегда о нем думаю.
Vascom писал(а): ↑
и хватит спорить по пустякам.
Bizdelnick
- Модератор
- Сообщения: 20366
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: запуск скрипта от имени root
Я не очень понимаю, о чём спор, если ТС уже неделю как в теме не отмечался.
Poor Fred
- Сообщения: 1575
- Статус: Pygoscelis papua
- ОС: Gentoo Linux, FreeBSD
Re: запуск скрипта от имени root
Poor Fred »
drBatty писал(а): ↑
Poor Fred писал(а): ↑
В Генте это давно устарело.
Зачем? Кто в Генту сидит — сам знает, кто устанавливает с нуля — сам увидит при редактировании конфигов. А кто другие дистрибы юзает — тем это безразлично.
Убить всех человеков!
How do I make a shell script run automatically?
You have several options to run the script on remote machine: copy the file on the remote machine in the same location with the same file name (with ftp or ssh you can do this with another script) and set the linux machine’s cron job to execute that same file daily.
How do I run a script without Sudo?
- cd /PATH/TO/FOLDER.
- chmod u+x ./filename (u — user, +x — execute permissions)
- if you want to execute it without .sh, add the following shebang line to the first line of the file: #!/bin/bash.
- If you want to execute it from anywhere on your system add the path of the folder to the $PATH variable.
Setting up the script with Cron
reboot homederrikstartupscript.sh
How do I write a script in Linux?
How to Write Shell Script in Linux/Unix
- Create a file using a vi editor(or any other editor). Name script file with extension . sh.
- Start the script with #! /bin/sh.
- Write some code.
- Save the script file as filename.sh.
- For executing the script type bash filename.sh.
Setting up Cron
Most Linux distributions come with the ability to access cron by just entering crontab -e
. However, if you’ve entered this command, and nothing at all has happened, you’re on a Linux distribution that has no way to interact with cron. This means that you’ll need to install a tool to continue. The most popular tool to use in this situation is a daemon known as “cronie.” It’s a very popular tool and resides in most popular Linux distribution repositories.
Open up a terminal and install cronie with your package manager. Alternatively, head over to this page and download a package for your distribution.
How do I automate a Linux command?
Here are my steps, in order:
- launch putty, choose hostname & port, click Open (would love to script/automate this 1st part too)
- linux shell/terminal opens.
- I enter my login and pwd.
- I enter this command: sudo su — psoftXXX.
- I enter my pwd again and hit enter.
- I am presented with a little cmd-shell menu and a prompt. …
- cd /
Detailed
I have a Flask application which changes colours of an led-strip according to incoming requests.
Regardless of which library is used, accessing GPIO always needs root permission.
I would like to change this for two reasons:
I am using venv and running the app with
sudo
causes the globally installed python packaged to be used rather than the ones in venv.In its finished state the application should run in apache. So far I didn’t get apache to run the app with sudo.
I would like to focus on the main problem, rather than Flask or the led-strip library.
Thanks in advance!
How do I run a shell script automatically in Unix?
- Run your test script without cron to make sure it actually works.
- Make sure you saved your command in cron, use sudo crontab -e.
- Reboot the server to confirm it all works sudo @reboot.
Troubleshooting Cron
Sometimes cron doesn’t execute commands, and that can be a problem. The easiest way to troubleshoot any issues with cron (should there be any) is to look at the system log. To do that, open the terminal window and enter this command:
CRON varlogsyslog
Случилась беда с KRoN73
НАТО это опасная антироссийская военная организация, сильнейшая в мире.
Если так, то почему она не уничтожила вашу помойку в самый удобный момент, в начале 90х? Вместо этого зачем-то они стали помогать выжить. А ублюдочная помойка, нарастив жирок и встав на ноги, снова начала выпендриваться.
Так что факты говорят о том что к сожалению на самом деле никакая не антироссийская. К сожалению. Иначе бы биомусорки уже не было бы почти 20 лет.
чтобы заслужить такое предательство.
Какое предательство? Они вам клялись в верности? С чего биомусор считает что их бывшие колонии должны быть их вечными рабами? Совок давно растерял свои колонии. Всё, забудьте. Но вы вместо того чтобы заниматься своими внутренними проблемами, повышать качество своей жизни, продолжаете жить в говне и при этом всё своё внимание уделять тому, как живут граждане другой страны. Сидит биомусор за телевизором, жрёт пустую гречку, т.к. им вождь запретил нормальные продукты, а по телевизору каждый выпуск новостей только о том как весело скачут хохлы, пиндосы совсем офигели и в конце вождь обещает что всё будет хорошо.
Так что не жди что такие как я будем каяться.
Да всем насрать. Восстановите себе железный занавес, весь мир вздохнёт с облегчением. Я очень надеюсь что Пути всё же в скором времени вас отрежет от цивилизованного мира, отключит от сети, оставив только внутренний чебурнет. А когда решит уйти на пенсию, оставит после себя Кадырова в качестве преемника. А будете ли вы каяться, пофиг. История давно показала что вы настолько ублюдочная биомасса что никогда не раскаиваетесь в плохих поступках.
Но время всё раставляет по местам и вы не зря живёте так убого. Впрочем, несмотря на это, всё же живёте лучше чем заслуживаете. Хотя, какие там у вас перспективы?
Мы будем воевать (и поддерживать) за нейтральный военный статус Украины.
«Мы» это кто? Нет никаких вас. Надо будет, тебя или твоих ублюдочных детей бросят пушечным мясом в горячую точку, ничего у тебя не спрашивая. И воевать вы будете не за что-то, как ты тут пафосно пишешь, а за своего хозяина и его друзей. Пиздоболов таких как ты дохрена в сети, а на донбас поддерживать «Русский Мир» отправить некого. Так говоришь «мы», будто у вас патриотизм какой-то есть. Существование принудительной службы в армии как бы намекает что патриотизмом и не пахнет, на деле всё только исподтишка.
PS: Не украинец, если что. Вы не только им навредили.
anonymous
()
Using su
su [username]
su john
su -
su john -c 'command'
Using sudo
sudo [command]
sudo apt-get update
Problem
Let’s take for example a folder /path/to/folder
.
First I make sure that the folder and all content is owned by root:
sudo chown -R root:root /path/to/folder
sudo chmod -R +x /path/to/folder
sudo chmod -R u+s /path/to/folder
sudo chmod -R 4755 /path/to/folder
But the script I want to run, still gives me:
Can't open /dev/mem: Permission denied
How do I run a Sudo file?
- Open a terminal.
- Browse to the folder where the executable file is stored.
- Type the following command: for any . bin file: sudo chmod +x filename.bin. for any .run file: sudo chmod +x filename.run.
- When asked for, type the required password and press Enter.
Using runuser
runuser [options] [username] [command]
runuser -l john -c 'ls -l'
The option -l is used to make the environment similar to a login shell and -c is used to specify the command that you want to run.
runuser -u john ls -l
How do I run a Linux command?
Launch a terminal from your desktop’s application menu and you will see the bash shell. There are other shells, but most Linux distributions use bash by default. Press Enter after typing a command to run it. Note that you don’t need to add an .exe or anything like that – programs don’t have file extensions on Linux.
Conclusion
What root scripts would you run at startup on your Linux box? Tell us below!
Subscribe to our newsletter!
Our latest tutorials delivered straight to your inbox