Почему я не могу выполнить завершение работы, когда разрешение является rwxr-xr-x?

Можно использовать find для этого:

find . \! -name 'temp_log*'

Это просто распечатает имена, можно добавить -ls сделать a ls -l вывод стиля с меткой времени и полномочиями или использованием -exec ls {} + для фактической передачи ls с любыми опциями, Вы хотите для столбцов, сортировки, и т.д.

Я записал это предположение, что это было просто файлами в каталоге. Если каталог содержит другие каталоги, можно не хотеть рекурсивно перечислять их

find . \! -name 'temp_log*' -maxdepth 1

И если Вы будете использовать ls, то Вы захотите передать-d опцию мешать ему перечислить в каталогах: -exec ls -d {} +

34
04.12.2013, 23:07
4 ответа

Двоичный файл shutdown самостоятельно проверки, если Ваш UID 0.

Посмотрите strace вывод:

strace /sbin/shutdown -r -h now
...
...
geteuid()                               = 10001
setuid(10001)                           = 0
getuid()                                = 10001
write(2, "shutdown: Need to be root\n", 26shutdown: Need to be root
) = 26
exit_group(1)                           = ?
15
27.01.2020, 19:36
  • 1
    +1 для показа использования strace... это полезно. Однако я не вижу, как эта трассировка показывает это shutdown проверки, что Ваш UID 0. –  LarsH 04.12.2013, 21:29
  • 2
    Вы не будете видеть, что в strace производил, так как он только сообщает о системных вызовах. Можно вывести что, когда getuid тесно сопровождается путем записи сообщения об ошибке, что код был подобен if(getuid() != 0) printf("Need to be root");. Который на самом деле исходный код показывает ему, чтобы быть. –  msw 06.12.2013, 15:17

Да! Все могут выполнить ту команду. Как Вы сказали, Вы можете выполнить его, но Вы сталкиваетесь с "Потребностью быть корневым" сообщением, не a permission denied. shutdown управляйте проверяет Ваш UID видеть, являетесь ли Вы корнем, или нет.

5
27.01.2020, 19:36

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

GLENDOWER: Я могу назвать алкоголь от громадного глубоко.
HOTSPUR: Да ведь так могу я, или так может любой человек; Но они прибудут, когда Вы действительно призовете к ним?
(от Henry IV)

shutdown не отличается от /bin/rm. Все могут выполнить его, но обычный пользователь не может удалить /etc, или корневой каталог другого пользователя.

Конкретно: Только процесс, работающий с полномочиями пользователя root (эффективный UID 0), может направить init систему, чтобы остановить системные службы, завершить все пользовательские процессы и выпустить системный вызов, который на самом деле останавливает машину. (Если shutdown если бы setuid был, то он работал бы как корень, неважно, кто вызывает его; но это не.)

Что относительно вызова shutdown от GUI, например, с control-alt-del? Важно понять это в этом случае, shutdown запускается непосредственно init и это работает с полномочиями пользователя root. Таким образом, все, кто приближается к консоли, могли потенциально завершить работу ее. Если это не будет желательно, то control-alt-delete будет на самом деле работать shutdown -a. (См. документацию, которую @some1 заключил в кавычки в их ответе). Это говорит shutdown чтобы проверить, входил ли в настоящее время в систему, пользователь разрешен выполнить его. Но это только релевантно потому что shutdown работает как корень в этом сценарии.

76
27.01.2020, 19:36
  • 1
    : Любой может выполнить программу shutdown, но та программа не может на самом деле инициировать завершение работы системы, если у текущего пользователя нет полномочий пользователя root.Правильно? –  LarsH 04.12.2013, 21:26
  • 2
    Это - в значительной степени это. Программы работают с полномочиями пользователя вызова, если они не setuid. Закрытие системы требует полномочий пользователя root, таким образом, Вы не можете записать свою собственную программу, чтобы сделать это, любой (кроме путем использования дыр в системе безопасности и т.д.). –  alexis 05.12.2013, 00:47
  • 3
    То, что "завершает работу, не является setuid", средним? –  Iain Samuel McLean Elder 07.12.2013, 18:45
  • 4
    @Iain, программы обычно запускаются с полномочиями пользователя, который вызывает их. Это также имеет место с shutdown. setuid программа запущена с полномочиями пользователя, который владеет исполняемым файлом. Например, /etc/passwd выполнения с корневыми полномочиями позволить Вам изменять файл паролей. См. страницу справочника для chmod. –  alexis 08.12.2013, 20:34
  • 5
    Это должно было быть"/usr/bin/passwd выполнения с корневыми полномочиями"! /etc/passwd не исполняемый файл (это - изменяемый "файл паролей"). –  alexis 11.12.2013, 01:19

Кажется, что завершение работы проверит список доступа при установке флага его с помощью-a:

ACCESS CONTROL
       shutdown can be called from init(8) when the magic keys CTRL-ALT-DEL are pressed, by creating an appropriate entry in /etc/inittab. This means that every‐
       one who has physical access to the console keyboard can shut the system down. To prevent this, shutdown can check to see if an authorized user  is  logged
       in  on  one of the virtual consoles. If shutdown is called with the -a argument (add this to the invocation of shutdown in /etc/inittab), it checks to see
       if the file /etc/shutdown.allow is present.  It then compares the login names in that file with the list of people that are logged in on a virtual console
       (from /var/run/utmp). Only if one of those authorized users or root is logged in, it will proceed. Otherwise it will write the message

       shutdown: no authorized users logged in

       to  the  (physical)  system  console.  The  format  of  /etc/shutdown.allow is one user name per line. Empty lines and comment lines (prefixed by a #) are
       allowed. Currently there is a limit of 32 users in this file.

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

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

Why can't I execute shutdown when the permission is rwxr-xr-x?

Биты полномочий не обязательно исключают управление доступом на основе пользователя или группы.

-1
27.01.2020, 19:36
  • 1
    Вызов его с -a от командной строки не будет иметь никакого значения: shutdown -a должен все еще быть выполнен с корневыми полномочиями (который init предоставления на control-alt-del). –  alexis 04.12.2013, 13:38

Теги

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