Sudo (Српски)
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
и/или да дозволите члану user 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 су такође дозвољене.
Савети и трикови
Омогућити завршетак табом у bash-u
Таб, подразумевано, неће радити када корисник буде додат у sudoers фајл. На пример, обично john само мора да напише:
fire<TAB>
и shell ће завршити команду за њега као:
firefox
Ако је john додат у sudoers фајл и он укуца :
sudo fire<TAB>
shell неће ништа урадити.
Да омогућите завршавање табом са sudo, додајте следеће у Ваш ~/.bashrc
:
complete -cf sudo
Поред тога, можете инсталирати и омогућити bash-completion да добијете паметније завршавање табом за команде као sudo, погледај Bash#Tab completion за више информација.
Онемогући per-terminal 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 логин
Са инсталираним и конфигурисаним sudo, корисници можда желе да онемогуће root логин. Без root, нападачи морају прво да погоде корисничко име конфигурисано као sudoer као и корисникову ширфу.
Налог се може закључати преко 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:"