login shell (bash) - как вызвать login shell

Я думаю, что Вы пропускаете очень важную деталь здесь. Из страницы справочника, как заключено в кавычки (и подчеркнул) Вами:

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

Отметьте мой акцент на "специальный файл". Если Вы обращаетесь к следующему объяснению об опции группы:

группа Позволяет дежурному блюду (т.е. некорневой) пользователь монтировать файловую систему, если одна из его групп соответствует группе устройства. Эта опция подразумевает опции nosuid и nodev (если не переопределено последующими опциями, как в группе строки опции, dev, suid).

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

Вот пример:

Давайте предположим, что существует устройство /dev/sda5 в системе, которая смонтирована на /builds каталог:

# ls -l /dev/sda5
brw-rw---- 1 root disk 8, 5 Jun 15 21:20 /dev/sda5
# grep sda5 /etc/fstab
/dev/sda5       /builds reiserfs        group,defaults 1 2

Кроме того, в этой той же системе существует 2 пользователя: foo и srinidhi

# id foo
uid=1005(foo) gid=100(users) groups=100(users),33(video)
# id srinidhi
uid=1000(srinidhi) gid=100(users) groups=100(users),16(dialout),6(disk),10(wheel)

Пользователь srinidhi (кто часть группы disk) попытки смонтироваться /builds:

srinidhi@linux:~> mount /builds/
srinidhi@linux:~> echo $?
0

Теперь, давайте посмотрим то, что происходит когда foo попытки смонтироваться /builds:

srinidhi@linux:~> su - foo
foo@linux:~> mount /builds/
mount: only root can mount /dev/sda5 on /builds
foo@linux:~>

С тех пор foo не часть disk группа, mount сбои.

Возвращаясь к Вашему случаю, необходимо удостовериться то владение группы /blergh должен или быть myuser или disk. Просто установите корректное владение группы и Ваш оригинал /etc/fstab запись должна начать работать:

# chgrp myuser /blergh

Теперь попытайтесь работать mount /media/blergh как myuser.

Примечание: Владение точки монтирования (здесь /media/blergh) не влияет mount.

3
13.08.2015, 21:59
3 ответа

Такие программы, как SSH, sudo , su и т. Д., Запускают оболочку с помощью параметра семейство системных вызовов exec . И эти системные вызовы позволяют вызывающей программе указывать каждый аргумент, включая функцию. Например, использование sudo для запуска оболочки входа в систему:

$ strace -fe execve -o sudo.log sudo -i
root:~ $ echo $0
-bash
root:~ $ logout
$ grep bash sudo.log 
19124 execve("/bin/bash", ["-bash"], [/* 31 vars */]) = 0
19140 execve("/bin/ls", ["ls", "/etc/bash_completion.d"], [/* 40 vars */]) = 0

Как видно из первого вызова execve , массив аргументов, переданных в bash , имеет вид просто ["- bash"] - поэтому нулевой аргумент равен -bash .

7
27.01.2020, 21:11

Это легко воспроизвести с помощью zsh , который позволяет использовать соответствующий аргумент для вызова exec (3) . должен быть указан через ARGV0 :

% ARGV0=-bash bash
-bash-4.1$ ps o cmd --pid=$$
CMD
-bash
-bash-4.1$ exit
% ARGV0=imnotaduck bash
$ ps o cmd --pid=$$
CMD
imnotaduck
$ exit
% 

В C, как это сделано с помощью login (1) , код будет запускать что-то вроде:

execlp("/usr/local/bin/bash", "-bash", ..., (char *) 0)

, чтобы вставить дефис в имя процесса. Это можно подтвердить, запустив login и bash под strace , либо проверив исходный код для login .

1
27.01.2020, 21:11

Чтобы войти в систему как пользователь usertest, выполните (будучи root):

root:~# login usertest
Password: 
usertest:~$ echo $0
-bash
usertest:~$ exit
root:~# _

Это формальный способ входа пользователя в систему.

Конечно, вы всегда можете выполнить команду для которого изменен $ 0:

bash -c 'echo "hello"; echo $0;' mylogthisshell

Который всегда может иметь начальный рывок

bash -c 'echo "hello"; echo $0;' -mylogthisshell
0
27.01.2020, 21:11

Теги

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