Отключите пользовательскую оболочку из соображений безопасности

Параметры командной строки Shell доступны через $1 (первое), $n (энное), или $* (все аргументы), таким образом, Ваш сценарий должен запуститься:

#!/bin/bash

if [ $# -ne 1 ]; then
    echo $0: usage: myscript name
    exit 1
fi

name=$1

Теперь аргумент имени доступен из сценария как $name.

Получить использование метки времени date(1) управляйте и дайте ему спецификатор формата, таким образом, это производит формат, который Вы хотите:

now=$(date +%Y%m%d%H%M%S)

Теперь $now содержит текущую дату и время.

Таким образом, можно создать файл журнала таким образом:

logfile=/path/to/log/file/mylogfile.$now
echo "[$name]=[$now]" >> $logfile

Вы - более обеспеченное использование функции оболочки для входа сообщений, поскольку будет легче использовать:

function logit
{
    now=$(date +%Y%m%d%H%M%S)
    echo "$now: $*" >> $logfile
}

Обратите внимание, что функции оболочки получают доступ к своим собственным аргументам таким же образом как к сценарию (через $1 и т.д.)

Таким образом, первоначальный сценарий похож на это:

#!/bin/bash

function logit
{
    now=$(date +%Y%m%d%H%M%S)
    echo "$now: $*" >> $logfile
}

if [ $# -ne 1 ]; then
    echo $0: usage: myscript name
    exit 1
fi

name=$1
now=$(date +%Y%m%d%H%M%S)
logfile=/path/to/log/file/mylogfile.$now

logit name = $name

(обратите внимание, что файл журнала не находится в точном формате, который Вы указали; это находится в лучшем с меткой времени в начале каждой строки).

60
07.11.2012, 18:28
6 ответов

Можно использовать usermod управляйте для изменения оболочки входа в систему пользователя.

usermod -s /sbin/nologin myuser

или

usermod -s /usr/sbin/nologin myuser

Если Ваша ОС не обеспечивает/sbin/nologin, можно установить оболочку на команду NOOP, такую как/bin/false:

usermod -s /bin/false myuser
65
27.01.2020, 19:32
  • 1
    /bin/false кажется более распространенным, чем /bin/true. –  jw013 07.11.2012, 19:19
  • 2
    @jw013 я обновляю свой ответ, но оба должны хорошо работать. –  jordanm 07.11.2012, 19:21
  • 3
    Отметьте это на Debians, nologin на самом деле должен быть найден в /usr/sbin/nologin –  xebeche 19.11.2013, 14:05
  • 4
    это было моей первой идеей, к сожалению, 'допустимое' использование некоторых учетных записей пользователей, отключен при установке nologin –  Javier 12.12.2014, 00:46
  • 5
    @jw013 На самом деле я имею /usr/local/bin/maybe который /dev/urandomly выбирает между теми двумя. Возможно, я должен использовать его :D –  hegez 04.10.2017, 19:30

Вы редактируете /etc/passwd файл и изменение пользователи окружают от /bin/bash, или /bin/sh кому: /sbin/nologin

4
27.01.2020, 19:32
  • 1
    Ответ корректен, но редактирующий руку/etc/passwd никогда не должен рекомендоваться. –  jordanm 07.11.2012, 19:06
  • 2
    Почему? Это - что-то, что мы делали столько, сколько я был профессиональным sys администратором. (приблизительно 20 лет теперь), На самом деле не все дистрибутивы linux/unix имеют инструменты для изменения/etc/passwd или/etc/group.. Если Вы не используете что-то как Yast или Smit, которые являются инструментами, которые кэшируют настройки и перезаписывают их в ручном редактировании нет никакого вреда. –  Mark Cohen 07.11.2012, 22:34
  • 3
    Намного легче сделать "повреждения общим входом в систему" ошибка редактированием руки, а не отдельный пользователь. –  jordanm 07.11.2012, 22:55
  • 4
    @jordanm: существует vipw который предотвращает такую ошибку. –  eudoxos 26.04.2017, 17:29

Во-первых, отключите пароль, с помощью passwd -l username.

Также отметьте в man страница для passwd для опции -l:

   -l, --lock
       Lock the password of the named account. This option disables a password by changing it to a value which matches no
       possible encrypted value (it adds a ´!´ at the beginning of the password).

       Note that this does not disable the account. The user may still be able to login using another authentication token
       (e.g. an SSH key). To disable the account, administrators should use usermod --expiredate 1 (this set the account's
       expire date to Jan 2, 1970).

       Users with a locked password are not allowed to change their password.
4
27.01.2020, 19:32
  • 1
    Это не может быть желательно. Им, возможно, понадобится пароль на их системной учетной записи для доступа к электронной почте, например. –  jordanm 07.11.2012, 19:43
  • 2
    Некоторые почтовые системы позволяют использование своих собственных механизмов пароля. Я использую Dovecot и Exim с электронным письмом только пароль. Это позволяет использование веб-почты на серверах, я не использовал бы свой системный пароль. Виртуальные почтовые домены требуют своего собственного пароля, поскольку они не связаны с системой пароля серверов. –  BillThor 08.11.2012, 15:27

Вы можете использовать команду chsh:

~# chsh myuser

введите новые детали оболочки, когда требуется:

Login Shell [/bin/sh]: /bin/nologin

или короче версия:

~# chsh myuser -s /bin/nologin
2
27.01.2020, 19:32

Изменение оболочки входа в систему не обязательно препятствует аутентификации пользователей (за исключением некоторых служб, которые проверяют, упоминается ли оболочка пользователя в / и т. Д. / снаряды ).

Люди могут по-прежнему иметь возможность аутентифицироваться в различных службах, которые ваша система предоставляет пользователям unix, и могут иметь право выполнять некоторые действия, хотя, вероятно, не запускать произвольные команды напрямую.

Изменение оболочки на / bin / false или / usr / sbin / nologin не позволит им запускать команды только в тех службах, которые можно использовать для выполнения команд (вход в консоль , ssh, telnet, rlogin, rexec ...), поэтому влияют на авторизацию только для некоторых служб.

Например, для ssh это все еще позволяет им выполнять переадресацию портов.

passwd -l отключит аутентификацию по паролю, но пользователю все равно может быть разрешено использовать другие методы аутентификации (например, authorized_keys с ssh ).

По крайней мере, с pam в Linux вы можете использовать модуль pam_shells , чтобы ограничить аутентификацию или авторизацию для пользователей с разрешенной оболочкой (упомянутых в / etc / shells ).Для ssh вы захотите сделать это на уровне авторизации ( аккаунт ), поскольку для аутентификации sshd дополнительно использует pam для других методов аутентификации (например, authorized_keys ), или вы можете сделать это с помощью директив sshd_config в / etc / ssh / sshd_config (например, AllowUsers и друзья).

Помните, что добавление некоторых ограничений в глобальную авторизацию pam потенциально может помешать запуску cron заданий от имени этих пользователей.

21
27.01.2020, 19:32

Чтобы запретить пользователю вход в систему и даже аутентификацию через ssh, которая включает переадресацию портов (, как описано здесь Стефан ), я изменяю пользователя, чтобы он был похож на системного nobodyпользователя:

  • заблокировал аутентификацию по паролю в/etc/shadow*или !!в соответствующем поле)
  • отключена оболочка в /etc/passwd(, например. /sbin/nologinв нужном поле)
  • читать -только домашний каталог в/etc/passwd(например. /в нужном поле)
1
27.01.2020, 19:32

Теги

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