Почему пользователь можеть читать/писать в консоль? (Хотя соответствующих прав на соответствующий файл не имеет?)

Для новичков как вообще в Linux, так и в конкретной теме, к которой относится вопрос.

Модератор: Bizdelnick

Ответить
Аватара пользователя
жучара
Сообщения: 950
ОС: астралинукс

Почему пользователь можеть читать/писать в консоль?

Сообщение жучара »

Друзья! Открываю консоль, я пользователь user, перелогиниваюсь как foo, захожу в домашний каталог.

Shell

user@astra:~$
user@astra:~$
user@astra:~$ su foo
Пароль:
foo@astra:/home/user$
foo@astra:/home/user$ cd ~
foo@astra:~$
foo@astra:~$
Смотрю, а эта консоль, вообще чего?:

Shell

foo@astra:~$
foo@astra:~$ ps
PID TTY TIME CMD
8795 pts/0 00:00:00 bash
8812 pts/0 00:00:00 ps
foo@astra:~$
foo@astra:~$

а она pts/0. Хорошо, а сейчас я могу что-нибудь в неё писать/читать? (я сейчас user) Нет, не могу:

Shell

foo@astra:~$
foo@astra:~$ ls -l /dev/pts/0
crw------- 1 user tty 136, 0 нояб. 24 17:35 /dev/pts/0
foo@astra:~$
только user может, а я никто, я просто foo. И тем не менее, читаю и пишу себе спокойно, вопреки правам доступа:

Shell

foo@astra:~$
foo@astra:~$ cat > foo.txt
cafebabe
foo@astra:~$
foo@astra:~$
foo@astra:~$ cat foo.txt
cafebabe
foo@astra:~$
А для чего, в таком случае, права доступа? Не верится, чтобы просто были. Спасибо, кто откликнется.
Я просто читаю маны.
Спасибо сказали:
Аватара пользователя
Hephaestus
Сообщения: 3729
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2
Контактная информация:

Re: Почему пользователь можеть читать/писать в консоль?

Сообщение Hephaestus »

жучара писал(а):
24.11.2019 15:44
только user может, а я никто, я просто foo.
Нет, не просто foo, а user, вошедший с именем foo.
Если Вы разлогинитесь и зайдете как foo, тогда - да, будет "просто foo". А так - нет.
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:
Аватара пользователя
жучара
Сообщения: 950
ОС: астралинукс

Re: Почему пользователь можеть читать/писать в консоль?

Сообщение жучара »

Hephaestus писал:
24.11.2019 16:04
Нет, не просто foo, а user, вошедший с именем foo.
Если Вы разлогинитесь и зайдете как foo, тогда - да, будет "просто foo". А так - нет.
...Если я пользователь user с именем foo и имею доступ к одному из файлов, владельцем которого является user, то что же мне мешает иметь доступ К ЛЮБОМУ ФАЙЛУ, пользователем которого является user? А не получается.

Shell

user@astra:~$
user@astra:~$ echo cafebabe > bar.txt
user@astra:~$
user@astra:~$ su foo
Пароль:
foo@astra:/home/user$
foo@astra:/home/user$ cat bar.txt
cat: bar.txt: Отказано в доступе
foo@astra:/home/user$
foo@astra:/home/user$ ls -l bar.txt
ls: невозможно получить доступ к bar.txt: Отказано в доступе
foo@astra:/home/user$
объяснение ваше неудовлетворительно, увы.
Я просто читаю маны.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20797
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Почему пользователь можеть читать/писать в консоль?

Сообщение Bizdelnick »

Оболочка унаследовала уже открытые дескрипторы stdin, stdout и stderr. Права доступа проверяются только при открытии. Если попытаетесь вновь открыть это устройство, ничего не получится.
echo blahblah > /dev/pts/0
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
жучара
Сообщения: 950
ОС: астралинукс

Re: Почему пользователь можеть читать/писать в консоль?

Сообщение жучара »

Bizdelnick, причём, что интересно, если провернуть такую штуку с обыкновенным файлом, открыв его на чтение и записав туда что-нибудь, используя номер дескриптора, то команда есho > будет работать как echo >>, то есть будучи user, выполняем в консоли такой бинарник:

Shell

#include <stdio.h>
#include <unistd.h>
int main ()
{
//Откроем файл на запись
FILE* fp;
fp = fopen ("dst_0", "w");
if (fp == NULL)
printf ("всё плохо\n");

//Создадим новый процесс
execl("/bin/bash", NULL);
return 0;
}
Потом su foo и смотрим перечень открытых дескрипторов. Например, файлу dst_0 соответствует дескриптор 7, тогда пишем:

Shell

echo qqqqqqqq >&7
echo wwwwwwww >&7
После чего выходим (exit) и смотрим содержание dst_0, оно будет
qqqqqqqq
wwwwwwww
Чудеса, да и только. Ну, раз пишем не в файл, а в номер дескриптора, наверное, так нужно.
Я просто читаю маны.
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu
Контактная информация:

Re: Почему пользователь можеть читать/писать в консоль?

Сообщение serzh-z »

жучара
Дескриптор ссылается на уже открытый файл.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20797
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Почему пользователь можеть читать/писать в консоль?

Сообщение Bizdelnick »

жучара писал(а):
25.11.2019 12:56
Bizdelnick, причём, что интересно, если провернуть такую штуку с обыкновенным файлом, открыв его на чтение и записав туда что-нибудь, используя номер дескриптора, то команда есho > будет работать как echo >>
Слишком глубокая мысль для меня, не понял.
P. S. Создать дескриптор можно и в bash: exec 7> dst_0
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
жучара
Сообщения: 950
ОС: астралинукс

Re: Почему пользователь можеть читать/писать в консоль?

Сообщение жучара »

Bizdelnick писал:
25.11.2019 13:56
Слишком глубокая мысль для меня, не понял.
если писать echo cafebabe >&7, то работает как echo cafebabe >><имя файла>, что непонятного?
Я просто читаю маны.
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu
Контактная информация:

Re: Почему пользователь можеть читать/писать в консоль?

Сообщение serzh-z »

жучара
Дескриптор ссылается _на уже открытый_ файл. Разумеется, что при выводе в этот дескриптор данные добавляются в конец _уже открытого_ файла.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20797
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Почему пользователь можеть читать/писать в консоль?

Сообщение Bizdelnick »

жучара писал(а):
25.11.2019 14:26
если писать echo cafebabe >&7, то работает как echo cafebabe >><имя файла>
Нет. Команда echo cafebabe >&7 работает с уже открытым файлом, а echo cafebabe >><имя файла> открывает файл заново (с флагом O_APPEND) и закрывает его по окончании записи.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Ответить