Как я могу узнать, есть ли у меня разрешение на запуск определенной команды?

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

Например; Я хочу проверить, есть ли у меня право выдать команду shutdown, прежде чем я ее выпущу.

Что-то вроде следующих команд

-> doIhaveRightToIssue shutdown
-> Yes/No
1
задан 21 March 2017 в 18:51

4 ответа

С sudo:

$ sudo -l shutdown
/sbin/shutdown

Если у меня не было разрешения, sudo будет жаловаться вместо указания команды.

С polkit вы проверяете действие, которое вы хотите запустить:

$ pkcheck --action-id org.freedesktop.login1.power-off --process $$ -u --enable-internal-agent && echo yes
polkit\56temporary_authorization_id=tmpauthz1
yes

Поиск соответствующего действия - это другой вопрос.

21
ответ дан 23 May 2018 в 00:25
  • 1
    Проблема с sudo заключается в том, что я не sudoer в системе. Из-за этого я стараюсь быть осторожным, прежде чем я действительно выдаю команду. – Bernhard Colby 21 March 2017 в 18:54
  • 2
    @BernhardColby вы можете безопасно запустить sudo -l, даже если вы не sudoer - вот в чем смысл -l - сказать вам, можно ли запустить команду с sudo. – muru 21 March 2017 в 18:56
  • 3
    Спасибо (+1), я этого не знал. Я попробую ваше решение, как только я получу свой компьютер. – Bernhard Colby 21 March 2017 в 19:05

Вы можете использовать:

test -x $(command -v shutdown) && echo yes || echo no

command -v shutdown возвращает путь к команде shutdown. test -x проверяет, является ли этот путь для вас выполнимым.

Обратите внимание, что, хотя вы, возможно, сможете выполнить команду, команда может по-прежнему терпеть неудачу, потому что у нее есть недостаточное разрешение для выполнения задачи. Это обычный случай в системах Unix-типа, которые вместо того, чтобы ограничивать доступ к выполнению команды, вместо этого ограничивают доступ к операциям, которые действительно могут выполнять программы.

8
ответ дан 23 May 2018 в 00:25
  • 1
    Что касается, например, [F1]? – Dmitry Grigoryev 22 March 2017 в 19:17
  • 2
    Чтобы избежать проблем с псевдонимами, вы можете использовать $(which shutdown) или $(shopt -u expand_aliases && command -v shutdown). Однако эта проблема появляется только в интерактивном режиме. – David Foerster 23 March 2017 в 00:18

Ну, иногда это может быть немного сложно ...

Прежде всего, посмотрите разрешения с ls -l ...

owngrpotr user group command -rwxr-xr-x root bin vim

Если последний / третий триплет получил в нем x («может выполнить»), затем другие - и это означает, что вы - можете выполнить его ... Если это скрипт оболочки или что-то в этом роде, тогда другим понадобится r («может читать») )

Если другие не получили разрешения на выполнение, но группа (вторая тройка) делает, то вы можете выполнить ее, если вы являетесь членом ] others - в примере over, bin. Например, колесная группа часто используется для ограничения того, кто может запускать su, поэтому только пользователи, принадлежащие к этой группе, могут выполнить ее вообще. Другим примером является создание группы для разработчиков и ограничение выполнения C-компилятора и таких инструментов для этой группы.

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

+++

Даже если вы можете выполнить команду, команда может зависеть от доступ к файлам, каталогам и / или устройствам, к которым у вас нет доступа - это может ограничить то, что вы сможете сделать (возможно, вы ничего не сможете сделать).

Наконец, хотя вы может быть разрешено выполнить команду, сама команда может проверить вашу личность и отказаться от использования вами, если вы не указаны в конфигурационном файле или не являетесь определенными пользователями (например, group ). Например, команда mount разрешает root устанавливать любое устройство - обычным пользователям разрешено монтировать устройства, перечисленные как таковые в файле / etc / fstab ..., которые могут быть ничем. Если вы не bin и пытаетесь что-то монтировать, mount будет жаловаться и отказывать в монтировании устройства. Другим примером является sudo, который будет запущен для всех, но только пользователям, перечисленным в / etc / sudoers, будет разрешено запускать все как root.

5
ответ дан 23 May 2018 в 00:25

Использование which, type, command и т. д. - это практическое решение, которое будет работать в 99% случаев, но чтобы быть на 100% уверенным, вам придется вручную проверять каждый исполняемый каталог, указанный в вашем $PATH. Многие оболочки (в том числе bash) будут префикс вашей команды entres из $PATH и попытаться выполнить эти файлы повторно, пока они не добьются успеха. Поскольку which не может выполнить команду, невозможно предсказать, какой файл будет действительно выбран вашей оболочкой.

Например, представьте, что у меня есть PATH=/opt/arm/bin:/bin, оба каталога содержат исполняемые файлы, но для разных архитектуры. Запуск which dd вернет /opt/arm/bin/dd (при условии, что у меня есть разрешения для его выполнения), так как эта запись на первом месте. Однако, когда я запускаю dd в моей оболочке, /bin/dd будет выполнен, потому что /opt/arm/bin/dd не будет работать. Такая же ситуация может произойти в случае поврежденных двоичных файлов, отсутствующих библиотек и т. Д. В конце концов, нет надежного способа узнать, сможете ли вы выполнить команду или нет, кроме попыток.

Другое Аспект - это то, что вы считаете «имеющим разрешения». Как пользователь, у меня есть разрешения на запуск rm ~/file, но не rm /root/file. Опять же, нет общего способа узнать, что без ручного контроля или выдачи команды и наблюдения за результатами.

3
ответ дан 23 May 2018 в 00:25

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

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