LINUX.ORG.RU

Подсветка файлов в выводе ls

 , ,


0

2

Вопрс ламерский, но тут такое дело.
При просмотре каталога командой ls каталоги подсвечиваются синим, а если делаю «sudo ls» - не подсвечиваются. В чём дело?
Вот содержимое моего /etc/sudoers

# sudoers file.
# This file MUST be edited with the 'visudo' command as root.
# See the sudoers man page for the details on how to write a sudoers file.

# Defaults specification
Defaults env_reset
Defaults insults
Defaults env_keep+="LANG LC_* LS_*"
Defaults env_keep+="HOME PATH"
Defaults env_keep+="DISPLAY XAUTHORITY"
Defaults editor="/usr/bin/vim"

# Host alias specification

# User alias specification
User_Alias WHEEL_USERS=%wheel

# Cmnd alias specification
Cmnd_Alias TURN=/bin/mount,/bin/umount,/bin/dmesg,/bin/kill,/usr/bin/kill,/bin/killall,/usr/bin/killall,/bin/ps,/usr/bin/ps,/usr/bin/lsof,/usr/bin/top,/bin/chroot,/usr/bin/setconsolefont,/usr/bin/date,/usr/bin/crontab,/usr/bin/nmap,/usr/bin/Xorg,/usr/bin/nvidia-xconfig,/usr/bin/aticonfig,/usr/bin/mkfontdir,/usr/bin/hp-setup
Cmnd_Alias STURN=/usr/sbin/visudo,/sbin/mkinitrd,/sbin/fdisk,/sbin/mke2fs,/sbin/mkfs.fat,/sbin/udevadm,/sbin/modprobe,/sbin/depmod,/sbin/sysctl,/sbin/lspci,/usr/sbin/timeconfig,/usr/sbin/ntpdate,/usr/sbin/alsactl,/sbin/losetup,/usr/sbin/partprobe,/sbin/dump,/sbin/restore,/usr/sbin/make-initrd
Cmnd_Alias FILE=/bin/cat,/bin/touch,/bin/cp,/bin/mv,/bin/rm,/bin/ls,/bin/ln,/bin/mkdir,/bin/rmdir,/bin/chown,/bin/chmod,/bin/grep,/usr/bin/find,/usr/bin/which,/bin/dd,/bin/du,/bin/df,/bin/tar,/usr/bin/vi,/usr/bin/vim,/usr/bin/view
Cmnd_Alias USERS=/usr/sbin/useradd,/usr/sbin/userdel,/usr/sbin/usermod,/usr/sbin/groupadd,/usr/sbin/groupdel,/usr/sbin/groupmod,/usr/sbin/adduser,/usr/sbin/passwd
Cmnd_Alias NET=/sbin/mii-tool,/sbin/ifconfig,/sbin/route,/sbin/dhcpcd,/sbin/arp,/usr/bin/arp-scan,/bin/ping,/bin/netstat,/usr/sbin/iptables,/sbin/iptables,/sbin/iptables-save,/sbin/iptables-restore,/sbin/iwconfig,/sbin/iwlist,/usr/bin/nmcli
Cmnd_Alias PACKAGES=/sbin/installpkg,/sbin/removepkg,/sbin/upgradepkg,/usr/sbin/slackpkg,/usr/sbin/slapt-get,/usr/sbin/sbopkg,/usr/bin/apt-get,/usr/bin/apt-cache
Cmnd_Alias DAEMONS=/bin/systemctl,/bin/journalctl,/etc/rc.d/rc.wicd,/etc/rc.d/rc.ntpd,/usr/bin/pdbedit,/usr/bin/smbpasswd,/usr/bin/smbcontrol,/usr/sbin/noip,/sbin/service,/sbin/chkconfig,/usr/sbin/named-checkconf,/usr/bin/ssh-keygen
Cmnd_Alias SCRIPTS=/srv/adminfiles/scripts/sbackup.sh
Cmnd_Alias POWER=/sbin/poweroff,/sbin/reboot

