Можно использовать find
для этого:
find . \! -name 'temp_log*'
Это просто распечатает имена, можно добавить -ls
сделать a ls -l
вывод стиля с меткой времени и полномочиями или использованием -exec ls {} +
для фактической передачи ls с любыми опциями, Вы хотите для столбцов, сортировки, и т.д.
Я записал это предположение, что это было просто файлами в каталоге. Если каталог содержит другие каталоги, можно не хотеть рекурсивно перечислять их
find . \! -name 'temp_log*' -maxdepth 1
И если Вы будете использовать ls, то Вы захотите передать-d опцию мешать ему перечислить в каталогах: -exec ls -d {} +
Двоичный файл 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) = ?
Да! Все могут выполнить ту команду. Как Вы сказали, Вы можете выполнить его, но Вы сталкиваетесь с "Потребностью быть корневым" сообщением, не a permission denied
. shutdown
управляйте проверяет Ваш UID
видеть, являетесь ли Вы корнем, или нет.
Любой может выполниться 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
работает как корень в этом сценарии.
shutdown
, но та программа не может на самом деле инициировать завершение работы системы, если у текущего пользователя нет полномочий пользователя root.Правильно?
– LarsH
04.12.2013, 21:26
shutdown
. setuid программа запущена с полномочиями пользователя, который владеет исполняемым файлом. Например, /etc/passwd
выполнения с корневыми полномочиями позволить Вам изменять файл паролей. См. страницу справочника для chmod
.
– alexis
08.12.2013, 20:34
/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?
Биты полномочий не обязательно исключают управление доступом на основе пользователя или группы.
-a
от командной строки не будет иметь никакого значения: shutdown -a
должен все еще быть выполнен с корневыми полномочиями (который init
предоставления на control-alt-del).
– alexis
04.12.2013, 13:38
shutdown
проверки, что Ваш UID 0. – LarsH 04.12.2013, 21:29if(getuid() != 0) printf("Need to be root");
. Который на самом деле исходный код показывает ему, чтобы быть. – msw 06.12.2013, 15:17