Просто поместите следующую строку вверху файла:
#!/bin/bash
Таким образом, этот файл будет автоматически напечатан: Shell Script без какого-либо расширения!
Не забудьте предоставить разрешение на выполнение file.
Для того, чтобы поставить скрипт так, чтобы его можно было запустить с помощью прямой команды, посетите: Где я должен поместить свой скрипт, чтобы я мог запустить его с помощью прямой команды?
бит setuid не влияет на скрипты в системах на базе Linux, таких как Ubuntu. То, что вы наблюдаете, является результатом ошибки цитирования, которую вы создали при создании сценария. Ваш скрипт фактически не проверяет, кто его запускает. Он theowner жестко закодирован в нем и всегда сообщает Running as user theowner независимо от того, с каким пользователем он работает. Чтобы подтвердить это, просто проверьте содержимое скрипта.
Мое имя пользователя ek. Когда я создаю свой скрипт и проверяю его содержимое, я вижу:
$ echo "echo \"Running as user $(whoami)\"" > script.sh
$ cat script.sh
echo "Running as user ek"
В третьей строке отображается содержимое скрипта. Сценарий не определяет программным путем ek, работая. Я еще не запускал его! Текст ek появляется в самом скрипте, так же, как текст theowner появляется в вашем.
Я не изменял разрешения для скрипта. Вот что происходит, когда я делаю его исполняемым, а затем запускаю его как себя (ek), а затем запускаю его как отдельный пользователь (ek2). Обратите внимание, что это происходит даже тогда, когда я не устанавливаю бит setuid (и вывод ls -l показывает, что он не установлен).
$ chmod +x script.sh
$ ls -l script.sh
-rwxrwxr-x 1 ek ek 26 Oct 4 18:29 script.sh
$ ./script.sh
Running as user ek
$ su ek2 -c './script.sh'
Password:
Running as user ek
Почему оценка $(whoami) была оценена, а не сохранена и написано буквально в ваш сценарий? Это связано с тем, что не оказывает никакого влияния на скрипты в системах на базе Linux , такие как расширение параметров и другие расширения, инициируемые $, выполняются вашей оболочкой даже внутри строк с двойными кавычками. [!d6 ]
Вместо этого вы можете использовать расширение параметра , чтобы предотвратить это. Затем вы получите:
$ echo 'echo "Running as user $(whoami)"' > script2.sh
$ cat script2.sh
echo "Running as user $(whoami)"
$ chmod +x script2.sh
$ ls -l script2.sh
-rwxrwxr-x 1 ek ek 33 Oct 4 18:39 script2.sh
$ ./script2.sh
Running as user ek
$ su ek2 -c './script2.sh'
Password:
Running as user ek2
$ chmod u=rs,go+x script2.sh
$ ls -l script2.sh
-r-Srwxr-x 1 ek ek 33 Oct 4 18:39 script2.sh
$ ./script2.sh
-bash: ./script2.sh: Permission denied
$ su ek2 --c './script2.sh'
Password:
Running as user ek2
Обратите внимание, что сценарий по-прежнему работает как ek2, потому что операционная система игнорирует бит setuid, как и во всех сценариях. Биты setuid и setgid выполняются только в бинарных исполняемых файлах (и в каталогах, для которых они делают что-то совсем другое).
бит setuid не влияет на скрипты в системах на базе Linux, таких как Ubuntu. То, что вы наблюдаете, является результатом ошибки цитирования, которую вы создали при создании сценария. Ваш скрипт фактически не проверяет, кто его запускает. Он theowner жестко закодирован в нем и всегда сообщает Running as user theowner независимо от того, с каким пользователем он работает. Чтобы подтвердить это, просто проверьте содержимое скрипта.
Мое имя пользователя ek. Когда я создаю свой скрипт и проверяю его содержимое, я вижу:
$ echo "echo \"Running as user $(whoami)\"" > script.sh
$ cat script.sh
echo "Running as user ek"
В третьей строке отображается содержимое скрипта. Сценарий не определяет программным путем ek, работая. Я еще не запускал его! Текст ek появляется в самом скрипте, так же, как текст theowner появляется в вашем.
Я не изменял разрешения для скрипта. Вот что происходит, когда я делаю его исполняемым, а затем запускаю его как себя (ek), а затем запускаю его как отдельный пользователь (ek2). Обратите внимание, что это происходит даже тогда, когда я не устанавливаю бит setuid (и вывод ls -l показывает, что он не установлен).
$ chmod +x script.sh
$ ls -l script.sh
-rwxrwxr-x 1 ek ek 26 Oct 4 18:29 script.sh
$ ./script.sh
Running as user ek
$ su ek2 -c './script.sh'
Password:
Running as user ek
Почему оценка $(whoami) была оценена, а не сохранена и написано буквально в ваш сценарий? Это связано с тем, что не оказывает никакого влияния на скрипты в системах на базе Linux , такие как расширение параметров и другие расширения, инициируемые $, выполняются вашей оболочкой даже внутри строк с двойными кавычками.
Вместо этого вы можете использовать расширение параметра , чтобы предотвратить это. Затем вы получите:
$ echo 'echo "Running as user $(whoami)"' > script2.sh
$ cat script2.sh
echo "Running as user $(whoami)"
$ chmod +x script2.sh
$ ls -l script2.sh
-rwxrwxr-x 1 ek ek 33 Oct 4 18:39 script2.sh
$ ./script2.sh
Running as user ek
$ su ek2 -c './script2.sh'
Password:
Running as user ek2
$ chmod u=rs,go+x script2.sh
$ ls -l script2.sh
-r-Srwxr-x 1 ek ek 33 Oct 4 18:39 script2.sh
$ ./script2.sh
-bash: ./script2.sh: Permission denied
$ su ek2 --c './script2.sh'
Password:
Running as user ek2
Обратите внимание, что сценарий по-прежнему работает как ek2, потому что операционная система игнорирует бит setuid, как и во всех сценариях. Биты setuid и setgid выполняются только в бинарных исполняемых файлах (и в каталогах, для которых они делают что-то совсем другое).
бит setuid не влияет на скрипты в системах на базе Linux, таких как Ubuntu. То, что вы наблюдаете, является результатом ошибки цитирования, которую вы создали при создании сценария. Ваш скрипт фактически не проверяет, кто его запускает. Он theowner жестко закодирован в нем и всегда сообщает Running as user theowner независимо от того, с каким пользователем он работает. Чтобы подтвердить это, просто проверьте содержимое скрипта.
Мое имя пользователя ek. Когда я создаю свой скрипт и проверяю его содержимое, я вижу:
$ echo "echo \"Running as user $(whoami)\"" > script.sh
$ cat script.sh
echo "Running as user ek"
В третьей строке отображается содержимое скрипта. Сценарий не определяет программным путем ek, работая. Я еще не запускал его! Текст ek появляется в самом скрипте, так же, как текст theowner появляется в вашем.
Я не изменял разрешения для скрипта. Вот что происходит, когда я делаю его исполняемым, а затем запускаю его как себя (ek), а затем запускаю его как отдельный пользователь (ek2). Обратите внимание, что это происходит даже тогда, когда я не устанавливаю бит setuid (и вывод ls -l показывает, что он не установлен).
$ chmod +x script.sh
$ ls -l script.sh
-rwxrwxr-x 1 ek ek 26 Oct 4 18:29 script.sh
$ ./script.sh
Running as user ek
$ su ek2 -c './script.sh'
Password:
Running as user ek
Почему оценка $(whoami) была оценена, а не сохранена и написано буквально в ваш сценарий? Это связано с тем, что не оказывает никакого влияния на скрипты в системах на базе Linux , такие как расширение параметров и другие расширения, инициируемые $, выполняются вашей оболочкой даже внутри строк с двойными кавычками.
Вместо этого вы можете использовать расширение параметра , чтобы предотвратить это. Затем вы получите:
$ echo 'echo "Running as user $(whoami)"' > script2.sh
$ cat script2.sh
echo "Running as user $(whoami)"
$ chmod +x script2.sh
$ ls -l script2.sh
-rwxrwxr-x 1 ek ek 33 Oct 4 18:39 script2.sh
$ ./script2.sh
Running as user ek
$ su ek2 -c './script2.sh'
Password:
Running as user ek2
$ chmod u=rs,go+x script2.sh
$ ls -l script2.sh
-r-Srwxr-x 1 ek ek 33 Oct 4 18:39 script2.sh
$ ./script2.sh
-bash: ./script2.sh: Permission denied
$ su ek2 --c './script2.sh'
Password:
Running as user ek2
Обратите внимание, что сценарий по-прежнему работает как ek2, потому что операционная система игнорирует бит setuid, как и во всех сценариях. Биты setuid и setgid выполняются только в бинарных исполняемых файлах (и в каталогах, для которых они делают что-то совсем другое).