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
Сообщения: 2302
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
Сообщения: 5195
Откуда: Москва
Пользовательского 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
Сообщения: 5195
Откуда: Москва
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
Сообщения: 2302
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
Сообщения: 5195
Откуда: Москва
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 часа


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

Зарегистрированные пользователи: Bing [Bot], Google [Bot]


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

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