Ubuntu 16.04.6 LTS
Сначала это было странно, но я думаю, что сузил свою проблему до вопроса о разрешениях и о том, как звездочка (*) интерпретируется в командной строке из-за этого.
Первоначально я анализировал файлы журнала apache, но воссоздал вопрос следующим образом.
Два пользователя: user1 и user2
User2 владеет указанной папкой со следующими разрешениями:
user2@server-01:~$ ls -lahd myFolder/
drwxrwx--- 2 user2 user2 4.0K Aug 28 13:22 myFolder/
Папка содержит группу файлов, названных в соответствии с соглашением об именах, которому можно следовать. т.е.
user2@server-01:~/myFolder$ ls -l
total 0
-rw-rw-r-- 1 user2 user2 0 Aug 28 13:24 abc_1
-rw-rw-r-- 1 user2 user2 0 Aug 28 13:24 abc_2
-rw-rw-r-- 1 user2 user2 0 Aug 28 13:24 abc_3
-rw-rw-r-- 1 user2 user2 0 Aug 28 13:24 abc_4
-rw-rw-r-- 1 user2 user2 0 Aug 28 13:24 abc_5
-rw-rw-r-- 1 user2 user2 0 Aug 28 13:24 def_1
-rw-rw-r-- 1 user2 user2 0 Aug 28 13:24 def_2
-rw-rw-r-- 1 user2 user2 0 Aug 28 13:24 def_3
-rw-rw-r-- 1 user2 user2 0 Aug 28 13:24 def_4
-rw-rw-r-- 1 user2 user2 0 Aug 28 13:24 def_5
Если я хочу только проанализировать или перечислить файлы 'abc' в папке, мы, конечно, можем это сделать (как user2):
user2@server-01:~/myFolder$ ls -l abc*
-rw-rw-r-- 1 user2 user2 0 Aug 28 13:24 abc_1
-rw-rw-r-- 1 user2 user2 0 Aug 28 13:24 abc_2
-rw-rw-r-- 1 user2 user2 0 Aug 28 13:24 abc_3
-rw-rw-r-- 1 user2 user2 0 Aug 28 13:24 abc_4
-rw-rw-r-- 1 user2 user2 0 Aug 28 13:24 abc_5
Теперь пользователь user1 настроен следующим образом (обратите внимание, что это sudoer):
user1@server-01:~$ id
uid=1004(user1) gid=1004(user1) groups=1004(user1),27(sudo)
Конечно, наш user1 не сможет перечислить содержимое myFolder
, если перед командой не стоит sudo
. Как это:
user1@server-01:~$ ls /home/user2/myFolder
ls: cannot open directory '/home/user2/myFolder': Permission denied
user1@server-01:~$ sudo ls /home/user2/myFolder
abc_1 abc_2 abc_3 abc_4 abc_5 def_1 def_2 def_3 def_4 def_5
Наконец, мой вопрос: как user1 перечисляет только файлы 'abc', потому что команда sudo или разрешения каталога или что-то в области безопасности не интерпретирует звездочку в приведенной ниже команде обычным способом?
user1@server-01:~$ sudo ls /home/user2/myFolder/abc_*
ls: cannot access '/home/user2/myFolder/abc_*': No such file or directory
Или я полностью не понимаю ситуацию?
Отличное объяснение здесь: https://unix.stackexchange.com/questions/101847/cannot-expand-asterisk-without-proper-permission
Нам нужно будет вызвать оболочку с помощью sudo и передать всю команду с флагом -c
[user1@server-01 ~]$ sudo sh -c 'ls -l /home/user2/myFolder/abc*'
-rw-rw-r--. 1 user2 user2 0 Aug 28 14:01 /home/user2/myFolder/abc_1
-rw-rw-r--. 1 user2 user2 0 Aug 28 14:01 /home/user2/myFolder/abc_2
-rw-rw-r--. 1 user2 user2 0 Aug 28 14:01 /home/user2/myFolder/abc_3
-rw-rw-r--. 1 user2 user2 0 Aug 28 14:01 /home/user2/myFolder/abc_4
-rw-rw-r--. 1 user2 user2 0 Aug 28 14:01 /home/user2/myFolder/abc_5