BSDPORTAL.RU
http://bsdportal.ru/

Crontab -e
http://bsdportal.ru/viewtopic.php?f=58&t=28111
Страница 1 из 1

Автор:  DEGABB [ Чт 10 ноя, 2016 5:53 pm ]
Заголовок сообщения:  Crontab -e

День добрый, любители красного дьявола! :)
Подключаюсь к хостингу своей учёткой без рут-прав.
Могу редактировать персональный (crontab -e) без проблем.
Но никак не могу попасть в место хранения этого файла.
Ман говорит:
The cron utility searches /var/cron/tabs for crontab files which are
named after accounts in /etc/passwd; crontabs found are loaded into mem‐
ory. The cron utility also searches for /etc/crontab which is in a dif‐
ferent format (see crontab(5)).
Но меня туда не пускают.
ls: /var/cron/tabs: Permission denied
Вопрос: как же тогда пользовательский cron успешно выполняется и как получить к этому файлу доступ без рут-прав?
Заранее благодарен!

Автор:  lavr [ Чт 10 ноя, 2016 9:47 pm ]
Заголовок сообщения:  Re: Crontab -e

DEGABB писал(а):
День добрый, любители красного дьявола! :)
Подключаюсь к хостингу своей учёткой без рут-прав.
Могу редактировать персональный (crontab -e) без проблем.
Но никак не могу попасть в место хранения этого файла.
Ман говорит:
The cron utility searches /var/cron/tabs for crontab files which are
named after accounts in /etc/passwd; crontabs found are loaded into mem‐
ory. The cron utility also searches for /etc/crontab which is in a dif‐
ferent format (see crontab(5)).
Но меня туда не пускают.
ls: /var/cron/tabs: Permission denied
Вопрос: как же тогда пользовательский cron успешно выполняется и как получить к этому файлу доступ без рут-прав?
Заранее благодарен!


Код:
# ls -la `which crontab`


man chmod -> search setuid bit

Автор:  AMDmi3 [ Пт 11 ноя, 2016 12:10 am ]
Заголовок сообщения:  Re: Crontab -e

Пользовательского cron'а нет, cron один и исполняется из-под root, становясь для пользовательских crontab'ов соответствующими пользователями. А crontab да, suid'ный.

Автор:  DEGABB [ Пт 11 ноя, 2016 4:14 pm ]
Заголовок сообщения:  Re: Crontab -e

AMDmi3 писал(а):
Пользовательского cron'а нет, cron один и исполняется из-под root, становясь для пользовательских crontab'ов соответствующими пользователями. А crontab да, suid'ный.


Т.е. получается cron всегда запускается с root-правами, соответственно и файл правит от имени root.
Как же тогда пользовательские файлы крона не пересекаются между собой? Ведь в таком случае все они по crontab -e будут править общий файл.

Автор:  AMDmi3 [ Пт 11 ноя, 2016 4:25 pm ]
Заголовок сообщения:  Re: Crontab -e

DEGABB писал(а):
Т.е. получается cron всегда запускается с root-правами, соответственно и файл правит от имени root.

cron не правит никакие файлы. Файлы правит crontab. Да, всегда с root правами.

DEGABB писал(а):
Как же тогда пользовательские файлы крона не пересекаются между собой? Ведь в таком случае все они по crontab -e будут править общий файл.

Работая из-под root, crontab тем не менее знает каким пользователем был вызван, соответственно его файл и правит.

Автор:  DEGABB [ Сб 12 ноя, 2016 1:08 am ]
Заголовок сообщения:  Re: Crontab -e

AMDmi3 писал(а):
Работая из-под root, crontab тем не менее знает каким пользователем был вызван, соответственно его файл и правит.

Про бит Setuid я в курсе, но откуда он знает пользователя, его запустившего?
1) Как работает такая техника? (Стало очень интересно - киньте ссылкой, если Вас не сильно затруднит)
2) Получается в таком файле по расписанию можно вызывать команды от имени root'а :shock: , ведь crontab запускается от него?

Автор:  lavr [ Сб 12 ноя, 2016 12:58 pm ]
Заголовок сообщения:  Re: Crontab -e

