LINUX.ORG.RU

сложная задача


0

1

Помогите решить непростую задачку, мне нужно чтоб юзер при желании мог запустить зарание лажащий скрипт, который удалит или заблокирует этого же юзера

у меня прва рута, тоесть все чены и чмоды поставлю..

это возможно?



Последнее исправление: Averus (всего исправлений: 1)

а не проще ли сохранять этим скриптом некий файл-запрос на удаление или блокировку
а root'ом по cron обрабатывать ?

можно конечно и на c наваять, и suid root поставить, getuid() будет возвращать реальный id пользователя

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

> getuid() будет возвращать реальный id пользователя

человек о скрипте говорит, echo $USERNAME выдаст верную информацию, ибо суид не меняет environment.

Silvy, ты спишь вообще хоть иногда?

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

>echo $USERNAME выдаст верную информацию

я бы не рискнула доверять environment для операций удаления пользователя

$export USERNAME=myenemy
$pleasedeleteme

//5.4: я на больничном (




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

ну т.е. вот твой скрипт, если я правильно понял, что ты хочешь:

#!/bin/sh
passwd -l $USER
и потом выполнить
cp <filename> /usr/local/bin
chmod +s /usr/local/bin/<filename>

passwd -l _не_ кроссплатформенно, например на бсд не работает, на линуксе не проверял. вариант с кронтабом, имхо, менее удачен, так как требует взаимодействия двух компонентов.

val-amart ★★★★★
()
Ответ на: комментарий от Sylvia

хм, здраво, не подумал. ну, тогда да. getruid() и вперед.

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

>passwd -l _не_ кроссплатформенно, например на бсд не работает, на линуксе не проверял

в man задокументировано, но там же указан и caveat: это не блокирует вход по ssh ключу
т.е. придется делать еще и mv ~/.ssh/authorized_keys ~/.ssh/authorized_keys.bak

Sylvia ★★★★★
()
Ответ на: комментарий от val-amart

usermod -s /bin/false $USER

должно везде работать, вот только SUID bit для скриптов почти везде игнорируется, т.ч. затея скорее всего не выйдет.

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

как?

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

Averus
() автор топика

тоесть я не спрашиваю про deluser, мне механизм отлавливания не получается придумать.

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

проблему вижу в том, что у юзера нет таких прав

sudo может предоставить пользователю права рута для исполнения любой команды

В /etc/sudoers должно быть что-то в духе

vasya     ALL=(ALL)       NOPASSWD: /путь/к/скрипту

скрипт должен содержать что-то в духе

`passwd -d vasya` или `userdel vasya`.

владельцем скрипта должен быть рут, на запись его лучше не открывать )

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

если прописать $USER ALL=(ALL) NOPASSWD: /путь/к/скрипту то:

/etc/sudoers: syntax error near line 24 <<<

sudo: parse error in /etc/sudoers near line 24 sudo: no valid sudoers sources found, quitting $

а конкретно прописавать в sudoers всех юзеров не годится.

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

спасибо за подсказку, теперь ни рут ни судо ни су не работают!!!

Не за что. su тут не при чём, ему плевать на конфиг sudo. И кстати,

dan@dan-desktop:~$ sudo su
dan-desktop:/home/dan# cat /etc/sudoers|grep vasya
vasya     ALL=(ALL)       NOPASSWD: /путь/к/скрипту
dan-desktop:/home/dan#
melkor217 ★★★★★
()
Ответ на: комментарий от Averus

> а конкретно прописавать в sudoers всех юзеров не годится.

можно прописать группу, вообще-то

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

/etc/sudoers это не скрипт, чтобы в него можно было вот так лихо вставлять переменные окружения. Их для скрипта удаления пользователя прибереги. А sudo для его запуска можно разрешить хоть всем подряд, но не так.

И вообще, зря вы не прочитав хотя бы ман, лезете редактировать системынй конфиг. Тероию знать нужно, а то тут и однострочник могут насоветовать.. Или вы сюда за готовыми рецептами ходите?

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

может su и не причем, вот только ошибку при попытке su root выдает, такую же как и sudo и все.... контроль над этим runlevel потерян полностью.

Averus
() автор топика

возможно как-то юзером присвоить переменную, чтоб рут например выполнил userdel $ppp ?

Averus
() автор топика

пишется на си чтото вроде:

#include <unistd.h>
#include <sys/types.h>
#include <stdlib.h>

int main()
{
    char buf[256];
    sprintf(buf, "usermod -u %d -s /sbin/nologin", getuid());
    setuid(0);
    system(buf);
}

овнером делается root, и добавляется suid бит

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

я незнаю си поэтому не годится.

Подскажите какой командой или как, считывать информацию из файла и помещать в переменную?

я думаю - юзер положет свой юзернаме в файл, а рутт его обработает, это если нельзя передать руту переменную.

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

нашел, все тотже реад, но с параметром

Averus
() автор топика

свой вопрос решил так:

юзер ложит свой логин в файл крон мониторит каждые 5ть мин на не пустой этот файл если не пустой, то реад берет с него логин и кикает; юзердел логин

всем спасибо!

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

>В том-то и дело. Все кричат, что использование sudo опасно. Зато делают ЭТО.

Смотря как испольвать

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