Як приховати користувачів на екрані входу в GDM?


64

Нещодавно я додав декількох нових користувачів, які мені потрібні для qmail. Тепер вони з'являються у вікні на екрані входу та захаращують його, і мені потрібно прокрутити, щоб знайти свого користувача. Як я можу приховати цих користувачів із поля входу?


Я не знаю, додавали Exclude=foobarу /etc/gdm/gdm.confтворах, ви спробували це?
Умань

гарне запитання, відповіді можуть бути застарілими (відповідно до обговорення мета).
Туфір

Відповіді:


30

Редагуйте файл /etc/gdm/gdm.schema, знайдіть розділ, який наразі виглядає так:

  <schema>
    <key>greeter/Exclude</key>
    <signature>s</signature>
    <default>bin,root,daemon,adm,lp,sync,shutdown,halt,mail,news,uucp,operator,nobody,nobody4,noaccess,postgres,pvm,rpm,nfsnobody,pcap</default>
  </schema>

І щоб виключити користувача під назвою qmail, наприклад, додайте qmail до списку за замовчуванням, щоб розділ виглядав так.

  <schema>
    <key>greeter/Exclude</key>
    <signature>s</signature>
    <default>qmail, bin,root,daemon,adm,lp,sync,shutdown,halt,mail,news,uucp,operator,nobody,nobody4,noaccess,postgres,pvm,rpm,nfsnobody,pcap</default>
  </schema>

Це не призведе до того, що qmail користувача з’явиться у вікні gdm. Для цього був чудовий інструмент для графічного інтерфейсу, але він не був в Ubuntu протягом останніх кількох версій.

Іншою альтернативою є встановлення UID користувача на рівні менше 1000. Вони вважаються системними обліковими записами, які також виключені в програмі GDM.


afaik, інструмент графічного інтерфейсу більше не працює через те, що GDM перейшла з текстових файлів площин для його конфігурації на схеми Gconf.
LassePoulsen

Дякуємо за інформацію Source Lab. Я помітив, що за останні кілька релізів з подібних причин було втрачено кілька інструментів графічного інтерфейсу.
Річард Холлоуей

29
Насправді, я не думаю, що слід змінювати /etc/gdm/gdm.schema. Замість цього додайте два рядки [greeter] Exclude=nobody,qmail-foo,qmail-barдо /etc/gdm/custom.conf. (Окрім того nobody, імена у списку за замовчуванням все одно не відображатимуться, оскільки їх номер uid <1000.)
Жил,

3
Зазвичай для цього слід використовувати uids до 1000.
txwikinger

@RichardHolloway Не можете знайти такий файл у Ubuntu 12.04.04, можете порадити?
gotqn

56

Для нової GDM 3.X, старі відповіді не працюють, для цього , крім установка в є застарілою , то він більше не буде працювати. Одне просте вирішення, якщо ви хочете уникнути зміни uid користувача:
greetercustom.conf

  1. Відкрийте термінал і введіть (замініть userім’я користувача, яке ви хочете заховати на екрані входу):

    sudo nano /var/lib/AccountsService/users/user
    
  2. Додайте у файл таке:

    [User]  
    Language=   
    XSession=gnome  
    SystemAccount=true  
    
  3. Переключіть користувача або вийдіть, щоб перевірити, чи userвін більше не вказаний.


1
Дійсно, це я і зробив, прочитавши документи Arch . Цю відповідь слід заохочувати, щоб люди побачили її швидше і економили час.
Стефан ван ден Аккер

здається, що підходящий спосіб замість маніпулювання UID
xuma202,

1
Фантастичний! Це допомагає вирішити проблему користувачів, що на екрані входу ховаються уїди менше 1000.
biocyberman

1
Які наслідки зробити користувач системним обліковим записом?
Jistanidiot

2
Це працювало для мене, але мені довелося перезавантажитись, щоб зміни вступили в силу.
benjer3

13

Хаккі, але ви можете змінити ідентифікатор користувача, щоб він не відображався у списку:

sudo usermod -u 999 <username>

Це працює, тому що користувачі з id до 1000 вважаються "системними" користувачами (тобто не людьми).

Єдиний інший спосіб, який я знаю, - це повністю приховати список:

sudo -u gdm gconftool-2 --type bool --set /apps/gdm/simple-greeter/disable_user_list 'true'

3
Немає такого поняття, як "рівень користувача", це ідентифікатори користувача.
Жоао Пінто

6
Цей usermod -uваріант цікавий: він автоматично змінює uid у домашньому каталозі та поштову котушку (якщо така є) на збіг. Однак це може порушити їх доступ до будь-яких файлів, якими вони володіють за межами домашнього каталогу.
poolie

