LINUX.ORG.RU

Запуск скрипта от другого пользователя


0

1

Есть в системе два пользователя: user1, user2. Есть script.sh. Задача: работая под user1 запустить скрипт от имени user2.

Да, знаю про su -c. Но оно просит пароль. А основная проблема это то, что есть еще main_script.sh откуда и будет вызываться script.sh (можно даже не отдельным скриптом, а внутри того же main_script.sh) и все это должно происходить автоматически, т.е. без дополнительного вмешательства и ввода пароля user2. Скажите, такое вообще возможно? И как это реализовать? что-то вертится в голове про setuid и про возможность использования групп(??). Но ничего толком собрать не могу.

Запуск команды от имени пользователя: 'sudo -u <username>'
Чтобы не просил пароль надо будет прописать правило в /etc/sudoers
Так что man sudoers' вам в помощь =)

kermzyxer
()
Ответ на: комментарий от zootcat

Итак, ничего не работает. Все равно просит пароль.

Вот мой файл sudoers:

# /etc/sudoers
#
# This file MUST be edited with the 'visudo' command as root.
#
# See the man page for details on how to write a sudoers file.
#

Defaults        env_reset

# Host alias specification

Host_Alias      LOCALHOST = lenovo
# User alias specification

User_Alias      FULLTIMERS = zoot
# Cmnd alias specification

Cmnd_Alias      SCRIPT = /home/zoot/devel/trash/script.sh

# User privilege specification
root    ALL=(ALL) ALL

# Allow members of group sudo to execute any command
# (Note that later entries override this, so you might need to move
# it further down)
%sudo ALL=(ALL) ALL
#
#includedir /etc/sudoers.d

# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL


# Test options

FULLTIMERS      LOCALHOST = NOPASSWD: SCRIPT

Сам скриптец:

zoot@lenovo:~$ cat /home/zoot/devel/trash/script.sh 
#!/bin/bash

echo "running script"
sleep 10s
echo "done"

Скрипт, ясное дело, просто для теста.

Итак, делаю:

sudo -u carol /home/zoot/devel/trash/script.sh

А пароль таки просится. Если ввести, то все ок. ps -a -f | grep -i carol выдает таки, что процесс запущен под пользователем carol.

Да, уточню, система Ubuntu 10.10 Ибо с правами и sudo у нее может что особое? =)

zootcat
() автор топика
Ответ на: комментарий от unikum

Неа, в том то и дело, что не работает. Дабавил

User_Alias FULLTIMERS = zoot, carol

делаю:

sudo -u carol sh /home/zoot/devel/trash/script.sh

[sudo] password for zoot:

т.е. хочет пароля.

zootcat
() автор топика
Ответ на: комментарий от unikum

Да, можно использовать

carol ALL=(ALL) NOPASSWD: ALL

но! тогда carol сможет выполнить все! без пароля. А должен только этот скрипт.

zootcat
() автор топика
Ответ на: комментарий от anon_666

FULLTIMERS LOCALHOST = (ALL) NOPASSWD: SCRIPT

не работает, просит пароль.

zootcat
() автор топика
Ответ на: комментарий от zootcat

Ступил, понял «как». Но не рабоет же (см. выше).

zootcat
() автор топика
Ответ на: комментарий от zootcat

carol ALL=(ALL) NOPASSWD: [путь к скрипту] - надо полагать. почитайте man sudo, я так глубоко не копался, но уверен, что такое возможно.

unikum ★★★★★
()
Ответ на: комментарий от unikum

>почитайте man sudo

Да уже 10 раз перечитал (а конкретнее, man sudoers). Куча примеров, делаю один в один. В том то и весь прикол. Что оно *не работает*, хотя по идее все правильно. Может дело в Убунте?

я и пусть к скрипту писал и алиас SCRIPT вместо него вставлял. Выложил же код выше. Ведь он верный. 10 раз перечитал. И ставил (ALL) перед NOPASSWD. не работает и все тут.

zootcat
() автор топика
Ответ на: комментарий от unikum
zoot@lenovo:~$ sudo -lU carol
Matching Defaults entries for carol on this host:
    env_reset

User carol may run the following commands on this host:
    (ALL) ALL, (ALL) NOPASSWD: /home/zoot/devel/trash/script.sh

А пароль все равно просит.

zootcat
() автор топика
Ответ на: комментарий от zootcat

вы же делаете релогин каждый раз?:) судя по форумам такие проблемы встречаются и причина не всегда ясна. У меня работает вот так:

user ALL = (ALL) NOPASSWD: ALL

unikum ★★★★★
()

>что-то вертится в голове про setuid

Бинарник с флагом setuid запускается от имени своего владельца.
На скрипты флаг не действует. Если нужно запустить скрипт, напишите на Сях простую программу, которая будет запускать ваш скрипт, соберите бинарник, сделайте его владельцем нужного пользователя и назначьте флаг.

Ну или через sudo, как тут было уже сказано.

geekless ★★
()
Ответ на: комментарий от unikum

Ну, так понятно, что будет работать. Считай, даем рута на все =) Это не есть хорошо. Как же безопасность.

zootcat
() автор топика
Ответ на: комментарий от geekless

Ясно. Я думал можно решить проблему проще через sudo. Но видимо, не судьба. Буду тогда использовать «костыль» с созданием C проги и вызовом скрипта из него.

zootcat
() автор топика
Ответ на: комментарий от zootcat

ДА, это понятно. У меня другая ситуация: 1 юзер в системе и физический доступ к буку только у меня и жены. ,теоретически должно работать так:

user ALL = (ALL) NOPASSWD: SCRIPT # или полный путь к нему
Странно всё же, что не работает.

unikum ★★★★★
()

а там всякие cрmod +s не помогут?

unikum ★★★★★
()
Ответ на: комментарий от zootcat

У вас пользователь zoot случаем в группу sudo не входит?

И ещё, почему «sudo -u carol sh /home/zoot/devel/trash/script.sh» зачем sh?

mky ★★★★★
()
Ответ на: комментарий от mky

У вас пользователь zoot случаем в группу sudo не входит?


zoot@lenovo:~$ cat /etc/group | grep -i zoot
adm:x:4:zoot
cdrom:x:24:zoot
audio:x:29:pulse,zoot
video:x:44:zoot
plugdev:x:46:zoot
netdev:x:110:zoot
lpadmin:x:111:zoot
admin:x:119:zoot
zoot:x:1000:
sambashare:x:122:zoot
zoot@lenovo:~$ cat /etc/group | grep -i sudo
sudo:x:27:

Т.е. вроде бы нет.

А про sh - на всякий случай поставил.

zootcat
() автор топика
Ответ на: комментарий от Deleted

Вот и вот. Вроде бы такое прокатывает для *бинарника*, но не для скрипта.

zootcat
() автор топика
Ответ на: комментарий от zootcat

А, он у вас входит в группу admin. Попробуйте закоментить строку:

%admin ALL=(ALL) ALL

и проверить.

mky ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.