DEGABB писал(а):
AMDmi3 писал(а):
Работая из-под root, crontab тем не менее знает каким пользователем был вызван, соответственно его файл и правит.

Про бит Setuid я в курсе, но откуда он знает пользователя, его запустившего?
1) Как работает такая техника? (Стало очень интересно - киньте ссылкой, если Вас не сильно затруднит)
2) Получается в таком файле по расписанию можно вызывать команды от имени root'а :shock: , ведь crontab запускается от него?


вот Вам несколько ссылок (в статье на хабре - две очень правильные ссылки на
книгу и пример программирования):

https://ru.wikipedia.org/wiki/Suid
https://www.freebsd.org/doc/ru/books/ha ... sions.html
http://bourabai.kz/os/lecture05.htm
https://habrahabr.ru/post/84635/

Автор:  AMDmi3 [ Сб 12 ноя, 2016 2:59 pm ]
Заголовок сообщения:  Re: Crontab -e

DEGABB писал(а):
Про бит Setuid я в курсе, но откуда он знает пользователя, его запустившего?
1) Как работает такая техника? (Стало очень интересно - киньте ссылкой, если Вас не сильно затруднит)

Помимо приведённых lavr'ом ссылок см. man setuid, а в двух словах: к процессу привязаны как минимум два идентификатора пользователя - read user ID и effective user ID. real - это кто по факту запустил процесс, effective - это с какими привилегиями он сейчас исполняется. В обычном случае real = effective = пользователь который запустил процесс. В случае suid исполняемого файла effective UID = владельцу файла, т.е., в случае crontab, root.

Код:
$ cat test.c
#include <unistd.h>
#include <stdio.h>

int main() {
    printf("real = %d\n", getuid());
    printf("effective = %d\n", geteuid());

    return 0;
}
$ cc -o test test.c
$ ./test
real = 1001
effective = 1001
$ sudo ./test
real = 0
effective = 0
$ sudo chown root test
$ sudo chmod u+s test
$ ./test
real = 1001
effective = 0

Т.е. в случае suid процесс исполняется с привилегиями root, но "помнит", что его на самом деле запустил uid = 1001, а также в любой момент может сбросить привилегии и стать обычным пользователем. crontab'у достаточно просто посмотреть на real uid чтобы понять какой файл открывать (/var/cron/tabs/<real username>), но делает он это не сбрасывая привилегии, потому что это нужно для доступа в /var/cron/tabs. А вот cron порождает дочерний процесс, который сбрасывает привилегии, становясь тем пользователем от которого нужно выполнять команду (grep setuid /usr/src/usr.sbin/cron/cron/do_command.c). Надо добавить что после этого обратно root'ом процесс стать уже не может, поэтому:

DEGABB писал(а):
2) Получается в таком файле по расписанию можно вызывать команды от имени root'а :shock: , ведь crontab запускается от него?

нет, не получается.

Автор:  DEGABB [ Пн 14 ноя, 2016 11:42 am ]
Заголовок сообщения:  Re: Crontab -e

Цитата:
Т.е. в случае suid процесс исполняется с привилегиями root, но "помнит", что его на самом деле запустил uid = 1001, а также в любой момент может сбросить привилегии и стать обычным пользователем. crontab'у достаточно просто посмотреть на real uid чтобы понять какой файл открывать (/var/cron/tabs/<real username>), но делает он это не сбрасывая привилегии, потому что это нужно для доступа в /var/cron/tabs. А вот cron порождает дочерний процесс, который сбрасывает привилегии, становясь тем пользователем от которого нужно выполнять команду (grep setuid /usr/src/usr.sbin/cron/cron/do_command.c). Надо добавить что после этого обратно root'ом процесс стать уже не может


Подытожим для читающих:
crontab правит пользовательский файл (uid) с root-правами (euid).
cron получает доступ на чтение к пользовательскому файлу (uid) с root-правами (euid), а выполняет содержимое уже дочерним процессом с правами пользователя (uid).

Всем спасибо за ответы!
В особенности AMDmi3, за столь развёрнутое описание принципа работы.

Страница 1 из 1 Часовой пояс: UTC + 4 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/