Sudo (Српски)

From ArchWiki
Jump to: navigation, search

Sudo (su "do") дозвољава систем администратору да повери ауторитет одређеним корисницима (или групи корисника) да имају способност да покрећу неке (или све) команде као root или неки други корисник пружајући ревизорски траг за команде и њихове аргументе. [1]

Образложење

Sudo је безбедна алтернатива традиционалној su команди. Много пута корисник користи su да добије root привилегије. Генерално, сматра се да није паметно логовати се као root -- суперкорисник -- на дужи временски период. Root корисник ужива комплетну и апсолутну контролу над целим системом, али са великим ризиком! Једоноставне грешке у куцању могу лако да учине систем неупотребљивим, и било која апликација која се покреће као root дели овај неспутани приступ.

Sudo даје 'привремену' привилегију за једну команду (било као root или други корисник); враћајући непривилеговано стање после извршавања, и враћање система у безбедно стање од нежељених последица. Додатно, sudo чува све команде и неуспеле покушаје приступа.

Инсталација

Да би инсталирали sudo покрећемо команду:

# pacman -S sudo

Кориснику неће бити дозвољено да покреће sudo уколико није експлицитно дозвољено у /etc/sudoers фајлу. Погледај #Конфигурација за упутства.

Коришћење

Са инсталираним и конфигурисаним sudo, корисници могу да користе команде са префиксом sudo да покрећу ту команду са привилегијама суперкорисника (или других). На пример:

$ sudo pacman -Syu

Види sudo manual за више информација.

Конфигурација

Конфигурациони фајл за sudo је /etc/sudoers. Овај фајл се не треба директно едитовати! Корисници морају да покрену команду visudo као root, која отвара привремену копију конфигурационог фајла у $EDITOR и проверава синтаксу привремене копије пре чувања праве.

sudoers подразумеване дозволе над фајловима

Власник и група за sudoers фајл мора бити 0. Дозволе за фајлове морају бити подешене на 0440.

 chown -c root:root /etc/sudoers
 chmod -c 0440 /etc/sudoers

Коришћење visudo

Фајл sudoers се увек мора мењати visudo командом која закључава фајл и проверава граматичке грешке. Важно је да sudoers буде без синтаксних грешака пошто sudo неће радити са синтаксно погрешним sudoers фајлом.

Sudo пакет укључује бинарни visudo који је једини начин за мењање /etc/sudoers фајла.

visudo [-c] [-q] [-s] [-V] [-f sudoers]

Подразумевани едитор је vi. Ако је коршћење vi тешко, покрените ову команду прво:

# export EDITOR=nano

Или да visudo команда користи Ваш EDITOR, ромените EDITOR променљиву само за visudo команду са:

# EDITOR=nano visudo

Добар начин за мењање /etc/sudoers је коришћењем vim.

# EDITOR=vim visudo

Или промените за стално додавањем следећих линија у /etc/sudoers где је vim Ваш подразумевани едитор:

# Defaults specification
# Reset environment by default
Defaults      env_reset
# Set default EDITOR to vim, and do not allow visudo to use EDITOR/VISUAL.
Defaults      editor=/usr/bin/vim, !env_editor

Напомена је да команду visudo треба да покренете као root иако користите други едитор.

Кад се фајл сачува, visudo ће два пута проверити фајл због синтаксних грешака пре замењивања постојећег /etc/sudoers фајла. Ова сигурносна карактеристика постоји зато што ће sudo бити неупотребљив ако садржи грешке.

Да дозволите кориснику пуне root привилегије кад он/она извршава команду са "sudo", додајте следећу линију:

USER_NAME   ALL=(ALL) ALL

и/или да дозволите sudo кориснику приступ само са локалног рачунара:

USER_NAME   HOSTNAME=(ALL) ALL

и/или да дозволите члану group wheel sudo приступ који не захтева шифру:

%wheel      ALL=(ALL) NOPASSWD: ALL

где је USER_NAME корисничко име корисника.

Детаљни пример sudoers може се наћи на here. У супротном, види sudoers manual за детаљније информације.

Тајмаут кеш лозинке

