Это невозможно при использовании разрешений традиционного режима в Unix. Это связано с тем, что для чтения содержимого указанного каталога требуются разрешения на чтение каталога.
Я собираюсь использовать команду su
, чтобы проиллюстрировать почему. Я настроил 3 учетные записи пользователей, user1, user2 и user3.
$ su -c 'whoami' user1
user1
$ su -c 'whoami' user2
user2
$ su -c 'whoami' user3
user3
Вот моя структура каталогов:
$ mkdir -p /data/user{1..3}
$ for i in {1..3};do chown user${i}:user${i} /data/user${i};done
$ ls -l /data/
total 12
drwxr-xr-x 2 user1 user1 4096 Jun 30 11:35 user1
drwxr-xr-x 2 user2 user2 4096 Jun 30 11:35 user2
drwxr-xr-x 2 user3 user3 4096 Jun 30 11:35 user3
Если мы установим разрешения таким образом, что ни один пользователь не сможет прочитать /data
, то ни один пользователь не сможет выполнить ls -l /data
.
$ chmod 750 /data
$ su -c 'ls -l /data' user1
ls: cannot open directory /data/: Permission denied
Чтобы разрешить пользователю, не являющемуся владельцем (root )или в группе (root ),мы должны включить разрешения r-x
для всех (, т.е. другие разрешения ).
Если бы мы просто включили разрешения r--
, пользователь мог бы перечислить некоторые аспекты каталога, но не получить такие вещи, как разрешения содержимого в каталоге.
$ chmod 754 /data
$ su -c 'ls -l /data/' user1
ls: cannot access /data/user3: Permission denied
ls: cannot access /data/user2: Permission denied
ls: cannot access /data/user1: Permission denied
total 0
d????????? ? ? ? ? ? user1
d????????? ? ? ? ? ? user2
d????????? ? ? ? ? ? user3
Если мы попытаемся дать пользователю разрешение только на выполнение, --x
, он сможет получить доступ к подкаталогам -каталога /data
, но не сможет вывести список содержимого /data
.
$ chmod 755 /data
$ su -c 'ls -l /data/' user1
total 12
drwxr-xr-x 2 user1 user1 4096 Jun 30 11:35 user1
drwxr-xr-x 2 user2 user2 4096 Jun 30 11:35 user2
drwxr-xr-x 2 user3 user3 4096 Jun 30 11:35 user3
Могут ли здесь работать списки управления доступом (ACL )? В расследовании этого я не думаю, что они могут дать вам что-нибудь лучше.
Здесь я устанавливаю разрешения на 750 для /data
и добавляю ACL для пользователя 1 в /data
или --x
:
$ chmod 750 /data
$ setfacl -m u:user1:x /data
$ ls -ld /data
drwxr-x---+ 5 root root 4096 Jun 30 11:35 /data
Наш пользователь user1 больше не может получить доступ/data
:
$ su -c 'ls -l /data' user1
ls: cannot open directory /data: Permission denied
Но по-прежнему виден подкаталог -/data/user1
:
$ su -c 'ls -l /data/user1' user1
total 0
Это влияние setfacl
на разрешения:
$ getfacl /data
# file: data
# owner: root
# group: root
user::rwx
user:user1:--x
group::r-x
mask::r-x
other::---
Проблема в том, что для того, чтобы иметь доступ к списку содержимого каталога, в основном /data
, пользователю нужны права r--
для этого. Мы не можем явно выдавать «части» этого, это все или ничего в мире разрешений режима в Unix.
Вы можете редактировать раскладки с помощью XKeyCaps . С другой стороны, XKeyCaps — это графический интерфейс, и он очень зрелый. Недостатком XKeyCaps является то, что это только передняя -часть старого -интерфейса X-window раскладки клавиатуры, xmodmap , а не современного интерфейса, XKB .
При желании можно использовать xmodmap, но он не такой мощный, как XKB. Функции XKB, которых нет в xmodmap, включают:
Lock
(, вот как X11 пишет Caps Lock ), но не сам CapsLock . Еще одна вещь, которую xmodmap не может сделать, это чтобы разные наборы модификаторов влияли на разные клавиши, например, чтобы Shift и AltGr влияли на печатные символы, но Ctrl и Alt влияет на функциональные клавиши. Menu
, а для клавиши коды клавиатуры Sun 5» ), но вам все равно, поскольку вы создаете собственную раскладку. В Интернете есть несколько графических редакторов XKB, но все, что я могу найти, представляют собой проекты, от которых быстро отказались и которые не так просто установить, как XKeyCaps. Например, я не могу найти его с пакетом Ubuntu.
Если вы решите написать раскладку вручную, преимущество xmodmap в том, что это очень просто. Вы можете прочитать справочную страницу, может быть, посмотреть пример, и вы быстро все поймете, кроме тонкости модификаторов. Если вы не можете понять, как это сделать с помощью xmodmap, вероятно, это невозможно. Преимущество XKB, опять же, в том, что он более мощный. Недостатки XKB заключаются в том, что он сложный и плохо документирован. Некоторые предлагали прочитать, если вы хотите пойти по этому пути:
xkbcomp -a :0 current.xkb
сохраняет ваш текущий макет в файл. Какой бы способ вы ни выбрали, источником раскладки является текстовый файл или набор текстовых файлов, который хорошо работает с контролем версий.