Назовите 'PS' как обычного пользователя в Linux

Я не имею KDE удобный, но я ввел по абсолютному адресу в gnome-keyring немного и похоже, что это выполняет это путем предоставления ssh клиенту альтернативу askpass программа.

Проверьте значение $KWALLET_ASKPASS от Вашего терминала в KDE. Если это установлено на что-то, пробуют это: export SSH_ASKPASS=$KWALLET_ASKPASS.

Если не озираются через пакеты Вашего дистрибутива и видят, существует ли askpass заменяющая программа, связанная с kwallet. Если так, набор SSH_ASKPASS к той программе.

1
15.12.2011, 00:27
4 ответа

Вы не можете: если Вы делаете /bin/ps только исполняемый файл корнем, это будет только исполняемый файл корнем. Вы не можете только перенести сценарий вокруг этого для обхода проверки разрешения.

идентификатор пользователя набора

Если Вы хотите это, обычный пользователь звонит ps как базируются, необходимо посмотреть на разрешение набора-uid. От setuid статьи о Википедии:

setuid и setgid (короткий для "идентификатора пользователя аппарата после выполнения" и "идентификатора группы набора после выполнения", соответственно) 1 являются флагами прав доступа Unix, которые позволяют пользователям выполнять исполняемый файл с полномочиями владельца или группы исполняемого файла. Они часто используются, чтобы позволить пользователям на компьютерной системе запускать программы со временно поднятыми полномочиями для выполнения определенной задачи. В то время как принятый идентификатор пользователя или идентификационные обеспеченные полномочия группы не всегда поднимаются, как минимум они конкретны.

См. также страницу справочника chmod

sudo

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

7
27.01.2020, 23:11
-rwxr--r-- 1 root root ...... ps

Это говорит, что пользователь, который владеет им, читал, запишите и выполните разрешение и всех других просто чтение. Таким образом, никто, но корень не может выполниться ps.

Сценарий, который Вы записали, является исполняемым файлом всеми, но наследовал полномочия от того, который вызывает его, таким образом, он также получает "разрешение, отклоненное" при попытке выполниться ps, поскольку он - все еще обычный пользователь.

Мое предположение - то, что Вы хотите препятствовать тому, чтобы обычные пользователи выполнились ps с определенными опциями (не, что это имеет смысл мне), но затем необходимо добавить setuid бит или setgid бит к Вашему сценарию (см. страницу справочника chmod). Когда Вы делаете это, это получает полномочия не от invoker сценария, а от того, который владеет сценарием.

НО ОСТЕРЕГАЙТЕСЬ: установка suid обдумал сценарии, по сути небезопасно. Можно сделать очень много с переменными среды, этим, например, сказать оболочке выполнять команды - и затем они выполняются как корень (здесь, пользовательская c-программа с липким битом является лучшим решением).

Править: Другое решение состояло бы в том, чтобы использовать sudo. Здесь можно также настроить, какие параметры позволяются a sudoпрограмма редактора.

EDIT2: Почему я думаю, что это не хорошая идея запретить пользователя только от выполнения ps? Насколько я знаю, вся информация ps выводы могут быть также быть полученными через /proc система - поэтому, если Вы не делаете ничего иного, которое это - просто безопасность (или независимо от того, что Вы хотите достигнуть) путаницей.

3
27.01.2020, 23:11
  • 1
    +1 для sudo. Это - корректный способ сделать расширение полномочий. –  Deleted 03.11.2011, 11:20
  • 2
    Относительно setuid сценариев оболочки (плохая идея действительно), посмотрите, Позволяют setuid на сценариях оболочки. @ChrisSmith Даже sudo потребности, которые будут сделаны правильно. В частности, когда предоставление ограничило полномочия, удостоверьтесь это sudo только позволяет несколько переменных среды в белом списке через. –  Gilles 'SO- stop being evil' 04.11.2011, 00:56

Обычно лучше использовать 'sudo'. Если у Вас нет sudo установленным и настроенным

su - someuser -c "/yourscript.sh"
2
27.01.2020, 23:11

Иногда Вы хотите предоставить пользовательский доступ к информации, которая является только доступными корневыми инструментами использования, не давая пользовательские полномочия пользователя root через sudo. Например, предоставить информацию a smartctl -A не обеспечивая доступ к полной функциональности smartctl.

Рассмотрите, например, программу hddtemp. Это читает температуру данного жесткого диска от данных S.M.A.R.T. диска и печатает его к stdout. При нормальной необходимости в полномочиях пользователя root сделать так это также обеспечивает режим демона, s.t. программа работал бы как корень, ожидал бы в фоновом режиме некорневых клиентских запросов и направил бы выходные данные им каждый раз, когда они подключают сокет. Этим способом Вы могли реализовать демона (запустился как корень), который работает ps и перенаправляет его вывод каждый раз, когда клиент хочет.

Рассмотрите этот пример Python (возможно, должен быть, работал как корень):

import socket, subprocess

HOST = '127.0.0.1'
PORT = 50006

s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind((HOST,PORT))
s.listen(1)

while True:
    conn,addr = s.accept()
    pipe = subprocess.Popen(["/bin/ps"],stdout=subprocess.PIPE).stdout
    for line in pipe:
        conn.send(line)
    conn.close()

можно затем поместить a netcat localhost 50006 в Вашем call_ps_via_root.sh и Вы сделаны.

0
27.01.2020, 23:11
  • 1
    , которым преимущество этого подхода состоит в том, что Вы имеете полный контроль над каналом для запросов расширения полномочий. Оборотная сторона - то, что необходимо справиться с собственной аутентификацией. Если Вы хотите позволить пользователю работать smartctl -A только, настроить sudo позволить ему работать smartctl -A только. –  Gilles 'SO- stop being evil' 04.11.2011, 00:54

Теги

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