Достъпът до всяка Linux система става
чрез потребителски account, установен от системния
администратор. Това означава, че на всеки
потребител се задава потребителско име за
идентификация, парола, собствена директория и му
се задават права за достъп до системата. Всичко
това се прави чрез администраторски account, наречен
root. Linux често се използва и само от един
потребител, но дори и тогава не следва да се
използва root account-а за ежедневна работа. За да
разберем защо нека разгледаме по-подробно какъв
е този потребител root.
Когато бъде инсталирана една Linux
система един потребител се създава автоматично.
Той се нарича root или суперпотребител, защото няма
нещо, до което този потребител да няма достъп или
да не може да направи. Всички останали
потребители не биха могли да изтрият нищо освен
своите собствени файлове, докато
суперпотребителя може да унищожи всички
системни файлове само с една единствена команда.
Това е най-мощния потребителски account. Пред този
потребител няма никакви забрани и ограничения.
Когато се включите в системата като root няма защо
да се тревожите за собствеността върху
файловете, достъпа до тях или пък софтуерните
настройки - можете да правите всичко по всяко
време.
Това е особено привлекателно за
начинаещите, които като се сблъскат с даден
проблем във връзка със собствеността или правата
на достъп вместо да го решат избират по-лесния
път и работят като root. Докато прибързано не
извършат някоя глупост и сринат системата, често
и непоправимо. Затова основно правило е root-account-а
да се използва само и единствено за
администриране. Направете си друг потребител за
ежедневната работа. Това е желателно да бъде
първото нещо, което следва да направите, когато
си инсталирате нова Linux машина.
Именно поради значимостта на
командите, които подавате като root, използването
на този потребител е свързано и с промяна на
обичайния prompt на командния ред.
Важно е да се отбележи, че този
потребител може да се нарича всякак - няма
правило, което да изисква той да се казва root.
Дори и да сте единственият
потребител на вашата 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 или UID) това е число, което
операционната система използва за да
идентифицира всяко нещо свързано с конкретния
потребител.
Повечето UNIXTM системи използват
идентификаторите от 0 до 99 за специални UID, а
числата от 100 нагоре за потребителите. В горния примерен /etc/passwd файл
можете да видите, че суперпотребителя root има UID 0,
а обикновените потребители yovko и nataly имат
съответно номера 500 и 501.
Този идентификатор се използва за да
се обозначи принадлежността на даден потребител
към някоя група потребители. Групите
се използват от организационни съображения и са
свързани с правата за достъп до файловете. Това
подробно ще разгледаме малко по-долу.
Номерата на GID започват от 0. Някои системи
запазват номера от 0 до 49 (други само от 0 до 9) за
системни групи, а останалите са предоставени за
потребителски.
Това е поле, което обикновено съдържа
истинското име на потребителя, адреса му, телефон
или всякаква друга информация, която системния
администратор е решил, че може да му бъде полезна.
В горния пример полето съдържа просто името на
потребителя.
Директорията, в която попада
потребителя след log-ването си към системата
обикновено е неговата home директория. Нормално е
всеки потребител да има такава директория. В
горния пример можете да видите, че потребителят
yovko има home директория /home/yovko, a home директорията на
root е /root.
Обикновено потребителя има пълни
права в home директорията, но това съвсем не е
задължително. Може да му бъде отнета
собствеността върху някои файлове - това е
класически подход за ограничаване на правата на
даден потребител, например с отнемането на
собствеността и правото да редактира profile файла
си, който се изпълнява след логическо включване
към системата.
Тази команда се изпълнява веднага
след като потребителя се включи към системата. В
общия случай това е команда, която стартира
някакъв 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:списък_потребители
GID е уникалният групов идентификатор.
Списъкът на потребителите съдържа
потребителските имена на потребителите, които
принадлежат към групата.
Всяка Linux система има няколко
системни групи - такива са bin, mail, uucp, sys и др. Не е
добра идея да имате потребители от тези групи тъй
като това означава да им дадете големи
привилегии.
Добавянето на група е аналогично на
добавянето на потребители. Само, че не всички Linux
системи имат скриптове addgroup или groupadd и трябва да
редактирате /etc/group сами.
Понякога се налага да изпълните
някоя команда като друг потребител. Например ако
сте администратор, а искате да създадете файл с
правата на suncho, например. Или пък ако сте
обикновен потребител и искате за малко да
станете root. Разбира се едното решение е да
напуснете системата и след това да се включите
като другия, но има и алтернатива на този подход и
тя е командата su.
Например ако искате да станете root
достатъчно е да напишете:
su root
Разбира се, че ще трябва да въведете и
паролата на root. Въведете командата su без
аргумента root системата счита, че искате да
станете root, така че можете да не уточнявате
потребителско име ако ставате root.
Ако обаче сте обикновен потребител или
root и искате да станете yovko задължително трябва да
уточните това с командата:
su yovko
Разликата е, че Linux няма да пита за
паролата на yovko ако сте root. Нали ви казах, че root
може всичко.
За да станете пак такъв какъвто сте
бил напишете exit или натиснете Ctrl+D.