Щоб повністю приховати список, ви також можете запустити gdmsetup та використати прапорець.
belacqua

11

Розвиваючи коментар Гілла до прийнятої відповіді, ось, наскільки я вважаю, є поточний "найкращий досвід" (безпечний для гномів) спосіб зробити це. Ця зміна буде відображена також у "Сесії аплетів з аплетом" Gnome.

Цей метод полягає в тому, що запропоновано в документах на веб-сайті GDM , і хоч і сайт, і Жил демонструють додавання "ніхто" до виключення, я хотів переконатися, що зрозуміло, що це насправді необхідно (незважаючи на те, що вказуються або онлайн-документи явно пропонують). Я перевірив це на кількох системах 10.10, щоб перевірити повторюваність.

Все, що нам потрібно зробити, - це зробити в одному рядку редагування /etc/gdm/custom.conf. Більшість інших методів (внесення змін до default.conf, gdm.conf тощо) застарілі.

Якщо у вас є /etc/gdm/custom.conf, відредагуйте цей файл. В іншому випадку скопіюйте файл прикладу:

sudo cp /usr/share/doc/gdm/examples/custom.conf /etc/gdm/custom.conf

У розділі [Greeter] /etc/gdm/custom.confдодайте:

Exclude=user1,user2,nobody

Де "user1" і "user2" - це імена користувачів або записи файлів passwd (наприклад, qmail, squid тощо), які ви не бажаєте показувати у "лицькому браузері GDM".

Примітка . У моїй версії Gnome / GDM (2.30), якщо у вас не вказано "ніхто" у записі Виключити, то у вас буде відображатися помилкове вхід користувача nobody, а не user1 або user2.

Примітка №2 : Нереєстрація рахунків з UID нижче 1000 - це налаштований параметр. За замовчуванням MinimalUIDзначення встановлюється на 1000. Якщо і лише в тому випадку, якщо налаштування за замовчуванням IncludeAll=trueзалишено на місці і Includeдиректива не змінена на не порожнє значення, чи вітає GDM сканування файлу passwd на предмет записів, які мають UID, більший за MinimalUID. Потім відображаються користувачі, які мають UID вище MinimalUID, які не перебувають у списку Виключення.

Я не перевіряв, чи буде функція зворотного налаштування, а саме те, що встановлення Include=user1,user2запису в custom.conf буде працювати, як представлено Він повинен змінювати будь-які IncludeAllпараметри та відображати лише тих користувачів, які явно перераховані.


+1 для посилання на сайт GDM, і тому, що це працювало для мене.
Аарон

Більше не працює над новішими версіями GDM.
Штефан ван ден Аккер

2

Я написав сценарій (gdm-greeter) у ці вихідні. Він добре працює на CentOS 6.2, цікаво, чи стане він корисним для Ubuntu?

#!/bin/bash
#
# $LastChangedDate: 2012-02-17 09:13:10 +0100 (Fri, 17 Feb 2012) $
# $Revision: 1627 $
#

# Get the default exlude list
DefaultExclude=`sed 's,</schema>,#,' /etc/gdm/gdm.schemas | \
                tr '\n#' '#\n' | \
                grep '>greeter/Exclude<' | tr '\n#' '#\n' | \
                grep '<default>' | \
                sed -e 's,.*<default>,,' -e 's,</default>.*,,'`

# Get the Exclude list from the config
eval `grep '^Exclude=' /etc/gdm/custom.conf 2> /dev/null`

# If empty copy the default
if [ "$Exclude" = "" ]
then
   Exclude=$DefaultExclude
fi

# Collect all user accounts with a shell
Users="`grep 'sh$' /etc/passwd | awk -F: '{print $1}' | \
        sort | tr '\n' ',' | sed 's/,$//'`"


#------------------------------------------------------------------------------

# The functions area

PlaceExclude() # $1 new exclude string
{
   # Create a .bak file
   if [ ! -f /etc/gdm/custom.conf.bak ]
   then
      cp /etc/gdm/custom.conf /etc/gdm/custom.conf.bak
   fi

   # Create a tmp file without the Exclude string
   cat /etc/gdm/custom.conf | tr '[\n' '\n[' | \
   sed -e 's/^\(greeter[]].*\)[[]Exclude=[^[]*\([[].*\)/\1\2/' | \
   tr '[\n' '\n[' > /tmp/custom.conf.$$

   # If the tmp file is there and we have non default Exclude
   if [ -f /tmp/custom.conf.$$ ]
   then
      if [ "$1" = "$DefaultExclude" ]
      then
         cat /tmp/custom.conf.$$ > /etc/gdm/custom.conf
      else
         # Place the new Exclude string
         cat /tmp/custom.conf.$$ | tr '[\n' '\n[' | \
         sed -e "s/^greeter[]][[][[]/greeter][Exclude=$1[[/" | \
         tr '[\n' '\n[' > /etc/gdm/custom.conf
      fi
   fi
   rm -f cat /tmp/custom.conf.$$
}

