Вопрос или проблема
Недавно я перешел с Windows на Linux, более конкретно на Debian 12. Я немного борюсь, потому что здесь много нового, например, sudo. В любом случае, я стараюсь сделать так, чтобы мой обычный пользователь имел права sudo, чтобы облегчить разработку и не приходилось постоянно входить как суперпользователь.
Я использовал команду gpasswd -a user sami
, и она действительно добавила пользователя в группу sudo, если я использую groups sami
, мой пользователь отображается как sudo. Однако когда я пытаюсь использовать su sami
и ввожу свой пароль правильно, ничего не происходит и ошибок не выдается. Если я ввожу неправильный пароль, то получаю ошибку аутентификации. Как и предполагалось, если я использую apt update
без прав root, выдается ошибка “доступ запрещен”. Но самое странное, что если я напишу sudo apt install any_package_here
или sudo apt update
и введу свой пароль, пакет устанавливается или обновляется нормально. Может кто-нибудь мне помочь?
Пример из терминала.
sami@sami-debian:~$ su sami
Пароль:
sami@sami-debian:~$ # Я ввел правильный пароль
sami@sami-debian:~$ su sami
Пароль:
su: Ошибка аутентификации
sami@sami-debian:~$ # Я ввел неправильный пароль и получил ошибку аутентификации
sami@sami-debian:~$ apt update
Чтение списков пакетов... Готово
E: Не удалось открыть файл блокировки /var/lib/apt/lists/lock - open (13: Доступ запрещен)
E: Невозможно создать эксклюзивный доступ к каталогу /var/lib/apt/lists/
W: Проблема при удалении ссылки на файл /var/cache/apt/pkgcache.bin - RemoveCaches (13: Доступ запрещен)
W: Проблема при удалении ссылки на файл /var/cache/apt/srcpkgcache.bin - RemoveCaches (13: Доступ запрещен)
sami@sami-debian:~$ # Это на португальском, но в основном говорит, что доступ запрещен для всего
sami@sami-debian:~$ sudo apt install 7zip
Чтение списков пакетов... Готово
Строим дерево зависимостей... Готово
Чтение информации о состоянии... Готово
Следующие пакеты были установлены автоматически и уже не нужны:
libdaxctl1 libndctl6 libpmem1 liburing2
Используйте 'sudo apt autoremove', чтобы удалить их.
Новые пакеты, которые будут установлены:
7zip
0 пакетов обновлено, 1 новый пакет установлен, 0 будет удалено и 0 не обновлено.
Необходимо загрузить 0 B/976 kB файлов.
После этой операции будет использовано дополнительно 2.662 kB дискового пространства.
Выбор пакета 7zip, который не был выбран раньше.
(Чтение базы данных ... 195927 файлов и директорий установлено в настоящее время.)
Подготовка к распаковке .../7zip_22.01+dfsg-8_amd64.deb ...
Распаковка 7zip (22.01+dfsg-8) ...
Настройка 7zip (22.01+dfsg-8) ...
Обработка 'триггеров' для man-db (2.11.2-2) ...
sami@sami-debian:~$ # Не потребовался пароль, и пакет был установлен корректно
sami@sami-debian:~$ su
Пароль:
root@sami-debian:~$ # Я ввел правильный пароль для пользователя root, и все сработало как ожидалось
sami@sami-debian:~$ sudo apt update
[sudo] пароль для sami:
Получено:1 http://deb.debian.org/debian bookworm InRelease
Получено:2 http://security.debian.org/debian-security bookworm-security InRelease
Получено:3 http://repo.mysql.com/apt/debian bookworm InRelease
Получено:4 http://deb.debian.org/debian bookworm-updates InRelease
Получено:5 https://packages.microsoft.com/debian/12/prod bookworm InRelease
Получено:6 https://packages.microsoft.com/repos/code stable InRelease
Чтение списков пакетов... Готово
Строим дерево зависимостей... Готово
Чтение информации о состоянии... Готово
Все пакеты обновлены.
sami@sami-debian:~$ # Я ввел правильный пароль
Я использую KDE Plasma
Я надеялся, что если я введу терминал, я смогу выполнять команды как суперпользователь, но это не позволяет. Без этого, мне приходится постоянно входить как root, чтобы выполнять любую минимальную операцию, например, менять ветки на github. Я хотел бы облегчить себе работу.
Я только что сделал git clone и когда попробовал изменить ветки, то сказали, что у меня нет прав на изменение чего-то вроде index.lock. Поэтому мне каждый раз, когда я работаю в терминале, нужно использовать сначала sudo? Я не тестировал с использованием sudo git checkout branch. Мне стоит это сделать?
sudo
и su
работают как ожидалось в примерах вашего вопроса.
Когда вы уже вошли в систему как пользователь sami
, команда su sami
не будет иметь видимого эффекта, кроме запроса пароля, после чего придется ввести exit
, чтобы вернуться в предыдущую оболочку. Команда su sami
фактически запускает оболочку от имени пользователя sami
. Это почти то же самое, что запускать $SHELL
. (Эффекты su sami
также видны, например, в $SHLVL
и history
, но я не хочу углубляться в детали, так как это не является основной темой вопроса.)
Вы можете использовать su
и ввести пароль root
, чтобы стать root
, если ваша система настроена на это разрешение. (не рекомендуется)
Требование вводить ваш пароль при первом вызове sudo some_command
нормально, и оно запросит его снова через некоторое время. (sudo
можно настроить так, чтобы команды выполнялись без пароля.)
Умеренность в выполнении команд только от имени root
действительно требует, чтобы вы вводили sudo some_command
. Выполнение всех команд от имени root
возможно, но не рекомендуется, так как легко допустить ошибки, которые могут сделать вашу систему неработоспособной, например, случайно удалив важные системные файлы.
Я не понимаю, почему вам нужно стать root
для “изменения веток на github”. Это ненормально.
Ранее вы выполняли команды git
как root
, а не как обычный пользователь? Или вы клонировали свой репозиторий в местоположение вне вашего домашнего каталога?
Пожалуйста, добавьте детали к своему вопросу, если хотите получить помощь по этой теме.
Я нашел ‘ошибку’. Я создал директорию через командную строку как root. Я использовал ls -l, чтобы увидеть права доступа и, как и ожидалось, у моего обычного пользователя, sami, были только права на выполнение и чтение, но не права на запись. Это имеет смысл, так как я создал как root, я не могу выполнять такие операции, как git checkout, с этими файлами. Извините за потраченное время. Linux для меня совершенно новый.
Ответ или решение
Ваш вопрос касается работы с sudo
и su
в Debian 12. Я постараюсь объяснить ситуацию и помочь вам разобраться с возникшими трудностями.
Использование su
и sudo
-
Команда
su
:
Командаsu
(от "substitute user") позволяет вам переключаться на другого пользователя. Если вы используете командуsu sami
, находясь уже под пользователемsami
, это не приведёт к заметным изменениям, поскольку вы останетесь под тем же пользователем. Команда только запросит ввод пароля. Чтобы стать пользователемroot
, вам нужно ввестиsu
(без имени пользователя) и парольroot
. Это позволяет вам работать с правами суперпользователя, но это не всегда рекомендуется из соображений безопасности. -
Команда
sudo
:
sudo
(от "superuser do") позволяет исполнять команды с правами суперпользователя без необходимости полного переключения наroot
. Когда вы используетеsudo
, вам потребуется ввести пароль вашего обычного пользователя, но не пароляroot
, что обеспечивает дополнительный уровень безопасности. Сначала вводитеsudo
, а затем команду, например,sudo apt update
. Это поведение является нормальным.
Причины ваших проблем
Теперь, что касается вашей ситуации:
-
Имя пользователя и доступ: Похоже, вы пытались выполнять команды в каталогах, для которых у вашего пользователя
sami
недостаточно прав (например, директории, созданные с правамиroot
). Это объясняет, почему вы получаете ошибки "permission denied" при выполнении команд безsudo
. -
Проблемы с Git: Вы упомянули, что при работе с Git не можете выполнять операции, такие как
git checkout
, поскольку не имеете прав на запись. Это связано с тем, что каталоги и файлы, созданные подroot
, у вашего пользователя могут иметь только права на чтение и выполнение. Для исправления этой проблемы, вам нужно изменить права доступа к директории, где находится ваш репозиторий. Вы можете использовать командуchown
для изменения владельца директории:sudo chown -R sami:sami /путь/к/вашему/репозиторию
Это даст вашему пользователю
sami
полные права (чтение, запись и выполнение) на данный репозиторий.
Рекомендации
-
Используйте
sudo
для команд, требующих прав администратора. Это лучший подход для обеспечения безопасности вашей системы. -
Изменяйте права доступа к файлам и директориям в соответствии с вашим пользователем, особенно если вы создаете их под
root
. В противном случае, вы столкнетесь с проблемами при попытке изменений. -
Изучайте Linux: Поскольку вы только начинаете, настоятельно рекомендую освежить свои знания о Unix/Linux системах, о работе с правами доступа, пользователями и группами. Это поможет вам более эффективно работать в новой среде.
Если у вас возникнут дополнительные вопросы или трудности, не стесняйтесь обращаться за помощью!