Почему режим setuid S, похоже, работает для не-владельцев скрипта?

Просто поместите следующую строку вверху файла:

#!/bin/bash

Таким образом, этот файл будет автоматически напечатан: Shell Script без какого-либо расширения!

Не забудьте предоставить разрешение на выполнение file.

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

0
задан 5 October 2017 в 15:39

3 ответа

бит 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 выполняются только в бинарных исполняемых файлах (и в каталогах, для которых они делают что-то совсем другое).

4
ответ дан 22 May 2018 в 17:50
  • 1
    Предполагаемое поведение по-прежнему происходит в двоичном формате, что все еще приводит меня к одному и тому же вопросу – Aruka J 5 October 2017 в 02:35
  • 2
    @ArukaJ Да , другой пользователь сможет запустить его, и он будет работать как владелец, который не сможет его запустить. Это то, что вы хотели задать в этот вопрос? Если я понимаю , что предыдущий вопрос о вашем правильно, мне кажется, что я должен опубликовать ответ об этом поведении с бинарниками там , если я могу объяснить это так, так же как и другие ответы, которые уже существуют (что, я думаю, я могу). Или я не понимаю цели этого оригинального вопроса? – Eliah Kagan 5 October 2017 в 02:39
  • 3
    «Это то, что вы хотели спросить в этом вопросе». Да. Я не понимаю, почему мы можем работать как владелец, который сам не может его запустить. – Aruka J 5 October 2017 в 02:41
  • 4
    Ваш ответ технически отвечает на текущий вопрос (я испортил свой сценарий, и это причина выхода), но ответ на другой вопрос будет приветствуем, так как это то, что я пытался понять. – Aruka J 5 October 2017 в 02:44
  • 5
    @ArukaJ Я должен скоро покинуть свою клавиатуру, но я постараюсь отправить там ответ, когда вернусь. Что касается этого вопроса , часть его касается " " цитирования в оболочке, но часть этого вопроса касается статуса скриптов setuid / setgid в Linux, что является важным тема тоже. Поэтому я считаю весьма полезным, что этот вопрос существует, в том числе и для будущих читателей, и даже в стороне от того, что может помочь тем, кто ищет проблемы с цитированием. Конечно, я мог быть предвзятым - мне нравилось писать этот ответ, в конце концов, и обычно обычно кажется, что его сообщения полезны широкой аудитории. :) – Eliah Kagan 5 October 2017 в 03:04

бит 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 выполняются только в бинарных исполняемых файлах (и в каталогах, для которых они делают что-то совсем другое).

4
ответ дан 18 July 2018 в 05:45

бит 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 выполняются только в бинарных исполняемых файлах (и в каталогах, для которых они делают что-то совсем другое).

4
ответ дан 24 July 2018 в 18:25

Другие вопросы по тегам:

Похожие вопросы: