BSDPORTAL.RU

На этом сайте обсуждаются вопросы использования ОС FreeBSD
 Портал  •  Статьи  •  Форум  •  Wiki  •  Поиск  •  FAQ  •  Обои  •   Официальная документация  •  Новые темы 

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
 Заголовок сообщения: Crontab -e
СообщениеДобавлено: Чт 10 ноя, 2016 5:53 pm 
Не в сети

Зарегистрирован: Чт 10 ноя, 2016 5:34 pm
Сообщения: 4
День добрый, любители красного дьявола! :)
Подключаюсь к хостингу своей учёткой без рут-прав.
Могу редактировать персональный (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 успешно выполняется и как получить к этому файлу доступ без рут-прав?
Заранее благодарен!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Crontab -e
СообщениеДобавлено: Чт 10 ноя, 2016 9:47 pm 
Не в сети

Зарегистрирован: Пт 03 сен, 2004 1:26 pm
Сообщения: 2481
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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Crontab -e
СообщениеДобавлено: Пт 11 ноя, 2016 12:10 am 
Не в сети
Модератор

Зарегистрирован: Сб 11 сен, 2004 6:33 am
Сообщения: 5334
Откуда: Москва
Пользовательского cron'а нет, cron один и исполняется из-под root, становясь для пользовательских crontab'ов соответствующими пользователями. А crontab да, suid'ный.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Crontab -e
СообщениеДобавлено: Пт 11 ноя, 2016 4:14 pm 
Не в сети

Зарегистрирован: Чт 10 ноя, 2016 5:34 pm
Сообщения: 4
AMDmi3 писал(а):
Пользовательского cron'а нет, cron один и исполняется из-под root, становясь для пользовательских crontab'ов соответствующими пользователями. А crontab да, suid'ный.


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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Crontab -e
СообщениеДобавлено: Пт 11 ноя, 2016 4:25 pm 
Не в сети
Модератор

Зарегистрирован: Сб 11 сен, 2004 6:33 am
Сообщения: 5334
Откуда: Москва
DEGABB писал(а):
Т.е. получается cron всегда запускается с root-правами, соответственно и файл правит от имени root.

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

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Crontab -e
СообщениеДобавлено: Сб 12 ноя, 2016 1:08 am 
Не в сети

Зарегистрирован: Чт 10 ноя, 2016 5:34 pm
Сообщения: 4
AMDmi3 писал(а):
Работая из-под root, crontab тем не менее знает каким пользователем был вызван, соответственно его файл и правит.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Crontab -e
СообщениеДобавлено: Сб 12 ноя, 2016 12:58 pm 
Не в сети

Зарегистрирован: Пт 03 сен, 2004 1:26 pm
Сообщения: 2481
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/


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Crontab -e
СообщениеДобавлено: Сб 12 ноя, 2016 2:59 pm 
Не в сети
Модератор

Зарегистрирован: Сб 11 сен, 2004 6:33 am
Сообщения: 5334
Откуда: Москва
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 запускается от него?

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Crontab -e
СообщениеДобавлено: Пн 14 ноя, 2016 11:42 am 
Не в сети

Зарегистрирован: Чт 10 ноя, 2016 5:34 pm
Сообщения: 4
Цитата:
Т.е. в случае 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, за столь развёрнутое описание принципа работы.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Зарегистрированные пользователи: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB
Яндекс.Метрика