Как Вы создаете пользователя без пароля?

У меня просто была та же проблема в Linux, с помощью Bash. Я сначала использовал переменную среды SSH_CONNECTION, но затем понял, что это не установлено если Вы su -.

lastlog решение выше не работало ни один после su или su -.

Наконец, я использую who am i, который показывает удаленный IP (или имя хоста) в конце, если это - соединение SSH. Это также работает после su.

Используя регулярные выражения Bash, это работает:

if [[ $(who am i) =~ \([-a-zA-Z0-9\.]+\)$ ]] ; then echo SSH; else echo no; fi

Если zsh не поддерживает регулярные выражения, то же может быть достигнуто по-разному с grep, сокращено, sed, или что бы то ни было.

Для любопытного, ниже то, что я использую это для в .bashrc корня:

    # We don't allow root login over ssh.
    # To enable root X forwarding if we are logged in over SSH, 
    # use the .Xauthority file of the user who did su

    w=$(who am i)
    if [[ $w =~ \([-a-zA-Z0-9\.]+\)$ ]] ; then
        olduser=${w/ .*/}
        oldhome=$(getent passwd $olduser | cut -d: -f 6)
        [ -f "$oldhome/.Xauthority" ] \
          && export XAUTHORITY=$oldhome/.Xauthority
    fi

Альтернатива, которая также работает с su должен был бы рекурсивно искать sshd посредством родительских процессов:

#!/bin/bash

function is_ssh() {
  p=${1:-$PPID}
  read pid name x ppid y < <( cat /proc/$p/stat )
  # or: read pid name ppid < <(ps -o pid= -o comm= -o ppid= -p $p) 
  [[ "$name" =~ sshd ]] && { echo "Is SSH : $pid $name"; return 0; }
  [ "$ppid" -le 1 ]     && { echo "Adam is $pid $name";  return 1; }
  is_ssh $ppid
}

is_ssh $PPID
exit $?

Если функция добавляется к .bashrc, она может использоваться как if is_ssh; then ...

22
04.05.2013, 22:49
8 ответов

Можно работать passwd --delete <username> после создания пользователя с adduser. После этого Вы сможете войти в систему, не вводя пароль.

6
27.01.2020, 19:43
  • 1
    я думаю, что это - полная противоположность того, относительно чего просят здесь. –  Shadur 29.11.2011, 15:37
  • 2
    Сначала, я думал, что это было правом (или лучше всего) ответ, пока я не перечитал вопрос OP, который упоминает для "пользователя системы", и не обнаруживаются на "экране входа в систему". Этот метод обнаружится на экране входа в систему, и Вы можете 'sudo', использующий этот метод. –  HidekiAI 29.04.2015, 02:30

Пользователь в/etc/passwd с корневым каталогом/dev/null и оболочкой/sbin/nologin, может использоваться для sudo команд луга, но не может на самом деле войтись, например;

от моего/etc/passwd

tcpdump:x:104:441:added by portage for tcpdump:/dev/null:/sbin/nologin

Я половина помнит это, заставлю ее исчезнуть из экрана входа в систему XDM также, но я больше не использую XDM, таким образом, это - предположение :-)

3
27.01.2020, 19:43
  • 1
    Это - правильный ответ, потому что OP попросил учетную запись, которую Вы не можете 'sudo' или разоблачать на "экране входа в систему" путем установки на '/sbin/nologin' для оболочки. Одна вещь отметить состоит в том, потому что OP, который попросили "пользователя системы", должен также упомянуть, что 'useradd - система' должна использоваться для создания UID в небольшом числе (как portage/ebuild делает) –  HidekiAI 29.04.2015, 02:26

Я не могу быть уверен в OSX, но на FreeBSD можно использовать:

pw add user mymuser -g mygroup -s /nonexistent -h -

значение - переданный -h опция говорит pw установить поле пароля в master.passwd к *, таким образом создавая учетную запись без входов в систему. Установка оболочки не строго необходима, но избегает проверки оболочки от/etc/pw.conf.

1
27.01.2020, 19:43

Если Вы находитесь на Ubuntu, можно загрузить пароль для пользователя Ubuntu в выезде/etc/shadow эта статья:

http://www.psychocats.net/ubuntucat/creating-a-passwordless-account-in-ubuntu/

1
27.01.2020, 19:43

Отъезд поля пароля, пустого для пользователя в passwd файл будет работать.

1
27.01.2020, 19:43

Вы можете использовать usermod, который отключит пароль с помощью ! , а не *.

usermod -L <username>

Из man-страницы на usermod:

-L, --lock Lock a user's password. This puts a '!' in front of the encrypted password, effectively disabling the password.
3
27.01.2020, 19:43

Использование dscl даст

dscl . -passwd /Users/myuser ""
2
27.01.2020, 19:43

В Linux я использую:

sudo useradd -r -p \* -s /sbin/nologin -c "Comment My Daemon,,,"  -d "/var/uuu"  myuser

Следующая альтернатива должна быть более кроссплатформенной (если параметр -r недоступен):

sudo useradd -K UID_MIN=100 -K UID_MAX=499 -K GID_MIN=100 -K GID_MAX=499 -p \* -s /sbin/nologin -c "Comment My Daemon,,,"  -d "/var/uuu"  myuser

Здесь:

  • пароль в / etc / shadow будет установлено значение * . Без -p \ * будет !

  • оболочка будет / sbin / nologin (Вы также можете использовать / bin / false , но я думаю, что / bin может быть смонтирован слишком поздно некоторые системы). Таким образом, пользователь не может войти в систему

  • -d устанавливает домашний адрес пользователя

ВАЖНОЕ ПРИМЕЧАНИЕ

Здесь -r создает системного пользователя:

Этот флаг используется для создания системы учетная запись. То есть пользователь с UID ниже значения UID_MIN , определенного в /etc/login.defs , и чей пароль не истекает. Обратите внимание, что useradd не будет создавать домашний каталог для такого пользователя, независимо от настройки по умолчанию в /etc/login.defs . Вы должны указать опцию -m , если хотите создать домашний каталог для системной учетной записи. Это опция, добавленная Red Hat .

Параметр -r может отсутствовать в вашей системе. Итак, чтобы создать системного пользователя, который не отображается на экране входа в систему, я думаю, вы можете использовать параметр -K . Примерно так: -K UID_MIN = 100 -K UID_MAX = 499 . Вы можете попробовать такой вариант:

-K UID_MAX=$(cat /etc/login.defs | grep ^UID_MIN | awk '{print $2}')

, чтобы автоматически определить вас UID_MAX , но я не тестировал на OS X. Вам понадобится SYS_UID_MAX для UID_MIN ], если он раскомментирован в / etc / login.defs

То же самое для GID_MAX и GID_MIN для идентификатора системной группы. (См. GID_MIN и, если раскомментировать SYS_GID_MAX в /etc/login.defs для использования в качестве GID_MAX )

{{125512] {{125512] }
-1
27.01.2020, 19:43

Теги

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