Корисници можда желе да промене подразумевани тајмаут пре него што кеширана шифра истекне. То се постиже додавањем следећег у /etc/sudoers (visudo) на пример:

Defaults:USER_NAME timestamp_timeout=20

где шифра истиће за корисника USER_NAME ако се не користи више од 20 минута. Вредности између 0 and 1 су такође дозвољене.

Tip: Да омогућите да sudo увек тражи шифру, подесите тајмаут на нула.

Савети и трикови

Омогућити завршетак табом у bash-u

Таб, подразумевано, неће радити када корисник буде додат у sudoers фајл. На пример, обично john само мора да напише:

fire<TAB>

и shell ће завршити команду за њега као:

firefox

Ако је john додат у sudoers фајл и он укуца :

sudo fire<TAB>

shell неће ништа урадити.

Да омогућите завршавање табом са sudo, додајте следеће у Ваш ~/.bashrc:

complete -cf sudo

Поред тога, можете инсталирати и омогућити bash-completion да добијете паметније завршавање табом за команде као sudo, погледај bash#Auto-completion[broken link: invalid section] за више информација.

Онемогући per-terminal sudo

Warning: Ово ће дозволити свим процесима да користе Вашу sudo сесију

Ако Вам смета кад sudo захтева Вашу шифру сваки пут кад отворите нови терминал, онемогућите tty_tickets:

Defaults !tty_tickets

Променљиве околине (Застарело?)

Ако имате много променљивих околине, или извозите Ваша прокси подешавања преко export http_proxy="...", кад користите sudo ове променљиве неће пролазити на root налог уколико не покрећете sudo са -E опцијом.

$ sudo -E pacman -Syu

Због овога можете да додате псеудоним у ~/.bashrc:

alias sudo="sudo -E"

Други начин поправљања овога било би додавање у /etc/sudoers:

Defaults !env_reset

Ако желите да само прослеђује *_proxy променљиве, додајте следеће:

Defaults env_keep += "ftp_proxy http_proxy https_proxy no_proxy"

Додајте /sbin и /usr/sbin у root путању

Ако желите да поркећете административне команде (оне у /sbin или /usr/sbin) са sudo без корисшћења њихових пуних путања, додајте:

Defaults secure_path="/bin:/sbin:/usr/bin:/usr/sbin" 

у /etc/sudoers.

Ово Вам дозвољава да урадите:

$ sudo command

уместо:

$ sudo /sbin/command

или:

$ sudo /usr/sbin/command

Пренос псеудонима

Ако користите много псеудонима, можда сте приметили да се не преносе на root налог када се користи sudo. Ипак, постоји лак начин да их натерате да раде. Једноставно додајте следеће у Ваш ~/.bashrc или /etc/bash.bashrc:

alias sudo='sudo '

Увреде

Корисник може да конфигурише sudo да приказује паметне увреде кад је нетачна шифра унета уместо подразумеване "wrong password" поруке. Нађите Defaults линију у /etc/sudoers и додајте "insults" после запете на већ постојеће опције. Коначни резултат би требало да изгледа овако:

#Defaults specification
Defaults insults

За тестирање, укуцајте sudo -K за крај тренутне сесије и дозволите да sudo пита за шифру поново.

Root шифра

Корисници могу да конфигуришу sudo да пита за root шифру уместо корисникове шифре додавањем "rootpw" у Defaults линију у /etc/sudoers:

Defaults timestamp_timeout=0,rootpw

Онемогући root логин

Warning: Arch Linux није фино наштимован да ради са онемогућеним root налогом. Корисници могу да наиђу на проблеме са овом методом.

Са инсталираним и конфигурисаним sudo, корисници можда желе да онемогуће root логин. Без root, нападачи морају прво да погоде корисничко име конфигурисано као sudoer као и корисникову ширфу.

Warning: Уверите се да је корисник правилно конфигурисан као sudoer пре онемогућавања root налога!

Налог се може закључати преко passwd:

# passwd -l root

Слична команда откључава root.

$ sudo passwd -u root

Други начин је едитовање /etc/shadow и замена root шифре са "!":

root:!:12345::::::

Да опет омогућите root логин:

$ sudo passwd root

kdesu

