В скрипте bash, выполняемом при загрузке, как я могу получить имя пользователя, только что вошедшего в систему? - PullRequest
0 голосов
/ 26 января 2012

Мне нужно выполнить bash-скрипт при загрузке.
Для этого я создал файл

/etc/init.d/blah

Я отредактировал его и добавил следующие строки

#! /bin/sh
# /etc/init.d/blah

touch '/var/lock/blah'
username1=$(id -n -u)
username2=$(whoami)
touch '/var/lock/1'${username1}
touch '/var/lock/2'${username2}

exit 0

Сценарий выполняется с привилегиями root (это то, что мне нужно, потому что я должен использовать mount внутри этого скрипта) .. но проблема в том, что мне также нужно знать имя пользователя пользователя, который только что вошел в систему, так как моя цель - подключить определенную папку к определенной точке монтирования в зависимости от имени пользователя, например

mount -o bind /home/USERNAME/mount-point /media/data/home/USERNAME/to-be-mounted

Возвращаясь к загрузочному скрипту, если я сделаю

sudo update-rc.d blah defaults

, а затем перезагрузите компьютер и войдите в систему под моим именем пользователя (скажем, john), чтобы получить в моем сценарии username, и вы получите root, на самом деле у меня есть 3 файла

/var/lock/blah
/var/lock/1root
/var/lock/2root

Итак, как я могу получить имя пользователя, который только что вошел в систему? (john в моем примере)

РЕДАКТИРОВАНИЕ:
Я решил таким образом:

1. Я создал файл .desktop для каждого пользователя, которому нужно выполнить автомонтаж при загрузке, чтобы автоматически запустить скрипт при загрузке (я нахожусь на LXDE), и поместил его в /home/ndomusername‹/.config/autostart

.
[Desktop Entry] 
Type=Application
Exec=bash "/path/to/mount-bind.sh"


2. Я сохранил по этому пути bash-скрипт с именем mount-bind.sh и сделал его исполняемым:

#!/bin/bash

_username=$1

if [[ -z "${_username}" ]]; then
    _username="$(id -u -n)"
fi

mkdir -p "/home/${_username}/mount-folder"
sudo mount -o bind "/media/data/home/${_username}/mount-folder" "/home/${_username}/mount-folder"

exit 0


3. Я добавил следующую строку в / etc / sudoers

%nopwd ALL=(ALL) NOPASSWD: /bin/mount


4. Я создал группу nopwd и добавил в нее всех пользователей, которые мне нужны

На его пути после входа в систему я могу смонтировать путь под пользователем home.

Проблема этого метода заключается в том, что мне нужно создать файл рабочего стола для каждого нового пользователя и добавить его / ее в nopwd, но он работает.

Любое дальнейшее улучшение приветствуется! :)

Ответы [ 3 ]

2 голосов
/ 23 марта 2012

Я думаю, вам следует перейти от сценария инициализации при загрузке к сценарию, выполняемому во время входа в систему под вошедшим пользователем.Чтобы разрешить это, вы должны найти способы, позволяющие пользователям выполнять необходимую команду монтирования.В зависимости от того, чего вы пытаетесь достичь, вам может помочь один из следующих методов:

  • Если вы работаете в Linux или в другом UNIX с аналогичной функцией, добавьте точку монтирования в /etc/fstab с помощьюОпция user, позволяющая обычным пользователям монтировать запись.
  • Выполнять mount - sudo с достаточно узкой sudoers конфигурацией, чтобы пользователи не могли выполнять какие-либо команды монтирования.
  • Напишите программу suid-root на c, которая при вызове выполняет необходимые команды монтирования.Это, однако, очень сложно сделать правильно, не создав зияющих дыр в безопасности.
2 голосов
/ 26 января 2012

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

0 голосов
/ 26 января 2012

Попробуйте экспортировать детали входа и использовать их.

экспорт username2 = $ (whoami)

...