Технические особенности TinyWare.


Патч ядра "setcap". Включается при компиляции ядра опцией сборки CONFIG_SETCAP=y. Создает в подветке файловой системы /proc/sys/setcap файлы для управления общесистемными capabilities(7):
$ ls -la /proc/sys/setcap/
итого 0
dr-xr-xr-x 1 root root 0 апр 19 16:16 .
dr-xr-xr-x 1 root root 0 апр 19 16:05 ..
-rw-rw---- 1 root root 0 апр 19 16:16 disabled_caps
-rw-rw---- 1 root root 0 апр 19 16:16 enabled_caps
-rw------- 1 root root 0 апр 19 16:16 lock

Как видно из разрешений, отключать и включать capabilities могут члены группы root, запирать на замок только пользователь root.
Например команда
# sysctl setcap.disabled_caps=0,1,2,3

 или аналог
# echo "0,1,2,3" > /proc/sys/setcap/disabled_caps
  отключит системные возможности
CAP_CHOWN(0), CAP_DAC_OVERRIDE(1), CAP_DAC_READ_SEARCH(2), CAP_FOWNER(3). При попытке их использования возникает ошибка -EPERM для любого пользователя включая root. Если использовать замок

# sysctl setcap.lock=1

 или аналог

# echo "1" > /proc/sys/setcap/lock

, то изменить поведение системы будет невозможно до следующей перезагрузки.


Патч ядра "advanced chown". Включается при компиляции ядра опцией сборки CONFIG_FS_ADVANCED_CHOWN=y. Позволяет пользователям в своих каталогах работать с файлами так, как если бы они обладали CAP_CHOWN и CAP_FOWNER, т .е. пользователи могут менять владельцев и атрибуты файлов в своих каталогах. В при работе операционной системы данный механизм включается через активацию системной возможностью CAP_ADVANCED_CHOWN(41), которая включается для всех командой:
root@mainpc:~$ sysctl setcap.enabled_caps=41

Например я пользователь pavel с домашним каталогом /home/pavel и я могу:
- создать у себя файл или подкаталог и отдать его любому пользователю, например пользователю root:

pavel@mainpc:~$ touch test pavel@mainpc:~$ ls -l test
-rw------- 1 pavel users 0 апр 7 06:14 test
pavel@mainpc:~$ chown root:root test
pavel@mainpc:~$ ls -la test
-rw------- 1 root root 0 апр 7 06:14 test
- изменять права доступа на любые файлы и подкаталоги в своем каталоге (и на свои и на чужие):

pavel@mainpc:~$ ls -la test -rw------- 1 root root 0 апр 7 06:14 test
pavel@mainpc:~$ chmod 755 test
pavel@mainpc:~$ ls -l test
-rwxr-xr-x 1 root root 0 апр 7 06:14 test
- овладевать любыми файлами и подкаталогами в своем каталоге:

pavel@mainpc:~$ ls -l test -rwxr-xr-x 1 root root 0 апр 7 06:14 test
pavel@mainpc:~$ chown pavel:users test
pavel@mainpc:~$ ls -l test
-rwxr-xr-x 1 pavel users 0 апр 7 06:14 test
Выставление suid и sgid битов на чужие файлы рядовым пользователям конечно же запрещено из соображений безопасности.

Для чего этот механизм придуман? Он значительно облегчает обмен файлами в многопользовательской системе. Достаточно положить файл в папку адресату и и адресат овладеет им. Достаточно в своем каталоге запланировано отдать файлы, и другие пользователи получат к ним доступ.


Патч ядра для файловой системы /proc.
Включается при компиляции ядра опцией сборки CONFIG_PROC_RESTRICT_ACCESS=y.

Данный патч делает строже разрешения на каталоги процессов /proc/<pid> в файловой системе /proc c 555 на 750, при этом группа у всех каталогов назначается root, а владелец - владелец процесса:
$ ls -la /proc

drwxr-x--- 9 root root 0 май 6 13:10 1533
drwxr-x--- 9 pavel root 0 май 6 13:11 1534

drwxr-x--- 9 root root 0 май 6 2018 154

drwxr-x--- 9 pavel root 0 май 6 13:11 1546

drwxr-x--- 9 pavel root 0 май 6 13:11 1547

drwxr-x--- 9 root root 0 май 6 2018 155

drwxr-x--- 9 root root 0 май 6 2018 156

drwxr-x--- 9 root root 0 май 6 2018 16

Выше мы видим, что просматривать эти каталоги могут только владелец процесса и группа root, поэтому в выводе команды ps, пользователь увидит только свои процессы :
pavel@mainpc:~$ ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
pavel 1534 0.0 0.0 5284 3412 pts/2 S 13:11 0:00 -su
pavel 1549 0.0 0.0 3648 2132 pts/2 R+ 13:12 0:00 ps aux
Пользователь
root сохраняет свои возможности видеть все процессы системы за счёт группы root.


Патч ядра для учета rss лимита. По умолчанию в системе лимитов Linux (/etc/security/limits.conf) оставлен нереализованным в ядре учет по лимиту потребления резидентной памяти (реально выделенная процессу память). Данный патч делает работоспособным учет лимита по резидентной памяти rss.


Монтирование файловых систем /run/user/<uid>. Эти tmpfs файловые системы создаются системой при входе в нее пользователей. По умолчанию пользователи имеют возможность записывать в них в т.ч. исполняемые файлы и запускать их. Поэтому в TinyWare, с помощью плагина pam_exec.so,  эти файловые системы перемонтируются с noexec опцией (запрет исполнения программ).


Значение umask по умолчанию. Применяется umask 027, для того чтобы пользователи создавали новые файлы с доступом себе на чтение-запись и своей группе только на чтение.


Разрешения домашних каталогов пользователей.
Применяется разрешение 750, что позволяет входить в домашние каталоги только членам частных групп пользователей.