# User privilege specification
WHEEL_USERS  ALL=(root)  TURN,STURN,FILE,USERS,NET,PACKAGES,DAEMONS,SCRIPTS,POWER
Подсветка файлов в выводе ls вроде зависит оп переменной LS_COLORS, а опция Defaults env_keep+=«LANG LC_* LS_*» должна передавать эту переменную в сеанс sudo, нет?

★★★★★

Выполни sudo env и посмотри какие переменные чему равны

imul ★★★★★
()
Ответ на: комментарий от sunny1983

скорее всего у тебя где то в .bashrc или .bash_profile прописан алиас, а sudo спросто сбрасывает эти переменные окружения

JB ★★★★★
()
Ответ на: комментарий от JB

И правда, в /etc/bashrc.d/alias прописано:

case "$TERM" in
       *emacs*)
               # Do not quote file names.
               alias ls='ls -N'
               ;;
       *)
               # Only use color if standard output is a terminal.
               alias ls='ls --color=auto'
               ;;
esac
Закоментировал эту конструкции и подсветка изчезла везде. А как тогда включить подсветку в сеансе sudo?

sunny1983 ★★★★★
() автор топика
Ответ на: комментарий от sunny1983

используйте, если возможно, глобальный alias:

alias -g ls=«ls --color=auto»

arto ★★
()
Ответ на: комментарий от entefeed

alias sudo='sudo '

Я даже сначала не поверил, пошёл проверять, но это действительно работает. Никогда бы в голову не пришло, что там есть такое правило:

man bash

If the last character of the alias value is a blank, then the next command word following the alias is also checked for alias expansion.
gentoo_root ★★★★★
()
Ответ на: комментарий от gentoo_root

А я этим себе никаких проблем с безопасностью не создам? Спрашиваю потому, что всё-таки не до конца знаю шелл. Не просто так же изначально придумали всё окружение в сеанс sudo не передавать. И почему без алиаса подсветка не работает? Она же может включаться двумя способами, параметром --color и переменной LS_COLORS. Даже если параметра нет, переменная всё равно остаётся.

sunny1983 ★★★★★
() автор топика
Ответ на: комментарий от sunny1983

А я этим себе никаких проблем с безопасностью не создам? Спрашиваю потому, что всё-таки не до конца знаю шелл. Не просто так же изначально придумали всё окружение в сеанс sudo не передавать.

Алиас — не часть окружения, это фича шелла. Bash просто по дефолту раскрывает только первое слово в команде, а если сделать alias sudo='sudo ', то будет раскрывать и второе, следующее после sudo.

Насчёт безопасности — с алиасами нужно быть не менее осторожным, чем с переменными окружения. Если бы все переменные пробрасывались, то можно было бы скомпрометировать рута таким образом, например: сомнительная программа, запущенная от пользователя, любым образом устанавливает переменную LD_PRELOAD в шелле пользователя (да хотя бы даже в .bashrc дописывает), после чего пользователь вводит sudo, вредоносная so-шка обнаруживает, что загружена в программу, запущенную от рута, и делает своё грязное дело. Если такой сценарий возможен, то возможен и аналогичный с использованием alias: сомнительная программа устанавливает alias ls="$HOME/.mal-ls.sh", а скрипт .mal-ls.sh проверяет в начале, не от рута ли он запущен, а потом делает своё грязное дело, в конце вызывая настоящий ls. И если от первого сценария нас спасает sudo (в SUID-программу не подгружается либа из LD_PRELOAD, а потом sudo ощищает окружение), то от второго сценария sudo нас не спасёт, потому что он будет думать, что пользователь хочет запустить .mal-ls.sh, а не ls.

Однако я считаю, что поводов бояться второго сценария нет, поскольку если сомнительная программа добралась до редактирования алиасов, то проще уже просто поставить alias sudo="$HOME/.mal-sudo" и стырить пароль.

Она же может включаться двумя способами, параметром --color и переменной LS_COLORS.

man ls

Using color to distinguish file types is disabled both by  default  and
with  --color=never.  With --color=auto, ls emits color codes only when
standard output is connected to a terminal.  The LS_COLORS  environment
variable can change the settings.  Use the dircolors command to set it.

Т.е. включается она только параметром, а переменная позволяет менять настройки подсветки.

gentoo_root ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.