Введение
sudo это сокращение от английского
Что по-русски звучит как
sudo является программой для системного администрирования UNIX-систем, позволяющая делегировать те или иные привилегированные ресурсы
пользователям с ведением протокола работы.
Основная идея — дать пользователям как можно меньше прав, при этом достаточных для решения поставленных задач.
Программа поставляется для большинства UNIX и UNIX-подобных операционных систем.
Команда sudo предоставляет возможность пользователям выполнять команды от имени суперпользователя root либо других пользователей.
Правила, используемые sudo для принятия решения о предоставлении доступа, находятся в файле
/etc/sudoers
(для редактирования файла можно использовать специальный редактор visudo,
запускаемый из командной строки без параметров, в том числе без указания пути к файлу); язык их написания и примеры использования подробно изложены в
man sudoers(5).
В большинстве случаев грамотная настройка sudo делает небезопасную работу от имени суперпользователя ненужной.
Все действия оказываются выполнимы из-под аккаунта пользователя, которому разрешено использовать sudo без ограничений.
Имеется возможность запрещать и разрешать определённым пользователям или группам выполнение конкретного набора программ, а также разрешить выполнение
определённых программ без необходимости ввода своего пароля.
Введение
Я постоянно читаю кучу статей на тему настройки linux серверов как в русскоязычном интернете, так и англоязычном. В статьях обычно в равной мере встречаются команды с sudo и без. Для тех, кто не знает, что это такое и о чем идет речь, кратко поясню.
С помощью sudo можно авторизовываться на сервере под обычным пользователем и выполнять команды с правами root, просто введя его пароль. То есть вы запускаете одну конкретную команду с правами root. Например, вот так в debian или ubuntu:
# sudo apt-get update
Или так в centos:
# sudo yum update
Дальше вводите пароль root и команда начинает исполняться.
8 ответов
Лучший ответ
: выполняет вход с моим именем пользователя по умолчанию
: выполняет вход как пользователь postgres
Судо мне не нужен.
Я использую Postgres.app для своей базы данных postgres в OS X. Это устранило головную боль, связанную с проверкой работоспособности установки и правильного запуска сервера базы данных. Проверьте это здесь: http://postgresapp.com
Изменить: Благодарим @Erwin Brandstetter за исправление моего использования аргументов.
danielM
13 Июн 2015 в 14:41
Решение простое: войти как root и после:
el fuser
8 Ноя 2016 в 11:04
Для меня это было решение в macOS. Переустановите psql.
Запустить сервер PostgreSQL
Инициализировать БД
Если эта команда выдает ошибку, удалите старый файл базы данных и повторно запустите указанную выше команду.
Создать новую базу данных
Вы войдете в эту базу данных и сможете создать здесь пользователя для входа в систему.
2
Adnan Fayaz
29 Мар 2020 в 17:49
Я получаю точно такие же ошибки, что и крыша, с и . Ответ DanielM также дает ошибки.
Выходы при неправильных настройках
Ответьте, однако, на комментарий przbabu.
Я думаю, что часть этой проблемы может быть в настройках владельца в OSX
Но выполнение дает .
Короче говоря, это не решение проблемы. Используйте инструменты, предоставляемые установкой postgres, для создания пользователя и базы данных.
Чтобы получить правильные настройки и выходы
После установки postgres есть специальные команды для добавления нового пользователя в систему базы данных. После initdb запустите следующее, как описано здесь
Чтобы не запрашивать пароль постоянно, у вас есть три варианта, как описано здесь.
4
5 revs
13 Апр 2017 в 12:42
Работал нормально для меня в случае имени базы данных: postgres и имени пользователя: postgres. Таким образом, вам не нужно писать sudo.
А в случае другого db вы можете попробовать
Как указано в справке Postgres:
4
cloudberry
16 Апр 2014 в 12:58
Обсуждение и ответ здесь были мне очень полезны:
4
Community
23 Май 2017 в 10:31
OS X имеет тенденцию добавлять к именам системных учетных записей префикс «_»; вы не говорите, какую версию OS X вы используете, но, по крайней мере, в 10.8 и 10.9 пользователь _postgres существует при установке по умолчанию
Обратите внимание, что вы не сможете использовать в этой учетной записи (кроме как root), поскольку у нее нет пароля. С другой стороны, должно работать нормально
18
Gordon Davisson
15 Янв 2014 в 02:56
К , когда вы не установили параметры для имени базы данных (без параметра ), это будет ваше имя пользователя, если вы не сделали , имя пользователя базы данных будет вашим имя пользователя тоже и т. д.
Но с помощью команды (для создания первой базы данных) у нее нет вашего имени пользователя в качестве имени базы данных. У него есть база данных под названием . Первая база данных всегда создается командой initdb, когда область хранения данных инициализируется. Эта база данных называется postgres.
Поэтому, если у вас нет другой базы данных с именем вашего пользователя, вам нужно выполнить , чтобы команда psql заработала. И, кажется, по умолчанию предоставляется опция , тоже работает.
Если вы создали другую базу данных, имена которой совпадают с вашим именем пользователя (это должно быть сделано с помощью ), вы можете использовать только команду . И, похоже, первое имя пользователя базы данных устанавливается как имя пользователя вашей машины по brew.
Или же,
Будет работать по умолчанию.
27
kangkyu
18 Сен 2015 в 20:47
6.5 Конфигурация
Создайте каталог для хранения файлов базы данных, каталогов журналов и измените разрешения
Измените PGDATA и PGLOG в файле конфигурации базы данных postgresql (/etc/rc.d/init.d/postgresql-10) в каталог, созданный нами самими.
После сохранения продолжайте запрашивать место хранения файла initdb:
моя:
Укажите место хранения базы данных и метод кодирования и инициализируйте базу данных:
Моя ошибка:
Примечание. Приведенная выше ошибка указывает на то, что Postgresql не может быть инициализирован как root и должен быть запущен как пользователь postgres, поэтому пользователь linux postgres и группа postgres должны быть созданы выше.
Переключить пользователя postgres для выполнения начальной операции с базой данных
Запросить содержимое каталога после успешной инициализации базы данных
Отредактируйте файл postgresql.conf и измените адрес прослушивания и параметры порта, которые база данных получает по умолчанию:
моя:
Измените значение listen_addresses:
Затем продолжайте изменять файл pg_hba.conf, чтобы сообщить серверу базы данных, каким типам клиентов он позволит подключаться к себе:
Добавьте строку под строкой 86, чтобы любой клиент мог получить доступ к себе с правильным именем пользователя и паролем:
Примечания: Чтобы установить доверие, вы можете использовать psql -U postgres для прямого входа на сервер; чтобы установить одноранговый узел, вы можете использовать psql -h 127.0.0.1 -d postgres -U postgres для прямого входа на сервер;
Установка PostgreSQL на Linux (Mint)
Для подключения к базе данных PostgreSQL понадобится установленный PostgreSQL клиент:
sudo apt install postgresql-client-<VERSION>
Например:
sudo apt install postgresql-client-12
Для установки PostgreSQL сервера:
sudo apt install postgresql
Проверим, можем ли мы подключиться к базе данных PostgreSQL:
sudo -u postgres psql -c "SELECT version();"
Вывод команды должен быть примерно таким:
$ sudo -u postgres psql -c "SELECT version();" version ---------------------------------------------------------------------------------------------------------------------------------------- PostgreSQL 10.10 (Ubuntu 10.10-0ubuntu0.18.04.1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 7.4.0-1ubuntu1~18.04.1) 7.4.0, 64-bit (1 row)
Изменение таблицы
Когда нужно обновить название столбца таблицы используем команду ALTER
Предположим полю website_url не хватает 50 символов. Увеличим длину до 60.
ALTER TABLE booking_sites ALTER column website_url TYPE VARCHAR(60);
Проверим изменилась ли таблица
\d booking_sites
Table «public.booking_sites»
Column | Type | Collation | Nullable | Default
—————-+————————+————+———-+——————————————-
id | bigint | | not null | nextval(‘booking_sites_id_seq’::regclass)
company_name | character varying(50) | | not null |
origin_country | character varying(50) | | not null |
age | character varying(3) | | not null |
date_of_birth | date | | not null |
website_url | character varying(60) | | |
Indexes:
«booking_sites_pkey» PRIMARY KEY, btree (id)
recovery.conf
Теперь на слейве нужно отредактировать файл
recovery.conf
Возможно обазец лежит в директории share тогда его можно скопировать оттуда
cp /usr/pgsql/share/recovery.conf.sample /var/lib/pgsql/data/recovery.conf
Если его нет — нужно создать его в той же диретории где лежит
postgresql.conf
В данном примере это
Создать файл можно командой
touch recovery.conf
vi /var/lib/pgsql/data/recovery.conf
standby_mode = on
primary_conninfo = ‘host=192.168.56.110 port=5432′
Обновите разрешения доступа и запустите сервер
chown postgres.postgres /var/lib/pgsql/data/recovery.conf
systemctl start postgresql
ERROR: date/time field value out of range
Если вы пытаетесь прочитать из .csv файла, а получаете
ERROR: date/time field value out of range: «» HINT: Perhaps you need a different «datestyle» setting. CONTEXT: «» SQL state: 22008
Скорее всего ваш текущий datestyle не совпадает с тем, который используется в .csv файле.
datestyle — это порядок записи даты. Может быть День — Месяц — Год (DDMMYYYY), Год — Месяц — День (YYYYMMDD) или,
например американский стиль Месяц — День — Год (MMDDYYYY)
Это всё актуально если тип столбца указан как дата date. Можно изменить тип на char тогда datestyle уже не нужно настраивать.
Стилей много и если они не совпадают — получается что месяц принимает значение больше 12.
Как вариант — можно перед выполнение скрипта временно изменить свой datestyle.
Например, если нужно импортировать данные из .csv с американским стилем — перед импортом добавьте
set datestyle to «US»;
Basic Server Setup
To start off, we need to set the password of the PostgreSQL user (role) called «postgres»; we will not be able to access the server externally otherwise. As the local “postgres” Linux user, we are allowed to connect and manipulate the server using the psql command.
In a terminal, type:
sudo -u postgres psql postgres
this connects as a role with same name as the local user, i.e. «postgres», to the database called «postgres» (1st argument to psql).
Set a password for the «postgres» database role using the command:
\password postgres
and give your password when prompted. The password text will be hidden from the console for security purposes.
Type Control+D or \q to exit the posgreSQL prompt.
To create the first database, which we will call «mydb», simply type:
sudo -u postgres createdb mydb
Install Server Instrumentation (for PgAdmin) for Postgresql 8.4 or 9.3
PgAdmin requires the installation of an add-on for full functionality. The «adminpack» addon, which it calls Server Instrumentation, is part of postgresql-contrib, so you must install that package if you haven’t already:
sudo apt-get install postgresql-contrib
Then to activate the extension, for «»Postgresql 8.4″», run the adminpack.sql script, simply type:
sudo -u postgres psql < /usr/share/postgresql/8.4/contrib/adminpack.sql
For «Postgresql 9.3″+ install the adminpack «extension» in the «postgres» database:
sudo -u postgres psql CREATE EXTENSION adminpack;
Добавление пользователей в файл Sudoers
Только пользователи с администраторскими аккаунтами могут использовать sudo в Ubuntu. Вы можете изменить тип аккаунта в настройках в разделе «User Accounts».
Акканту,созданному при установке системы, Ubuntu автоматически присваивает тип администратора.
Если вы используете другой дистрибутив linux, вы можете дать пользователю разрешение на применение sudo с помощью команды visudo, которая требует привилегий root (поэтому сначала выполните команду su, или используйте su -c).
Добавтьте в файл следующую строку, заменив «user» на требуемое имя пользователя:
user ALL=(ALL:ALL) ALL
Нажмите Ctrl-X и затем Y, чтобы сохранить файл. Вы можете также добавить пользователя в группу, определенную в файле. Пользователи, принадлежащие к группе, определенной в файле, автоматически получают привилегии sudo.
Графические версии Su
Linux также поддерживает графические версии su, которые запрашивают у вас пароль в графическом окружении. Например, с помощью приведенной ниже команды вы можете получить графический запрос пароля и запустить файловый менеджер Nautilus с привилегиями root. Нажмите Alt-F2, чтобы запустить команду в графическом диалоговом окне без терминала.
$ gksu nautilus
Команда gksu также имеет несколько тузов в рукаве. Она запоминает текущие настройки вашего рабочего стола, поэтому графические программы при их запуске от имени другого пользователя не будут выглядеть неожиданно. Такие программы, как gksu являются предпочтительным способом запуска графических программ с привилегиями root.
Gksu использует su или sudo, в зависимости от вашего дистрибутива.
Подключение к базе данных
1. По умолчанию (без дополнительных опций) Postgres пытается подключиться от имени текущего пользователя к одноименной базе. Поэтому, если имя пользователя Linux совпадает с именем роли, созданной в Postgres, а также с именем базы, достаточно выполнить:
psql
Например, если на сервере создан пользователь timeweb, а в Postgres — одноименная роль и база, подключиться можно с помощью данной команды:
После подключения можно выполнить команду \conninfo, чтобы посмотреть информацию о текущем соединении.
1.2. Если имя базы, к которой нужно подключиться, отличается, нужно указать его в команде:
psql -d имя_базы
2. Если имя роли не совпадает с именем пользователя Linux, необходимо указать дополнительные параметры в команде.
2.1. Если имя роли и имя базы совпадают, достаточно выполнить:
psql -U имя_роли -h localhost -W
Как видно из вывода \conninfo, мы подключены к базе tmweb от одноименной роли.
2.2. Если имя роли и базы отличаются, базу также нужно указать в команде:
psql -U имя_роли -d имя_базы -h localhost -W
3. Если вы подключаетесь к другой базе данных уже в консоли Postgres, используйте:
\c имя_базы
Установка PostgreSQL в Ubuntu
PostgreSQL доступен в репозиториях Ubuntu по умолчанию. Просто используйте команду apt для установки PostgreSQL. Наиболее распространенными установленными пакетами являются PostgreSQL server, client, pgadmin, а также библиотеки.
Для установки конкретной версии вы можете использовать PostgreSQL Apt repository.
Чтобы установка PostgreSQL Ubuntu прошла гладко, выполните следующие действия.
Во-первых, убедитесь, что ваша система находится в актуальном состоянии, выполнив следующую команду.
Установите пакет Postgres, а затем пакет — contrib, он добавит дополнительные утилиты и функциональные возможности.
После завершения установки PostgreSQL запустите службу PostgreSQL. Это можно сделать командой которая написана ниже.
Также включите автоматический запуск службы PostgreSQL при загрузке системы. Делается это командой.
Запуск и включение службы postgres
После установки вы можете проверить состояние PostgreSQL, выполнив следующую команду.
Статус службы Postgres
По умолчанию пользователь Postgres создается во время установки. Чтобы получить доступ к оболочке Postgres, сначала переключитесь на пользователя Postgres.
Теперь введите команду psql,
Выполнение команд в оболочке Postgres
Для проверки версии PostgreSQL выполните следующую команду:
или
Создание роли в PostgreSQL
Для авторизации и аутентификации Postgres использует понятие “роли”. Которое в некоторых отношениях похоже на учетные записи Unix. Во время установки Postgres настраивается таким образом, чтобы использовать аутентификацию ident. Идентификация Ident связывает роль Postgres с соответствующими системными учетными записями Linux / Unix. Только суперпользователи и юзеры с ролью «CREATEROLE” отвечают за создание новых ролей.
Чтобы создать новую роль например с именем john, введите следующую команду в оболочке PostgreSQL.
Создание базы данных в PostgreSQL
Для создания новой базы данных требуется программа PostgreSQL database shell (psql). Войдите в оболочку psql и введите следующую команду, чтобы создать пользователя и установить пароль. Здесь я собираюсь создать имя пользователя jacky с паролем mystrongpassword. Вы можете создать свой собственный.
Создайте базу данных (например, gallary), используя следующую команду,
Предоставьте доступ к БД которую только что создали.. Здесь я собираюсь предоставить все права на базу данных gallery, чтобы пользователь jacky мог в ней работать.
Чтобы выйти из оболочки PostgreSQL требуется ввести команду q и нажать enter.
Создание пользователя и базы данных
Включение удаленного доступа к PostgreSQL
По умолчанию PostgreSQL слушает на интерфейсе 127.0.0.1. Если вы хотите получить доступ к базе данных из другого места. Тогда вам требуется настроить PostgreSQL для прослушки различных сетевых интерфейсов. Чтобы настроить PostgreSQL для различных интерфейсов, откройте конфигурационный файл PostgreSQL с помощью nano или другим текстовым редактором. Я буду использовать редактор Vim.
В конфигурационном файле найдите запись listen_addresses, находится она в «Connection Settings». Раскомментируйте строку и измените localhost на ‘*’. Это даст команду PostgreSQL прослушивать все сетевые интерфейсы для входящих подключений.
Включение удаленного подключения в postgres
Сохраните свою конфигурацию и перезапустите сервер PostgreSQL, чтобы изменения отразились в БД.
Теперь можно проверить прослушивает ли PostgreSQL другой интерфейс. Для этого выполните следующую команду.
Состояние прослушивания порта Postgres
Если вы включили брандмауэр UFW на сервере, тогда вам необходимо открыть порт 5432 для входящих TCP — соединений. Чтоб сделать это выполните команду.
Также проверьте правило брандмауэра UFW, делается это командой.
Конфигурация Postgres ufw
Заключение
В этом руководстве вы узнали, как установить сервер PostgreSQL на Ubuntu 20.04. Кроме того, вы также узнали, как привязать PostgreSQL к различным сетевым интерфейсам, чтобы принимать соединения от удаленного клиента.
Запуск графических программ с правами администратора
Для запуска графических программ с правами администратора можно воспользоваться диалогом запуска программ, вызываемым по умолчанию сочетанием клавиш Alt+F2.
Допустим, нам необходимо запустить файловый менеджер Nautilus с правами администратора, чтобы через графический интерфейс как-то изменить содержимое системных папок. Для этого необходимо ввести в диалог запуска приложений команду
gksudo nautilus
Вместо можно подставить , кроме того, пользователи KDE должны вместо писать . У вас попросят ввести свой пароль, и, если вы обладаете нужными правами, Nautilus запуститься от имени администратора. Запуск любого графического ПО можно производить с правами администратора, просто написав в диалоге запуска
gksudo <имя_команды>
Будьте предельно внимательны при работе в приложениях, запущенных с правами администратора. Вы безо всяких предупреждений со стороны системы сможете выполнить любую операцию, в частности, удалить системные файлы, сделав при этом систему неработоспособной.
Using pgAdmin III GUI
To get an idea of what PostgreSQL can do, you may start by firing up a graphical client. In a terminal type :
pgadmin3
You will be presented with the pgAdmin III interface. Click on the «Add a connection to a server» button (top left). In the new dialog, enter the address 127.0.0.1 (Local host is default, so it can be left out.), a description of the server, the default database («mydb» in the example above), your username («postgres») and your password. One more step is required in order to allow pgAdmin III to connect to the server, and that is to edit pg_hba.conf file and change the authentication method from peer to md5 (will not work if you have not set the password):
sudo nano /etc/postgresql/9.3/main/pg_hba.conf
and change the line
# Database administrative login by Unix domain socket local all postgres peer
to
# Database administrative login by Unix domain socket local all postgres md5
Now you should reload the server configuration changes and connect pgAdmin III to your PostgreSQL database server.
sudo /etc/init.d/postgresql reload
With this GUI you may start creating and managing databases, query the database, execute SQl etc.
Когда использовать sudo
Подозреваю, что сюда могут заглянуть какие-то продвинутые товарищи, чтобы сказать о том, что работа в консоли признак непрофессионализма. Все должно настраиваться с помощью ansible, chef, puppet и т.д. Прошу это не писать, статья не об этом, а такое мнение в определенных ситуациях может быть оправдано. Но я не претендую ни на какие лавры. Пишу о том, чем занимаюсь и что меня интересует.
Если подытожить сказанное, то sudo нужно в следующих случаях:
- К серверу подключаются разные администраторы. Нужно логировать их действия и разграничивать права доступа.
- Linux ваша рабочая системы, с помощью sudo вы запускаете редкие команды с полными правами.
- Sudo используется в скриптах для ограничения доступа. Абсолютно оправданное использование, сам так поступаю.
Если я единолично управляю сервером, подключаюсь для совершения административных действий, sudo считаю лишней сущностью и не использую его. Возможно я ошибаюсь и чего-то не понимаю. Жду ваших комментариев на эту тему. Как и когда вы используете sudo?
Онлайн курс по Linux
Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, рекомендую познакомиться с онлайн-курсом «Administrator Linux. Professional» в OTUS. Курс не для новичков, для поступления нужны базовые знания по сетям и установке Linux на виртуалку. Обучение длится 5 месяцев, после чего успешные выпускники курса смогут пройти собеседования у партнеров.
Что даст вам этот курс:
- Знание архитектуры Linux.
- Освоение современных методов и инструментов анализа и обработки данных.
- Умение подбирать конфигурацию под необходимые задачи, управлять процессами и обеспечивать безопасность системы.
- Владение основными рабочими инструментами системного администратора.
- Понимание особенностей развертывания, настройки и обслуживания сетей, построенных на базе Linux.
- Способность быстро решать возникающие проблемы и обеспечивать стабильную и бесперебойную работу системы.
Проверьте себя на вступительном тесте и смотрите подробнее программу по .
Решение проблем
Проблемы с TTY через SSH
По умолчанию SSH не выделяет tty при выполнении удалённой команды. Без tty sudo не может отключить отображение пароля при его вводе. Вы можете воспользоваться ssh опцией , чтобы заставить его выделять tty (или дважды).
опция всего лишь позволяет запускать sudo пользователям, если они имеют tty.
# Disable "ssh hostname sudo <cmd>", because it will show the password in clear text. You have to run "ssh -t hostname sudo <cmd>". # #Defaults requiretty
Показать привилегии пользователя
Вы можете узнать какими привилегиями обладает конкретный пользователь следующей командой:
$ sudo -lU имя_пользователя
Или узнать ваши собственные привилегии командой:
$ sudo -l
Matching Defaults entries for yourusename on this host: loglinelen=0, logfile=/var/log/sudo.log, log_year, syslog=auth, mailto=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 yourusename may run the following commands on this host: (ALL) ALL (ALL) NOPASSWD: /usr/bin/lsof, /bin/nice, /usr/bin/su, /usr/bin/locate, /usr/bin/find, /usr/bin/rsync, /usr/bin/strace, (ALL) /bin/kill, /usr/bin/nice, /usr/bin/ionice, /usr/bin/top, /usr/bin/killall, /usr/bin/ps, /usr/bin/pkill (ALL) /usr/bin/gparted, /usr/bin/pacman (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
Наложение umask
Sudo накладывает на значение umask пользователя свою собственную (которая по умолчанию установлена в 0022). Это предотвращает sudo от создания файлов с более либеральными правами доступа, чем это позволяет umask пользователя. Несмотря на то, что это разумное значение по умолчанию, если не используется измененная umask, это может привести к ситуации, когда программа, запущенная через sudo может создавать файлы с правами доступа отличными от тех, которые создаются при запуске программы непосредственно суперпользователем. Для исправления таких ошибок sudo предоставляет возможность исправить umask, даже если желаемая umask более либеральна, чем установлено в umask пользователя. Добавив такие строки (используйте ) вы измените поведение sudo по умолчанию:
Defaults umask = 0022 Defaults umask_override
Это установит sudo umask в umask суперпользователя по умолчанию (0022) и переопределит поведение по умолчанию, всегда используя указанную umask и независимо от umask пользователя.