#------------------------------------------------------------------------------
#------------------------------------------------------------------------------

# Command area

add() # Cmd (Add a user to the greeter {<user>
{
   UserFilter=`echo $Users | sed 's/,/|/g'`
   if ! echo $1 | egrep -w $UserFilter &> /dev/null
   then
      echo "Error: user $1 unknown"
      echo
      return 1
   fi

   # Only work with the users not in the default exclude list
   Filter=`echo $DefaultExclude | sed 's/,/|/g'`
   Hidden=`echo $Exclude | tr ',' '\n' | egrep -vw "$Filter" | tr '\n' ','`

   # Check if we need to do something
   if ! echo $Hidden | tr ',' '\n' | grep -w $1 &> /dev/null
   then
      echo
      echo "User $1 is not hidden"
      echo
   else
      # Remove the user from the exclude
      PlaceExclude "`echo $Exclude | tr ',' '\n' | grep -vw $1 | \
                     tr '\n' ',' | sed 's/,$//'`"

      # Tell the action
      echo "User $1 added to the greeter"
      echo
   fi
}

del() # Cmd (Delete/hide a user from the greeter {<user>
{
   UserFilter=`echo $Users | sed 's/,/|/g'`
   if ! echo $1 | egrep -w $UserFilter &> /dev/null
   then
      echo "Error: user $1 unknown"
      echo
      return 1
   fi

   # Check if we need to do something
   if echo $Exclude | tr ',' '\n' | grep -w $1 &> /dev/null
   then
      echo
      echo "User $1 is already excluded from the greeter"
      echo
   else
      # Exclude the user
      PlaceExclude "$1,$Exclude"

      # Tell the action
      echo "User $1 hidden from the greeter"
      echo
   fi
}

hide() # CMD (Delete/hide a user from the greeter {<user>
{
   del $1
}

