Home    Решения    Услуги    Download    Публикации    Работа    Продукти    Документи
 

 

 
Print this page/Отпечатай тази страница  

 

Потребители

от Йовко Ламбрев ([email protected])

(Статията е включена в първия български online Учебник за Linux, написан от доброволци от българското Linux общество)




 

    Достъпът до всяка Linux система става чрез потребителски account, установен от системния администратор. Това означава, че на всеки потребител се задава потребителско име за идентификация, парола, собствена директория и му се задават права за достъп до системата. Всичко това се прави чрез администраторски account, наречен root. Linux често се използва и само от един потребител, но дори и тогава не следва да се използва root account-а за ежедневна работа. За да разберем защо нека разгледаме по-подробно какъв е този потребител root.

Суперпотребител root

    Когато бъде инсталирана една Linux система един потребител се създава автоматично. Той се нарича root или суперпотребител, защото няма нещо, до което този потребител да няма достъп или да не може да направи. Всички останали потребители не биха могли да изтрият нищо освен своите собствени файлове, докато суперпотребителя може да унищожи всички системни файлове само с една единствена команда. Това е най-мощния потребителски account. Пред този потребител няма никакви забрани и ограничения. Когато се включите в системата като root няма защо да се тревожите за собствеността върху файловете, достъпа до тях или пък софтуерните настройки - можете да правите всичко по всяко време.
    Това е особено привлекателно за начинаещите, които като се сблъскат с даден проблем във връзка със собствеността или правата на достъп вместо да го решат избират по-лесния път и работят като root. Докато прибързано не извършат някоя глупост и сринат системата, често и непоправимо. Затова основно правило е root-account-а да се използва само и единствено за администриране. Направете си друг потребител за ежедневната работа. Това е желателно да бъде първото нещо, което следва да направите, когато си инсталирате нова Linux машина.
    Именно поради значимостта на командите, които подавате като root, използването на този потребител е свързано и с промяна на обичайния prompt на командния ред.
    Важно е да се отбележи, че този потребител може да се нарича всякак - няма правило, което да изисква той да се казва root.

Потребителски account-и

    Дори и да сте единственият потребител на вашата Linux машина трябва да сте запознат с потребителските account-и и управлението на потребителите. Всеки потребител, независимо дали сте вие, ваши приятели или пък клиенти за да се включат логически към администрираната от вас Linux система трябва да имат уникално потребителско име и парола. Изключение правят някои специални потребители, които могат и да нямат парола.
    Цялата информация за потребителите се съдържа във файла /etc/passwd - най-обикновен текстов файл, чийто собственик е суперпотребителя и само той може да редактира съдържанието му, останалите потребители по дефиниция могат само да го четат. Всички редове в този файл имат строго определен формат:

username:password:userID:groupID:comment:home_directory:login_comm

    Нека разгледаме един примерен файл /etc/passwd - това е моят /etc/passwd файл, взет от домашния ми компютър:

root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:
daemon:x:2:2:daemon:/sbin:
adm:x:3:4:adm:/var/adm:
lp:x:4:7:lp:/var/spool/lpd:
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:
news:x:9:13:news:/var/spool/news:
uucp:x:10:14:uucp:/var/spool/uucp:
operator:x:11:0:operator:/root:
games:x:12:100:games:/usr/games:
gopher:x:13:30:gopher:/usr/lib/gopher-data:
ftp:x:14:50:FTP User:/home/ftp:
nobody:x:99:99:Nobody:/:
postgres:x:100:233:PostgreSQL Server:/var/lib/pgsql:/bin/bash
xfs:x:101:101:X Font Server:/etc/X11/fs:/bin/false
gdm:x:42:42::/home/gdm:/bin/bash
yovko:x:500:100:Yovko Lambrev:/home/yovko:/bin/bash
nataly:x:501:100:Natalia Staikova:/home/nataly:/bin/bash

    Всеки ред от този файл е съставен от седем полета разделени от двоеточия. Ако нищо не се въведе между две двоеточия полето остава празно, но двоеточията задължително трябва да съществуват. Как да тълкуваме тези седем полета:

      username е уникалното потребителско име за логическо включване към системата
      password е паролата за съответния потребител (кодирана)
      userID (UID) е уникално число, което идентифицира потребителя пред операционната система
      groupID (GID) е уникално число, което определя групата на потребителя
      comment е някакъв коментар (обикновено истинското име на потребителя, телефон и др.)
      home_directory е директорията, в която попада потребителя след логическото си включване
      login_comm е команда, която се изпълнява при логическото включване на потребителя (тази команда обикновено стартира някаква шел програма)

    Обърнете внимание, че тази структура на /etc/passwd се използва в почти всички UNIXTM системи.

