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'а ![]() |
Автор: | lavr [ Сб 12 ноя, 2016 12:58 pm ] |
Заголовок сообщения: | Re: Crontab -e |
DEGABB писал(а): AMDmi3 писал(а): Работая из-под root, crontab тем не менее знает каким пользователем был вызван, соответственно его файл и правит. Про бит Setuid я в курсе, но откуда он знает пользователя, его запустившего? 1) Как работает такая техника? (Стало очень интересно - киньте ссылкой, если Вас не сильно затруднит) 2) Получается в таком файле по расписанию можно вызывать команды от имени root'а ![]() вот Вам несколько ссылок (в статье на хабре - две очень правильные ссылки на книгу и пример программирования): 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'а ![]() нет, не получается. |
Автор: | 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/ |