Если вы хотите разделить контроль над папкой между
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
Теперь переключимся на пользователя 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
chmod o+r /dev/sda*
довольно опасен, так как позволяет любой программе читать весь ваш диск (включая, например, хэши паролей в /etc/shadow
, если ваш корневой раздел находится на sda
)!
Есть (по крайней мере) два способа сделать это более безопасно:
disk
и запустите chmod gw /dev/sda *
, чтобы запретить доступ на запись для этой группы./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.
Один из возможных вариантов, хотя некоторые развертывания /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.