Потребителски имена

    Потребителското име е символен низ, обикновено до 14 знака (в някои системи до 8), което уникално определя даден потребител. В една система не може да има двама потребителя с едно и също потребителско име. Желателно е да избирате кратки и ясни потребителски имена тъй като те са в основата на комуникациите с останалите потребители на системата. Обикновено потребителското име съвпада с истинското име на потребителя, прякора му, инициалите му или някаква тяхна комбинация.
    Важно е да се отбележи, че съществува конвенция, според която потребителските имена трябва да се изписват с малки букви. Малките и големите букви са от значение при всички Linux (и UNIXTM) системи. Например mitko и Mitko са две съвсем различни потребителски имена. Тъй като повечето команди се пишат с малки букви прието и потребителските имена да се изписват така, а и за да избегнете опасността от недоглеждане потребителят mitko да получава пощата на потребителя Mitko, само защото някой не е забелязал главната буква. В потребителското име се допускат символи за подчертаване, числа и дори повечето специални символи, но тъй като името започва да изглежда странно (а не са изключени проблеми с някои приложения) съветът ми да се стремите към някоя простичка буквена комбинация.

Пароли

    Операционната система записва паролата на потребителя кодирана във второто поле. Само самия потребител може да променя паролата си чрез командата passwd и разбира се администратора.


Някои версии (вече повечето) не записват паролите във файла /etc/passwd заради проблеми свързани със сигурността. (Както си спомняте вече споменахме, че този файл може да бъде прочетен от всички потребители на системата.) В такъв случай паролите се пазят в друг файл, назоваван shadow password file и обикновено се казва /etc/shadow. Когато паролите са записани в такъв файл (отново кодирани), тогава полето password в /etc/passwd съдържа просто знака x. Така е и в приведения по-горе примерен файл.

Ето как изглежда един примерен shadow файл:

root:K/c6663skpiAEF:10766:0:99999:7:::
bin:*:10766:0:99999:7:::
daemon:*:10766:0:99999:7:::
adm:*:10766:0:99999:7:::
lp:*:10766:0:99999:7:::
sync:*:10766:0:99999:7:::
shutdown:*:10766:0:99999:7:::
halt:*:10766:0:99999:7:::
mail:*:10766:0:99999:7:::
news:*:10766:0:99999:7:::
uucp:*:10766:0:99999:7:::
operator:*:10766:0:99999:7:::
games:*:10766:0:99999:7:::
gopher:*:10766:0:99999:7:::
ftp:*:10766:0:99999:7:::
nobody:*:10766:0:99999:7:::
postgres:!!:10766:0:99999:7:::
xfs:!!:10766:0:99999:7:::
gdm:!!:10766:0:99999:7:::
yovko:uYU42zvcFaCGI:10766:0:99999:7:::
nataly:$1$Az3Y52v7$40GjOcEbHYUAqZ9eCFXLg.:10821:-1:99999:-1:-1:-1:135518564


    Когато потребителя въведе паролата си login програмата извършва семпла логическа операция с блок от нули и сравнява резултата със записаното във файла с паролите. Ако съвпадат потребителя получава достъп в противен случай достъпът му се отказва.
    Обърнете внимание, че преобразуването на паролата до нейния кодиран вид е кратковременна и простичка операция докато обратното не е така. Ако случайно успеете някак да откраднете файла с паролите на някоя UNIXTM система не мислете, че е лесно да възстановите от кодираните последователности техните първообрази.
    Полето за парола може да се използва и за ограничаване на достъпа. Това се използва за специални потребителски имена като lp или nobody. Ако в полето за парола бъде записана звездичка (*) всеки опит за логическо включване към системата посредством  тези потребителски имена ще бъде отхвърлян.
    Логично следва въпроса какво ще стане ако оставим това поле празно - ами всеки, който използва това потребителско име ще получи незабавен достъп до системата с правата на този потребител без да бъде питан за парола. Вие преценявате доколко можете да си позволите да имате такива потребители.
    Не е много умно да редактирате полето за парола с текстов редактор тъй като паролите са кодирани и вие не можете да пресъздадете метода на кодиране. Това, което ще постигнете като резултат е, че повече няма да можете да използвате това потребителско име, а пък ако го направите с root забравете, че повече ще можете да администрирате системата си. За смяна или въвеждане на пароли използвайте командата passwd.