hidden() # Cmd (List the hidden users {
{
   Filter=`echo $DefaultExclude | sed 's/,/|/g'`
   Hidden=`echo $Exclude | tr ',' '\n' | egrep -vw "$Filter" | tr '\n' ','`

   if [ ${#Hidden} -eq 0 ]
   then
      echo "No hidden users"
      echo
   else
      echo
      echo "Users hidden from the greeter:"
      echo
      echo $Hidden | tr ',' '\n' | sed 's/^/   /'
   fi
}

users() # Cmd (List the users in the greeter {
{
   Filter=`echo $Exclude | sed 's/,/|/g'`
   Greeters=`echo $Users | tr ',' '\n' | egrep -vw "$Filter" | tr '\n' ','`

   if [ ${#Greeters} -eq 0 ]
   then
      echo "No users in the greeter"
      echo
   else
      echo
      echo "Users in the greeter:"
      echo
      echo $Greeters | tr ',' '\n' | sed 's/^/   /'
   fi
}

list() # CMD (List the users in the greeter {
{
   users
}
#------------------------------------------------------------------------------
#------------------------------------------------------------------------------

# Framework area

help() # Cmd (Command help {[command]
{
   if [ "$1" = "" ]
   then
      CMD=help
   else
      CMD=$1
   fi

   if ! grep \^${CMD}*\(\).*#.*Cmd $0 > /dev/null 2>&1
   then
   (
      echo
      echo "Error: unknown cmd"
      echo
   ) >&2
   else
   (
      echo
      echo "Usage: `basename $0` $CMD `grep \^${CMD}*\(\).*#.*Cmd $0 | \
                    sed 's/.* {//g'`"
      echo
   ) >&2
   fi
}

#
# Main
#

if [ "$1" != "" ] && grep -i $1\(\).*#.*Cmd $0 > /dev/null 2>&1
then
   $*
else
   echo
   echo "Usage: `basename $0` command [parm1] [parm2] [..]"
   echo
   echo "  Available Commands:"
   echo
   grep \^[0-9a-z_A-Z]*\(\).*#.*Cmd $0  | \
   awk -F\( '{printf "%-16s %s\n",$1,$3}' | sed 's/ {.*//g' | sort
   echo
fi

2

Я мав би погодитися, що найбільш прийнята відповідь тут близька, але не мертва.

Я просто лизнув цю проблему сам, і для мене відповідь полягала в тому, щоб змінити наступний запис gdm.schema:

(original)
<schema>
      <key>greeter/IncludeAll</key>
      <signature>b</signature>
      <default>true</default>
    </schema>

(after my edit)
<schema>
      <key>greeter/IncludeAll</key>
      <signature>b</signature>
      <default>false</default>
    </schema>

Ефект цього полягає в тому, що весь список користувачів відключений, що, якщо я правильно інтерпретую оригінальне запитання, - це насправді те, що мав намір зробити ОП (gruszczy). Це виключає необхідність складати довгий рядок виключень, оскільки всі користувацькі ідентифікатори незалежно від номера UID виключаються незалежно від зміни цього параметра. Я особисто застосував цей параметр до трьох окремих серверів CentOS 6.2 на роботі, до яких час від часу можна отримати доступ через XDMCP (використовуючи xrdp> vnc-сервер> xinetd> gdm> gnome) через RDP, що дозволяє деяким нашим менш досвідченим адміністраторам Linux працювати над ними системи з мінімальною підготовкою.

Все це говорив, хоча я погоджуюся, що недосвідченому системному адміністратору слід з самого початку навчитися працювати з особистого рахунку (можливо, з доступом до судо), а не як root, якщо у вас є досвід роботи з цим обліковим записом належним чином, немає ніякої шкоди в цьому. Просто переконайтеся, що ви знаєте, що робите перед рукою. Що стосується інших моїх системних адміністраторів, я додав підтримку CentrifyDC для Active Directory до всіх цих систем і налаштував системи таким чином, щоб AD-UserID можна було використовувати для робочих сеансів, зберігаючи права користувача групи безпеки AD. Але особисто, оскільки я розробляв усі ці сервери і використовував Linux вже більше 15 років, я не думаю, що використовувати root для прискорення роботи. Насправді я схильний включати root у системах, де він ' Мене вимкнули лише для того, щоб я міг користуватися цим обліковим записом і вирішував би погоню за виконанням справ. Головне, насправді, це просто створити звичку створювати резервну копію будь-якого файлу, перш ніж змінювати його. Це захистить від більшості випадків і дозволить відновити систему, якщо ви виконаєте редагування, яке в іншому випадку призведе до того, що система стане недоступною (просто завантажтеся на живий компакт-диск та виправте те, що потрібно виправити).

ІМХО, я вважаю, що мантра «ніколи не входити як корінь» насправді існує лише для того, щоб захистити сисдмінів n00bie від себе. Але якщо ви досягли рівня компетенції з Linux до того моменту, коли за дуже короткий проміжок часу ви можете спроектувати систему з будь-якої ОС Linux, і вона працює щоразу, то немає ніяких причин жити за принципом "ніколи не входити як корінь". мантра, оскільки до цього моменту ви готові впоратися з відповідальністю, пов’язаною з використанням цього облікового запису. Особливо це стосується середовищ, які використовують CentrifyDC для підтримки AD, оскільки 'root' стає локальним обліковим записом sysadmin і він (зазвичай) вмикається автоматично. Отже, я вважаю, що найкраще вирішити переслідування і зробити пароль кореневого акаунта одним із найперших завдань, які я виконую на будь-якому розгортанні в даний час. Звичайно, Я міг би зробити цілий "логін як власний ідентифікатор, а потім судо", але особисто я не відчуваю потреби робити так. Ваш власний пробіг може відрізнятися ...


0

Змініть оболонку входу користувача на порожній рядок у / etc / passwd

Наприклад, змініть:

# Change
example:x:2001:2001:Example User,,,:/home/example:/bin/bash

# To
example:x:2001:2001:Example User,,,:/home/example:

Я перезапустив диспетчер дисплеїв і спостерігав за цим ефектом.

sudo service lightdm restart
# (or gdm, mdm, ...)

Мені знадобилися тижні, щоб визначити це причиною того, що користувачі ховались у вікно входу в менеджер дисплеїв. Очевидно, що / var / lib / AccountService / користувачів MDM ігнорується, і, мабуть, також GDM. Я не пішов так далеко, додайте Exclude=user1,user2або Include=user3Under [greeter]в /etc/mdm/mdm.conf, або створити /etc/mdm/custom.conf як додавалося інший ящик ховався користувачі через useraddдуже добре, в той час як користувачі Додано с adduser. Якщо встановити оболонку для входу в / bin / false, це заперечує всі входи в систему для цього користувача, на що я все одно хочу відповідати. Але це також приховує користувача на екрані входу, якщо ви хочете, щоб він був просто недоступним.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.