kdesu може се користити под KDE окружењем за покретање GUI апликација са root привилегијама. Могуће је да ће подразумевани kdesu пробати да користи su иако је root налог онемогућен. Срећом kdesu се може подесити да користи sudo уместо su. Направите/измените фајл /usr/share/config/kdesurc:

[super-user-command]
super-user-command=sudo

Sudo отклањање грешака

SSH TTY проблеми

SSH не додељује tty по подразумеваној вредности када се покреће удаљена команда. Без tty, sudo не може да онемогући ехо кад тражи шифру. Може се користити ssh "-tt" опција да натера да додели tty. (користи -tt два пута).

The Defaults опција дозвољава корисницима да покрећу sudo ако имају tty

# Disable "ssh hostname sudo <cmd>", because it will show the password in clear. You have to run "ssh -t hostname sudo <cmd>".
#
#Defaults    requiretty

Приказивање корисничких привилегија

Можете сазнати које привилегије одређени корисник има коришћењем следеће команде:

 sudo -lU askapache

Или погледати своје са

 sudo -l
Matching Defaults entries for askapache on this host:
    loglinelen=0, logfile=/var/log/sudo.log, log_year, syslog=auth, mailto=sqpt.webmaster@gmail.com, mail_badpass, mail_no_user, mail_no_perms, env_reset, always_set_home, tty_tickets, lecture=always, pwfeedback, rootpw, set_home

User askapache may run the following commands on this host:
    (ALL) ALL, 
    (ALL) NOPASSWD: /usr/sbin/lsof, /bin/nice, /usr/sbin/ss, /usr/bin/su, /usr/bin/locate, /usr/bin/find, /usr/bin/rsync, /usr/bin/strace, 
    (ALL) /bin/nice, /bin/kill, /usr/bin/nice, /usr/bin/ionice, /usr/bin/top, /usr/bin/kill, /usr/bin/killall, /usr/bin/ps, /usr/bin/pkill, 
    (ALL) /usr/sbin/gparted, /usr/bin/pacman, /usr/bin/powerpill, 
    (ALL) /usr/local/bin/synergyc, /usr/local/bin/synergys, 
    (ALL) /usr/bin/vim, /usr/bin/nano, /usr/bin/cat
    (root) NOPASSWD: /usr/local/bin/synergyc

Sudoers пример

This is especially helpful for those using terminal multiplexers like screen, tmux, or ratpoison, and those using sudo from scripts/cronjobs.


Cmnd_Alias WHEELER = /usr/sbin/lsof, /bin/nice, /bin/ps, /usr/bin/top, /usr/local/bin/nano, /usr/sbin/ss, /usr/bin/locate, /usr/bin/find, /usr/bin/rsync
Cmnd_Alias PROCESSES = /bin/nice, /bin/kill, /usr/bin/nice, /usr/bin/ionice, /usr/bin/top, /usr/bin/kill, /usr/bin/killall, /usr/bin/ps, /usr/bin/pkill
Cmnd_Alias EDITS = /usr/bin/vim, /usr/bin/nano, /usr/bin/cat, /usr/bin/vi
Cmnd_Alias ARCHLINUX = /usr/sbin/gparted, /usr/bin/pacman, /usr/bin/powerpill

root ALL = (ALL) ALL
askapache ALL = (ALL) ALL, NOPASSWD: WHEELER, NOPASSWD: PROCESSES, NOPASSWD: ARCHLINUX, NOPASSWD: EDITS
 
Defaults !requiretty, !tty_tickets, !umask
Defaults visiblepw, path_info, insults, lecture=always
Defaults loglinelen = 0, logfile =/var/log/sudo.log, log_year, log_host, syslog=auth
Defaults mailto=webmaster@askapache.com, mail_badpass, mail_no_user, mail_no_perms
Defaults passwd_tries = 8, passwd_timeout = 1
Defaults env_reset, always_set_home, set_home, set_logname
Defaults !env_editor, editor="/usr/bin/vim:/usr/bin/vi:/usr/bin/nano"
Defaults timestamp_timeout=360
Defaults passprompt="Sudo invoked by [%u] on [%H] - Cmd run as %U - Password for user %p:"