Идентификатор на потребителя (UserID)

    Всеки потребител получава асоцииран с потребителското му име уникален потребителски идентификатор (UserID или UID) това е число, което операционната система използва за да идентифицира всяко нещо свързано с конкретния потребител.
    Повечето UNIXTM системи използват идентификаторите от 0 до 99 за специални UID, а числата от 100 нагоре за потребителите. В горния примерен /etc/passwd файл можете да видите, че суперпотребителя root има UID 0, а обикновените потребители yovko и nataly имат съответно номера 500 и 501.

Идентификатор на групата (GroupID)

    Този идентификатор се използва за да се обозначи принадлежността на даден потребител към някоя група потребители. Групите се използват от организационни съображения и са свързани с правата за достъп до файловете. Това подробно ще разгледаме малко по-долу. Номерата на GID започват от 0. Някои системи запазват номера от 0 до 49 (други само от 0 до 9) за системни групи, а останалите са предоставени за потребителски.

Коментари

    Това е поле, което обикновено съдържа истинското име на потребителя, адреса му, телефон или всякаква друга информация, която системния администратор е решил, че може да му бъде полезна. В горния пример полето съдържа просто името на потребителя.
   

HOME директория

    Директорията, в която попада потребителя след log-ването си към системата обикновено е неговата home директория. Нормално е всеки потребител да има такава директория. В горния пример можете да видите, че потребителят yovko има home директория /home/yovko, a home директорията на root е /root.
    Обикновено потребителя има пълни права в home директорията, но това съвсем не е задължително. Може да му бъде отнета собствеността върху някои файлове - това е класически подход за ограничаване на правата на даден потребител, например с отнемането на собствеността и правото да редактира profile файла си, който се изпълнява след логическо включване към системата.

Login команда

    Тази команда се изпълнява веднага след като потребителя се включи към системата. В общия случай това е команда, която стартира някакъв shell, но може да бъде и произволно приложение. Ако това поле е оставено празно в повечето UNIXTM системи се стартира Bourne shell. Шелът по подразбиране за Linux e bash (Bourne Again Shell).
   

Запазени (системни) потребителски имена

    В примерния /etc/passwd има около една дузина потребители, които са създадени от операционната система по време на инсталацията и имат специално предназначение:

  • Потребителят root е суперпотребителя (UID 0) и има неограничен достъп. Собственик е на много системни файлове.
  • daemon се използва за системни процеси. Използва се само за да притежава някои процеси и за да се установяват правилно техните права.
  • bin е собственик на изпълнимите файлове
  • adm притежава счетоводните и log файловете
  • uucp се използва за UUCP комуникации и достъп до файловете

    Повечето имат звездичка в полето за парола, което забранява използването им при login процедура.

Добавяне на потребители

    Можете да добавите потребители към системата си като просто редактирате /etc/passwd файла или да използвате скрипт, който ще го направи вместо вас. Разбира се и двете неща можете да направите само като root.


