Предоставление разрешений на чтение для файла устройства на диске

Если вы хотите разделить контроль над папкой между

  • пользователем a
  • пользователем b

Создайте пользователей

 % sudo adduser a
Adding user `a' ...
Adding new group `a' (1002) ...
Adding new user `a' (1001) with group `a' ...
Creating home directory `/home/a' ...
Copying files from `/etc/skel' ...
Enter new UNIX password: 
Retype new UNIX password: 
....

и

% sudo adduser b
Adding user `b' ...

Сделайте каталог

% mkdir our_shared_directory

Создайте новую группу и добавьте в нее пользователей

 % sudo addgroup cool_kids
Adding group `cool_kids' (GID 1001) ...
Done.
 % sudo adduser a cool_kids            
Adding user `a' to group `cool_kids' ...
Adding user a to group cool_kids
Done.
% sudo adduser b cool_kids
....

Сделайте каталог принадлежащим группе cool_kids и setgid bit

sudo chmod g+s our_shared_directory
sudo chown -v ubuntu:cool_kids our_shared_directory

проверьте нашу работу

ls -al
drwxrwsr-x 2 ubuntu cool_kids  40 Feb 29 20:37 our_shared_directory/
      ^ setgid bit is set and group is now "sticky"    

Посмотрите, что произойдет когда файл создан пользователем a в обычном каталоге

% touch file_made_by_user_a
% ls -al
-rw-rw-r-- 1 a      a           0 Feb 29 20:57 file_made_by_a

теперь пользователь a создает файл в нашем_общем_каталоге

% cd our_shared_directory/
% ls -al
-rw-rw-r-- 1 a      cool_kids  0 Feb 29 20:59 another_by_a
                     ^^^^^^ note the group 

Важно

  1. Группа cool_kids автоматически применяется к новому файлу

Теперь переключимся на пользователя b

% su b
Password: ...

b теперь может редактировать файл, созданный a - потому что файл another_by_a имеет режим по умолчанию -rw-rw-r-- , b не мог нормально редактировать его.
Но с

b% vim another_by_a
^ note this means we are user "b"   now  
[make some edit and save]

b смог изменить файл **поскольку b принадлежал к группе cool_kids и поскольку cool_kids был гарантированно применен к новому файлу с помощью setgid bit

ls -al
-rw-rw-r-- 1 a      cool_kids  7 Feb 29 21:03 another_by_a
                               ^ the file is 7bytes - slightly bigger because of changes made by b 
4
29.05.2017, 14:35
2 ответа

chmod o+r /dev/sda* довольно опасен, так как позволяет любой программе читать весь ваш диск (включая, например, хэши паролей в /etc/shadow, если ваш корневой раздел находится на sda)!

Есть (по крайней мере) два способа сделать это более безопасно:

  1. Добавьте всех пользователей, которым нужно читать диск, в группу disk и запустите chmod gw /dev/sda *, чтобы запретить доступ на запись для этой группы.
  2. Измените группу /dev/sda* на группу, которая содержит только пользователей, которым необходимо читать диск, например. chgrp my-benchmarkers /dev/sda* и запретите доступ на запись для этой группы с помощью chmod.

Обратите внимание, что изменения группы и разрешений на узлах устройств в /dev носят временный характер, пока соответствующее устройство не будет отключено или компьютер не будет перезагружен.

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

РЕДАКТИРОВАТЬ: Похоже, hdparm не требует доступа для записи. Ему скорее нужна возможность CAP_SYS_RAWIO для выполнения большинства ioctl. Вы можете использовать setcap cap_sys_rawio+ep /sbin/hdparm, чтобы дать эту возможность hdparm. Обратите внимание, что это позволяет любому, который может запускать hdparm и имеет по крайней мере доступ для чтения к файлу устройства, делать практически все, что hdparm может делать на этом устройстве, в том числе --write-sector и все другие команды hdparm, описанные на странице руководства как «ОЧЕНЬ ОПАСНЫЕ», «ЧРЕЗВЫЧАЙНО ОПАСНЫЕ» или «ИСКЛЮЧИТЕЛЬНО ОПАСНЫЕ». Скрипты-оболочки могут быть лучшим решением.

Если нет, вам нужно либо предоставить доступ для записи, либо написать сценарии-оболочки, которые могут выполняться вашими пользователями от имени пользователя root с использованием правил sudo.

11
27.01.2020, 20:47

Один из возможных вариантов, хотя некоторые развертывания /dev могут его не поддерживать, заключается в использовании ACL. Пример:

$ dd if=/dev/sda bs=1M count=200 of=/dev/null
dd: failed to open '/dev/sda': Permission denied
$ sudo setfacl -m u:youruser:r /dev/sd*
$ dd if=/dev/sda bs=1M count=200 of=/dev/null
200+0 records in
200+0 records out
209715200 bytes (210 MB, 200 MiB) copied, 0.0335544 s, 6.3 GB/s

AFAIK hdparm -t необходимо запускать от имени пользователя root.

2
27.01.2020, 20:47

Теги

Похожие вопросы