Эта небольшая заметка более широко осветит использование прав в unix. И, возможно, позволит вам взглянуть на безопасностью в юникс немного иначе.
Эта небольшая заметка более широко осветит использование прав в unix. И, возможно, позволит вам взглянуть на безопасностью в юникс немного иначе.
Для начала приведу простой пример: вебсервер выполняет скрипт от отличного пользователя, чем владелец текущей директории. Результат работы (например файл) сохраняется с правами пользователя, от которого работает веб-сервер. Владелец директории с таким файлом скорее всего не сможет ничего сделать, т.к. у него нет необходимых прав на это. Отсюда начинаются всяческие лишние манипуляции смены прав от рута или звонки в тех поддержку.
А можно использовать расширенные права:
- 0 - обычные права доступа
- 1 - бит устойчиивости. Его можно применить только для директории. В такой директории владелец имеет право удалять, переименовать только те файлы, которыми он владеет, причем при наличии права писать в эту директорию.
- 2 - установка идентификатора группы (setgid). Когда такой бит установлен для исполняемого файла, файл исполняется в правами группы, владеющей файлом, то есть не с правами запустившего файл.
- 3 - является сокупностью первых, то есть права 3755 устанавливают бит устойчивости и идентификатор группы.
- 4 - установка идентификатора пользователя (setuid). Когда такой бит установлен для исполняемого файла, файл исполняется в правами пользователя, владеющего файлом, то есть не с правами запустившего файл.
Для установки используем символьный метод:
- chmod u+s - установим setuid бит.
- chmod g+s - установим the setgid бит.
- chmod u+t - установим бит устойчивости.
или цифровой:
- chmod 0777 - обычные права доступа: чтение/выполнение/запуск для всех.
- chmod 1777 - установим бит устойчивости и чтение/выполнение/запуск для всех.
- chmod 4777 - установим setuid и чтение/выполнение/запуск для всех.
- chmod 2777 - установим setgid и чтение/выполнение/запуск для всех.
Можно комбинировать:
- chmod 6777 - setuid/setgid и чтение/выполнение/запуск для всех.
Теперь просмотрите права листинг директории (ls -l), setuid/setgid отображается как 's', запуск программ и их результат выолнения будет с правами либо группы, либо владельца. Sticky bit позволяет совершать манипуляции с файлами только владельцу. Хороший пример - это директория /tmp, в которой запись открыта для всех пользователей, но не желательно удаление чужих файлов.
- -rws--S--x 1 max max 6335 Jan 12 09:47 test
Первая 's' - это setuid. Вторая 's' - это setgid. Если sticky bit был установлен, вы увидите 't' в последней позиции строки индикации прав такой как 'x' в данном случае. В примере вторая 's' показывает, что у группы нет прав на выполнение файла.Таким образом без setuid\setgid права были бы чтение/выполнение/запуск для владельца и запуск для всех или (-rwx-----x). Но теперь если другой пользователь запишет в директорию, то результат записи будет не с правами писавшего, а с правами владельца директории.
Используйте setuid,setgid и sticky bit аккуратно, т.к это не правильное использование может примвести к возникновению проблем безопасности в системе.
Комментарии (0)
Добавление комментариев закрыто.