Преди да редактирате /etc/passwd файл направете си резервно копие !


    Нека да добавим потребителя suncho към нашата система. Нека той да има home директория /home/sample и да ползва bash шел. Тъй като UID номерата 500 и 501 са заети, задваме на новия потребител UID 502 и го оставяме в групата на обикновените потребители users (GID 100). Значи трябва да добавим следния ред в края на нашия /etc/passwd файл:

    suncho::502:100:Samo za primer:/home/sample:/bin/bash

    Забележете, че оставихме полето за парола празно, защото няма как да разберем нейния кодиран вид. Записваме файла в това състояние и след това подаваме следната команда за да установим паролата на новия потребител:

    passwd suncho

    Ще бъдете подканен да въведете парола. Масова практика е тя да съвпада с потребителското име, като се очаква потребителя да си я смени при първото си логическо включване. Това обаче крие опасност някой друг недобросъвестен потребител да присвои този account.
    Можете да оставите на потребителя сам да установи паролата си, но той може и да не забележи, че се log-ва без парола или пък да му хареса така, а проблемите ще рефлектират при вас, когато се появят. А ще се появят обещавам ви.
    Запомнете едно - хората мразят да помнят, въвеждат и променят паролите си. Вие като администратор трябва да ги принуждавате за това.  
    Сега остава да създадем home директорията на новия потребител с командата:

    mkdir /home/sample

И да прехвърлим собствеността и на потребителя suncho:

    chown suncho /home/sample

    Всички потребители трябва да принадлежат към някоя група. Това означава да добавите потребителското име на потребителя на съответния ред за групата в /etc/group файла. Ако потребителя принадлежи към няколко групи добавете името му към съответните редове за тези групи в /etc/group.
    Ако всичко това ви се вижда толкова сложно проверете дали вашата система ще изпълни командите useradd или adduser. А може би ще ви хареса и командата vipw.

Групи

    Всеки потребител на UNIXTM система принадлежи на някаква група. Групата е обединение на потребители по някакви причини. Например от една група могат да бъдат хората от един отдел, от друга - вашите клиенти или приятелите ви. Така е по-лесно да имате еднакви права за достъп до определени файлове или разпределени ресурси като мрежови принтер например. Всеки потребител може да шронадлежи към няколко групи, но в определен момент от време той е член само на една от тях. Това е свързано с правата за достъп тъй като Linux може да присъедини на потребителя само един идентификатор на групата (GID).
    Потребителите от една група могат да имат повече права за достъп до устройства, файлове, файлови системи или цели машини в сравнение с потребителите, които не принадлежат на тази група.
    Информацията за групите се съдържа във файла /etc/group, който изглежда примерно така:

root::0:root
bin::1:root,bin,daemon
daemon::2:root,bin,daemon
sys::3:root,bin,adm
adm::4:root,adm,daemon
tty::5:
disk::6:root,adm
lp::7:lp
mem::8:
kmem::9:
wheel::10:root
floppy::11:root
mail::12:mail
news::13:news
uucp::14:uucp
man::15:man
users::100:games
nogroup::-1:

    Лесно е да предположите какъв е формата на файла:

име_на_групата:парола:GID:списък_потребители

      Името на групата е уникално символно име както и това на потребителя.

      Паролата на групата трябва да бъде въведена от потребител, който пожелае да се присъеднини към групата. Не всички версии на Linux и UNIXTM използват това поле!

      GID е уникалният групов идентификатор.

      Списъкът на потребителите съдържа потребителските имена на потребителите, които принадлежат към групата.

    Всяка Linux система има няколко системни групи - такива са bin, mail, uucp, sys и др. Не е добра идея да имате потребители от тези групи тъй като това означава да им дадете големи привилегии.

    Добавянето на група е аналогично на добавянето на потребители. Само, че не всички Linux системи имат скриптове addgroup или groupadd и трябва да редактирате /etc/group сами.

Командата su

    Понякога се налага да изпълните някоя команда като друг потребител. Например ако сте администратор, а искате да създадете файл с правата на suncho, например. Или пък ако сте обикновен потребител и искате за малко да станете root. Разбира се едното решение е да напуснете системата и след това да се включите като другия, но има и алтернатива на този подход и тя е командата su.

    Например ако искате да станете root достатъчно е да напишете:

su root

    Разбира се, че ще трябва да въведете и паролата на root. Въведете командата su без аргумента root системата счита, че искате да станете root, така че можете да не уточнявате потребителско име ако ставате root.
    Ако обаче сте обикновен потребител или root и искате да станете yovko задължително трябва да уточните това с командата:

su yovko

    Разликата е, че Linux няма да пита за паролата на yovko ако сте root. Нали ви казах, че root може всичко.

    За да станете пак такъв какъвто сте бил напишете exit или натиснете Ctrl+D.