Добавление пользователя ubuntu. Управление пользователями. Резервное копирование данных пользователя

Поскольку Linux — система многопользовательская, вопрос об организации разграничения доступа к файлам и каталогам является одним из существенных вопросов, которые должна решать операционная система. Механизмы разграничения доступа, разработанные для системы UNIX в 70-х годах (возможно, впрочем, они предлагались кем-то и раньше), очень просты, но они оказались настолько эффективными, что просуществовали уже более 30 лет и по сей день успешно выполняют стоящие перед ними задачи.

В основе механизмов разграничения доступа лежат имена пользователей и имена групп пользователей. Вы уже знаете, что в Linux каждый пользователь имеет уникальное имя, под которым он входит в систему (логируется). Кроме того, в системе создается некоторое число групп пользователей, причем каждый пользователь может быть включен в одну или несколько групп. Создает и удаляет группы суперпользователь, он же может изменять состав участников той или иной группы. Члены разных групп могут иметь разные права по доступу к файлам, например, группа администраторов может иметь больше прав, чем группа программистов.

В индексном дескрипторе каждого файла записаны имя так называемого владельца файла и группы, которая имеет права на этот файл. Первоначально, при создании файла его владельцем объявляется тот пользователь, который этот файл создал. Точнее — тот пользователь, от чьего имени запущен процесс, создающий файл. Группа тоже назначается при создании файла — по идентификатору группы процесса, создающего файл. Владельца и группу файла можно поменять в ходе дальнейшей работы с помощью команд chown и chgrp (подробнее о них будет сказано чуть позже).

Теперь давайте еще раз выполним команду ls -l . Но зададим ей в качестве дополнительного параметра имя конкретного файла, например, файла, задающего саму команду ls . (Обратите, кстати, внимание на эту возможность команды ls -l — получить информацию о конкретном файле, а не о всех файлах каталога сразу).

$ ls -l /bin/ls

Вы видите, что в данном случае владельцем файла является пользователь root и группа root. Но нас сейчас в выводе этой команды больше интересует первое поле, определяющее тип файла и права доступа к файлу. Это поле в приведенном примере представлено цепочкой символов -rwxr-xr-x . Эти символы можно условно разделить на 4 группы.

Первая группа, состоящая из единственного символа, определяет тип файла. Этот символ в соответствии с возможными типами файлов, рассмотренными в предыдущем разделе, может принимать такие значения:

    - = — обычный файл;

    d = — каталог;

    b = — файл блочного устройства;

    c = — файл символьного устройства;

    s = — доменное гнездо (socket);

    p = — именованный канал (pipe);

    l = — символическая ссылка (link).

Далее следуют три группы по три символа, которые и определяют права доступа к файлу соответственно для владельца файла, для группы пользователей, которая сопоставлена данному файлу, и для всех остальных пользователей системы. В нашем примере права доступа для владельца определены как rwx, что означает, что владелец (root ) имеет право читать файл (r), производить запись в этот файл (w), и запускать файл на выполнение (x). Замена любого из этих символов прочерком будет означать, что пользователь лишается соответствующего права. В том же примере мы видим, что все остальные пользователи (включая и тех, которые вошли в группу root ) лишены права записи в этот файл, т. е. не могут файл редактировать и вообще как-то изменять.

Вообще говоря, права доступа и информация о типе файла в UNIX-системах хранятся в индексных дескрипторах в отдельной структуре, состоящей из двух байтов, т. е. из 16 бит (это естественно, ведь компьютер оперирует битами, а не символами r, w, x). Четыре бита из этих 16-ти отведены для кодированной записи о типе файла. Следующие три бита задают особые свойства исполняемых файлов, о которых мы скажем чуть позже. И, наконец, оставшиеся 9 бит определяют права доступа к файлу. Эти 9 бит разделяются на 3 группы по три бита. Первые три бита задают права пользователя, следующие три бита — права группы, последние 3 бита определяют права всех остальных пользователей (т. е. всех пользователей, за исключением владельца файла и группы файла).

При этом, если соответствующий бит имеет значение 1, то право предоставляется, а если он равен 0, то право не предоставляется. В символьной форме записи прав единица заменяется соответствующим символом (r, w или x), а 0 представляется прочерком.

Право на чтение (r) файла означает, что пользователь может просматривать содержимое файла с помощью различных команд просмотра, например, командой more или с помощью любого текстового редактора. Но, подредактировав содержимое файла в текстовом редакторе, вы не сможете сохранить изменения в файле на диске, если не имеете права на запись (w) в этот файл. Право на выполнение (x) означает, что вы можете загрузить файл в память и попытаться запустить его на выполнение как исполняемую программу. Конечно, если в действительности файл не является программой (или скриптом shell), то запустить этот файл на выполнение не удастся, но, с другой стороны, даже если файл действительно является программой, но право на выполнение для него не установлено, то он тоже не запустится.

Вот мы и узнали, какие файлы в Linux являются исполняемыми! Как видите, расширение имени файла тут не при чем, все определяется установкой атрибута "исполняемый", причем право на исполнение может быть предоставлено не всем!

Если выполнить ту же команду ls -l , но в качестве последнего аргумента ей указать не имя файла, а имя каталога, мы увидим, что для каталогов тоже определены права доступа, причем они задаются теми же самыми символами rwx. Например, выполнив команду ls -l / , мы увидим, что каталогу bin соответствует строка:

Естественно, что по отношению к каталогам трактовка понятий "право на чтение", "право на запись" и "право на выполнение" несколько изменяется. Право на чтение по отношению к каталогам легко понять, если вспомнить, что каталог — это просто файл, содержащий список файлов в данном каталоге. Следовательно, если вы имеете право на чтение каталога, то вы можете просматривать его содержимое (этот самый список файлов в каталоге). Право на запись тоже понятно — имея такое право, вы сможете создавать и удалять файлы в этом каталоге, т. е. просто добавлять в каталог или удалять из него запись, содержащую имя какого-то файла и соответствующие ссылки. Право на выполнение интуитивно менее понятно. Оно в данном случае означает право переходить в этот каталог. Если вы, как владелец, хотите дать доступ другим пользователям на просмотр какого-то файла в своем каталоге, вы должны дать им право доступа в каталог, т. е. дать им "право на выполнение каталога". Более того, надо дать пользователю право на выполнение для всех каталогов, стоящих в дереве выше данного каталога. Поэтому в принципе для всех каталогов по умолчанию устанавливается право на выполнение как для владельца и группы, так и для всех остальных пользователей. И, уж если вы хотите закрыть доступ в каталог, то лишите всех пользователей (включая группу) права входить в этот каталог. Только не лишайте и себя такого права, а то придется обращаться к суперпользователю! (Примеч.11)

После прочтения предыдущего абзаца может показаться, что право на чтение каталога не дает ничего нового по сравнению с правом на выполнение. Однако разница в этих правах все же есть. Если задать только право на выполнение, вы сможете войти в каталог, но не увидите там ни одного файла (этот эффект особенно наглядно проявляется в том случае, если вы пользуетесь каким-то файловым менеджером, например, программой Midnight Commander). Если вы имеете право доступа в каком-то из подкаталогов этого каталога, то вы можете перейти в него (командой cd ), но, как говорится "вслепую", по памяти, потому что списка файлов и подкаталогов текущего каталога вы не увидите.

Алгоритм проверки прав пользователя при обращении к файлу можно описать следующим образом. Система вначале проверяет, совпадает ли имя пользователя с именем владельца файла. Если эти имена совпадают (т. е. владелец обращается к своему файлу), то проверяется, имеет ли владелец соответствующее право доступа: на чтение, на запись или на выполнение (не удивляйтесь, суперпользователь может лишить некоторых прав и владельца файла). Если право такое есть, то соответствующая операция разрешается. Если же нужного права владелец не имеет, то проверка прав, предоставляемых через группу или через группу атрибутов доступа для остальных пользователей, уже даже не проверяются, а пользователю выдается сообщение о невозможности выполнения затребованного действия (обычно что-то вроде "Permission denied").

Если имя пользователя, обращающегося к файлу, не совпадает с именем владельца, то система проверяет, принадлежит ли владелец к группе, которая сопоставлена данному файлу (далее будем просто называть ее группой файла). Если принадлежит, то для определения возможности доступа к файлу используются атрибуты, относящиеся к группе, а на атрибуты для владельца и всех остальных пользователей внимания не обращается. Если же пользователь не является владельцем файла и не входит в группу файла, то его права определяются атрибутами для остальных пользователей. Таким образом, третья группа атрибутов, определяющих права доступа к файлу, относится ко всем пользователям, кроме владельца файла и пользователей, входящих в группу файла.

Для изменения прав доступа к файлу используется команда chmod . Ее можно использовать в двух вариантах. В первом варианте вы должны явно указать, кому какое право даете или кого этого права лишаете:

$ chmod wXp имя-файла

где вместо символа w подставляется

    либо символ u (т. е. пользователь, который является владельцем);

    либо g (группа);

    либо o (все пользователи, не входящие в группу, которой принадлежит данный файл);

    либо a (все пользователи системы, т. е. и владелец, и группа, и все остальные).

Вместо X ставится:

    либо + (предоставляем право);

    либо - (лишаем соответствующего права);

    либо = (установить указанные права вместо имеющихся),

Вместо p — символ, обозначающий соответствующее право:

    r (чтение);

    w (запись);

    x (выполнение).

Вот несколько примеров использования команды chmod :

$ chmod a+x file_name

предоставляет всем пользователям системы право на выполнение данного файла.

$ chmod go-rw file_name

удаляет право на чтение и запись для всех, кроме владельца файла.

$ chmod ugo+rwx file_name

дает всем права на чтение, запись и выполнение.

Если опустить указание на то, кому предоставляется данное право, то подразумевается, что речь идет вообще обо всех пользователях, т. е. вместо $ chmod a+x file_name

можно записать просто

$ chmod +x file_name

Второй вариант задания команды chmod (он используется чаще) основан на цифровом представлении прав. Для этого мы кодируем символ r цифрой 4, символ w — цифрой 2, а символ x — цифрой 1. Для того, чтобы предоставить пользователям какой-то набор прав, надо сложить соответствующие цифры. Получив, таким образом, нужные цифровые значения для владельца файла, для группы файла и для всех остальных пользователей, задаем эти три цифры в качестве аргумента команды chmod (ставим эти цифры после имени команды перед вторым аргументом, который задает имя файла). Например, если надо дать все права владельцу (4+2+1=7), право на чтение и запись — группе (4+2=6), и не давать никаких прав остальным, то следует дать такую команду:

$ chmod 760 file_name

Если вы знакомы с двоичным кодированием восьмеричных цифр, то вы поймете, что цифры после имени команды в этой форме ее представления есть не что иное, как восьмеричная запись тех самых 9 бит, которые задают права для владельца файла, группы файла и для всех пользователей.

Выполнять смену прав доступа к файлу с помощью команды chmod может только сам владелец файла или суперпользователь. Для того, чтобы иметь возможность изменить права группы, владелец должен дополнительно быть членом той группы, которой он хочет дать права на данный файл.

Чтобы завершить рассказ о правах доступа к файлам, надо рассказать еще о трех возможных атрибутах файла, устанавливаемых с помощью той же команды chmod . Это те самые атрибуты для исполняемых файлов, которые в индексном дескрипторе файла в двухбайтовой структуре, определяющей права на файл, занимают позиции 5-7, сразу после кода типа файла.

Первый из этих атрибутов — так называемый "бит смены идентификатора пользователя". Смысл этого бита состоит в следующем.

Обычно, когда пользователь запускает некоторую программу на выполнение, эта программа получает те же права доступа к файлам и каталогам, которые имеет пользователь, запустивший программу. Если же установлен "бит смены идентификатора пользователя", то программа получит права доступа к файлам и каталогам, которые имеет владелец файла программы (таким образом, рассматриваемый атрибут лучше называть "битом смены идентификатора владельца"). Это позволяет решать некоторые задачи, которые иначе было бы трудно выполнить. Самый характерный пример — команда смены пароля passwd . Все пароли пользователей хранятся в файле /etc/passwd, владельцем которого является суперпользователь root . Поэтому программы, запущенные обычными пользователями, в том числе команда passwd , не могут производить запись в этот файл. А, значит, пользователь как бы не может менять свой собственный пароль. Но для файла /usr/bin/passwd установлен "бит смены идентификатора владельца", каковым является пользователь root . Следовательно, программа смены пароля passwd запускается с правами root и получает право записи в файл /etc/passwd (уже средствами самой программы обеспечивается то, что пользователь может изменить только одну строку в этом файле).

Установить "бит смены идентификатора владельца" может суперпользователь с помощью команды

# chmod +s file_name

Аналогичным образом работает "бит смены идентификатора группы".

Еще один возможный атрибут исполняемого файла — это "бит сохранения задачи" или "sticky bit" (дословно — "бит прилипчивости"). Этот бит указывает системе, что после завершения программы надо сохранить ее в оперативной памяти. Удобно включить этот бит для задач, которые часто вызываются на выполнение, так как в этом случае экономится время на загрузку программы при каждом новом запуске. Этот атрибут был необходим на старых моделях компьютеров. На современных быстродействующих системах он используется редко.

Если используется цифровой вариант задания атрибутов в команде chmod , то цифровое значение этих атрибутов должно предшествовать цифрам, задающим права пользователя:

# chmod 4775 file_name

При этом веса этих битов для получения нужного суммарного результата задаются следующим образом:

    4 — "бит смены идентификатора пользователя",

    2 — "бит смены идентификатора группы",

    1 — "бит сохранения задачи (sticky bit)".

Если какие-то из этих трех битов установлены в 1, то несколько изменяется вывод команды ls -l в части отображения установленных атрибутов прав доступа. Если установлен в 1 "бит смены идентификатора пользователя", то символ "x" в группе, определяющей права владельца файла, заменяется символом "s". Причем, если владелец имеет право на выполнение файла, то символ "x" заменяется на маленькое "s", а если владелец не имеет права на выполнение файла (например, файл вообще не исполняемый), то вместо "x" ставится "S". Аналогичные замены имеют место при задании "бита смены идентификатора группы", но заменяется символ "x" в группе атрибутов, задающих права группы. Если равен 1 "бит сохранения задачи (sticky bit)", то заменяется символ "x" в группе атрибутов, определяющей права для всех остальных пользователей, причем "x" заменяется символом "t", если все пользователи могут запускать файл на выполнение, и символом "T", если они такого права не имеют.

Таким образом, хотя в выводе команды ls -l не предусмотрено отдельных позиций для отображения значений битов смены идентификаторов и бита сохранения задачи, соответствующая информация выводится. Вот небольшой пример того, как это будет выглядеть:

# ls -l prim1

В. Костромин (kos at rus-linux dot net) - 4.5. Права доступа к файлам и каталогам

User management is a critical part of maintaining a secure system. Ineffective user and privilege management often lead many systems into being compromised. Therefore, it is important that you understand how you can protect your server through simple and effective user account management techniques.

Ubuntu developers made a conscientious decision to disable the administrative root account by default in all Ubuntu installations. This does not mean that the root account has been deleted or that it may not be accessed. It merely has been given a password which matches no possible encrypted value, therefore may not log in directly by itself.

Instead, users are encouraged to make use of a tool by the name of sudo to carry out system administrative duties. Sudo allows an authorized user to temporarily elevate their privileges using their own password instead of having to know the password belonging to the root account. This simple yet effective methodology provides accountability for all user actions, and gives the administrator granular control over which actions a user can perform with said privileges.

    If for some reason you wish to enable the root account, simply give it a password:

    Configurations with root passwords are not supported.

    sudo passwd

    Sudo will prompt you for your password, and then ask you to supply a new password for root as shown below:

    Password for username: (enter your own password) Enter new UNIX password: (enter a new password for root) Retype new UNIX password: (repeat new password for root) passwd: password updated successfully

    To disable the root account password, use the following passwd syntax:

    sudo passwd -l root

    However, to disable the root account itself, use the following command:

    usermod --expiredate 1

    You should read more on Sudo by reading the man page:

    man sudo

By default, the initial user created by the Ubuntu installer is a member of the group "sudo " which is added to the file /etc/sudoers as an authorized sudo user. If you wish to give any other account full root access through sudo , simply add them to the sudo group.

Adding and Deleting Users

The process for managing local users and groups is straightforward and differs very little from most other GNU/Linux operating systems. Ubuntu and other Debian based distributions encourage the use of the "adduser" package for account management.

    To add a user account, use the following syntax, and follow the prompts to give the account a password and identifiable characteristics, such as a full name, phone number, etc.

    sudo adduser username

    To delete a user account and its primary group, use the following syntax:

    sudo deluser username

    Deleting an account does not remove their respective home folder. It is up to you whether or not you wish to delete the folder manually or keep it according to your desired retention policies.

    Remember, any user added later on with the same UID/GID as the previous owner will now have access to this folder if you have not taken the necessary precautions.

    You may want to change these UID/GID values to something more appropriate, such as the root account, and perhaps even relocate the folder to avoid future conflicts:

    sudo chown -R root:root /home/username/ sudo mkdir /home/archived_users/ sudo mv /home/username /home/archived_users/

    To temporarily lock or unlock a user account, use the following syntax, respectively:

    sudo passwd -l username sudo passwd -u username

    To add or delete a personalized group, use the following syntax, respectively:

    sudo addgroup groupname sudo delgroup groupname

    To add a user to a group, use the following syntax:

    sudo adduser username groupname

User Profile Security

When a new user is created, the adduser utility creates a brand new home directory named /home/username . The default profile is modeled after the contents found in the directory of /etc/skel , which includes all profile basics.

If your server will be home to multiple users, you should pay close attention to the user home directory permissions to ensure confidentiality. By default, user home directories in Ubuntu are created with world read/execute permissions. This means that all users can browse and access the contents of other users home directories. This may not be suitable for your environment.

    To verify your current user home directory permissions, use the following syntax:

    ls -ld /home/username

    The following output shows that the directory /home/username has world-readable permissions:

    drwxr-xr-x 2 username username 4096 2007-10-02 20:03 username

    You can remove the world readable-permissions using the following syntax:

    sudo chmod 0750 /home/username

    Some people tend to use the recursive option (-R) indiscriminately which modifies all child folders and files, but this is not necessary, and may yield other undesirable results. The parent directory alone is sufficient for preventing unauthorized access to anything below the parent.

    A much more efficient approach to the matter would be to modify the adduser global default permissions when creating user home folders. Simply edit the file /etc/adduser.conf and modify the DIR_MODE variable to something appropriate, so that all new home directories will receive the correct permissions.

    After correcting the directory permissions using any of the previously mentioned techniques, verify the results using the following syntax:

    ls -ld /home/username

    The results below show that world-readable permissions have been removed:

    drwxr-x--- 2 username username 4096 2007-10-02 20:03 username

Password Policy

A strong password policy is one of the most important aspects of your security posture. Many successful security breaches involve simple brute force and dictionary attacks against weak passwords. If you intend to offer any form of remote access involving your local password system, make sure you adequately address minimum password complexity requirements, maximum password lifetimes, and frequent audits of your authentication systems.

Minimum Password Length

By default, Ubuntu requires a minimum password length of 6 characters, as well as some basic entropy checks. These values are controlled in the file /etc/pam.d/common-password , which is outlined below.

password pam_unix.so obscure sha512

If you would like to adjust the minimum length to 8 characters, change the appropriate variable to min=8. The modification is outlined below.

password pam_unix.so obscure sha512 minlen=8

Basic password entropy checks and minimum length rules do not apply to the administrator using sudo level commands to setup a new user.

Password Expiration

When creating user accounts, you should make it a policy to have a minimum and maximum password age forcing users to change their passwords when they expire.

    To easily view the current status of a user account, use the following syntax:

    sudo chage -l username

    The output below shows interesting facts about the user account, namely that there are no policies applied:

    Last password change: Jan 20, 2015 Password expires: never Password inactive: never Account expires: never Minimum number of days between password change: 0 Maximum number of days between password change: 99999 Number of days of warning before password expires: 7

    To set any of these values, simply use the following syntax, and follow the interactive prompts:

    sudo chage username

    The following is also an example of how you can manually change the explicit expiration date (-E) to 01/31/2015, minimum password age (-m) of 5 days, maximum password age (-M) of 90 days, inactivity period (-I) of 5 days after password expiration, and a warning time period (-W) of 14 days before password expiration:/home/username/.ssh/authorized_keys .

    Remove or rename the directory .ssh/ in the user"s home folder to prevent further SSH authentication capabilities.

    Be sure to check for any established SSH connections by the disabled user, as it is possible they may have existing inbound or outbound connections. Kill any that are found.

    who | grep username (to get the pts/# terminal) sudo pkill -f pts/#

    Restrict SSH access to only user accounts that should have it. For example, you may create a group called "sshlogin" and add the group name as the value associated with the AllowGroups variable located in the file /etc/ssh/sshd_config .

    AllowGroups sshlogin

    Then add your permitted SSH users to the group "sshlogin", and restart the SSH service.

    sudo adduser username sshlogin sudo systemctl restart sshd.service

    External User Database Authentication

    Most enterprise networks require centralized authentication and access controls for all system resources. If you have configured your server to authenticate users against external databases, be sure to disable the user accounts both externally and locally. This way you ensure that local fallback authentication is not possible.

Управление пользователями является важной частью безопасности системы. Неэффективные пользователи и управление привилегиями часто приводят множество систем к компрометации. Поэтому важно чтобы вы понимали как защитить ваш сервер с помощью простых и эффективных методик управления пользовательскими учетными записями.

Где суперпользователь?

Разработчики Ubuntu приняли сознательное решение заблокировать административную корневую учетную запись (root) по умолчанию во всех установках Ubuntu. Это не означает, что учетная запись root удалена или к ней нет доступа. Ей просто присвоен пароль, который не совпадает ни с одним возможным шифрованным значением, соответственно, ее невозможно использовать для входа напрямую.

Вместо этого поощряется применение пользователями инструмента с именем sudo для переноса административных обязанностей. Sudo позволяет авторизованным пользователям временно повышать их привилегии, используя их собственный пароль вместо знания пароля, присвоенного суперпользователю. Эта простая и к тому же эффективная методика обеспечивает ответственность для всех действий пользователей и дает административный раздельный контроль над тем, какие действия может выполнять пользователь с указанными привилегиями.

1. Если по какой-то причине вы хотите разрешить учетную запись суперпользователя, просто установите ей пароль:

Sudo passwd

Sudo запросит ваш пароль, а затем предложит установить новый пароль для root как показано ниже:

Password for username: (вводите свой собственный пароль) Enter new UNIX password: (вводите новый пароль суперпользователя) Retype new UNIX password: (повторяете новый пароль суперпользователя) passwd: password updated successfully

2. Для блокирования учетной записи root используйте следующий синтаксис passwd:

Sudo passwd -l root

Man sudo

По умолчанию изначальный пользователь, созданный установщиком Ubuntu является членом группы "admin", которая добавлена в файл /etc/sudoers как авторизованные sudo пользователи. Если вы желаете разрешить другой учетной записи полный доступ суперпользователя через sudo , просто добавьте ее в группу admin .

Добавление и удаление пользователей

Процесс управления локальными пользователями и группами простой и мало отличается от большинства других операционных систем GNU/Linux. Ubuntu и другие дистрибутивы на основе Debian поощряют использование пакета "adduser" для управления учетными записями.

1. Для добавления учетной записи пользователя используйте следующий синтаксис и следуйте подсказкам для указания пароля и опознавательных характеристик таких как полное имя, телефон и пр.:

Sudo adduser username

2. Для удаления пользователя и его первичной группы используйте следующий синтаксис:

Sudo deluser username

Удаление пользователя не удаляет связанный с ним домашний каталог. Оставлено на ваше усмотрение хотите ли вы удалить каталог вручную или оставите его в соответствии с вашими политиками хранения.

Помните, что любой пользователь, добавленный позднее с теми же UID/GID, как и предыдущий, получит доступ к этому каталогу если вы не предпримете необходимых мер предосторожности.

Вы можете захотеть изменить эти значения UID/GID каталога на что-то более подходящее, как, например, значения суперпользователя и, возможно, переместить каталог для предотвращения будущих конфликтов:

Sudo chown -R root:root /home/username/ sudo mkdir /home/archived_users/ sudo mv /home/username /home/archived_users/

3. Для временного блокирования или разблокирования используйте следующий синтаксис:

Sudo passwd -l username sudo passwd -u username

4. Для добавления или удаления персональной группы используйте, соответственно, следующий синтаксис:

Sudo addgroup groupname sudo delgroup groupname

5. Для добавления пользователя в группу, используйте:

Sudo adduser username groupname

Безопасность профиля пользователя

Когда создается новый пользователь, утилита adduser создает, соответственно, новый именной каталог /home/username . Профиль по умолчанию формируется по содержимому, находящемуся в каталоге /etc/skel, который включает все основы для формирования профилей.

Если ваш сервер является домашним для множества пользователей, вы должны уделять пристальное внимание правам доступа на пользовательские домашние каталоги для поддержания конфиденциальности. По умолчанию пользовательские домашние каталоги создаются с правами чтения/выполнения для всех. Это означает, что все пользователи просматривать и получать доступ к содержимому других домашних каталогов. Это может не подходить для вашего окружения.

1. Для проверки прав доступа на домашние каталоги существующих пользователей используйте такой синтаксис:

Ls -ld /home/username

Следующий вывод показывает, что каталог /home/username имеет доступ на чтение для всех:

Drwxr-xr-x 2 username username 4096 2007-10-02 20:03 username

2. Вы можете удалить права чтения для всех, используя следующий синтаксис:

Sudo chmod 0750 /home/username

Некоторые склоняются к тенденции использовать опцию рекурсии (-R) без разбора, которая изменяет все дочерние каталоги и файлы, хотя это необязательно и может приводить к иным нежелательным последствиям. Родительский каталог сам по себе запретит неавторизованный доступ к любому своему содержимому.

Более эффективный подход к данному вопросу будет в изменении глобальных прав доступа по умолчанию для adduser при создании домашних каталогов. Просто отредактируйте файл /etc/adduser.conf, изменив переменную DIR_MODE на что-то более подходящее, после чего все новые домашние каталоги будут получать корректные права доступа.

DIR_MODE=0750

3. После исправления прав доступа к каталогам, используя любую из ранее упоминавшихся методик, проверьте результаты используя следующую команду:

Ls -ld /home/username

Результат ниже показывет, что права на чтение для всех удалены:

Drwxr-x--- 2 username username 4096 2007-10-02 20:03 username

Политика паролей

Строгая политика паролей - один из наиболее важных аспектов вашего подхода к безопасности. Много удачных прорывов безопасности использовали для атак простейший взлом (brute force) и подбор паролей по словарю против слабых паролей. Если вы намереваетесь использовать любую форму удаленного доступа с использованием вашей локальной системы паролей, убедитесь, что вы назначили адекватные минимальные требования к паролю, максимальное время жизни пароля и часто проверяете вашу систему аутентификации.

Минимальная длина пароля

По умолчанию Ubuntu требует минимальную длину пароля в 6 символов, также как и некоторые основные проверки на разброс значений. Эти параметры управляются файлом /etc/pam.d/common-password и приведены ниже:

Password pam_unix.so obscure sha512

Если вы хотите установить минимальную длину в 8 символов, измените соответствующую переменную на min=8. Изменения приведены ниже:

Password pam_unix.so obscure sha512 min=8

Базовые проверки на качество и минимальную длину пароля не применяются к администратору, использующего команды уровня sudo для настройки нового пользователя.

Время жизни пароля

При создании учетных записей пользователей вы должны создать политику минимального и максимального времени жизни пароля чтобы заставлять пользователей менять их пароли по истечении определенного времени.

1. Для простого просмотра текущего статуса учетной записи пользователя используйте следующий синтаксис:

Sudo chage -l username

Вывод, приведенный ниже, показывает интересные факты об учетной записи пользователя, а именно что нет никаких примененных политик:

Last password change: Jan 20, 2008 Password expires: never Password inactive: never Account expires: never Minimum number of days between password change: 0 Maximum number of days between password change: 99999 Number of days of warning before password expires: 7

2. Для установки этих значений просто используйте следующую команду и следуйте интерактивным подсказкам:

Sudo chage username

Далее также пример того, как можно вручную изменить явную дату истечения действия пароля (-E) на 01/31/2008 (американский вариант даты - прим. пер.), минимальный срок действия пароля (-m) на 5 дней, максимальный срок действия (-M) на 90 дней, период бездействия (-I) на 5 дней после истечения срока пароля и период предупреждений (-W) на 14 дней до истечения срока пароля.

Sudo chage -E 01/31/2011 -m 5 -M 90 -I 30 -W 14 username

3. Для проверки изменений используйте ту же команду, что и упоминалась выше:

Sudo chage -l username

Вывод команды ниже показывает новые политики, которые применяются к учетной записи:

Last password change: Jan 20, 2008 Password expires: Apr 19, 2008 Password inactive: May 19, 2008 Account expires: Jan 31, 2008 Minimum number of days between password change: 5 Maximum number of days between password change: 90 Number of days of warning before password expires: 14

Иные соображения безопасности

Многие приложения используют альтернативные механизмы аутентификации, которые могут быть запросто пропущены даже опытными системными администраторами. Поэтому важно понимать и контролировать как пользователи авторизуются и получают доступ к сервисам и приложениям на вашем сервере.

Доступ по SSH заблокированными пользователями

Обычное отключение/блокирование не исключает удаленного подключения пользователя к серверу, если ему предварительно была установлена аутентификация по открытому ключу RSA. Такие пользователи будут получать доступ к консольной оболочке (shell) на сервере без необходимости ввода какого-либо пароля. Не забывайте проверять пользовательские домашние каталоги на файлы, которые позволяют подобный тип авторизации по SSH , например, /home/username/.ssh/authorized_keys.

Удаление или переименование каталога.ssh/ в домашнем каталоге пользователя предотвратит дальнейшую способность аутентификации по SSH .

Убедитесь что проверили любые установленные SSH соединения заблокированных пользователей, поскольку могут остаться входящие или исходящие соединения. Убейте все, которые найдете.

Ограничьте SSH доступ только для учетных записей пользователей, которым они требуются. Например, вы можете создать группу с названием "sshlogin" и добавить имя группы в качестве значения для переменной AllowGroups, находящейся в файле /etc/ssh/sshd_config.

AllowGroups sshlogin

Затем добавьте ваших пользователей, которым разрешен SSH доступ, в группу "sshlogin" и перестартуйте SSH сервис.

Sudo adduser username sshlogin sudo service ssh restart

Аутентификация по внешней базе данных

Большинство корпоративных сетей требуют централизованной аутентификации и контроля доступа для всех системных ресурсов. Если вы настроили свой сервер для аутентификации пользователей по внешней базе данных, убедитесь, что вы отключаете учетные записи как внешние, так и локальные, таким образом вы будете уверены что откат на локальную аутентификацию невозможен.

В операционной системе Linux есть много отличных функций безопасности, но она из самых важных - это система прав доступа к файлам. Linux, как последователь идеологии ядра Linux в отличие от Windows, изначально проектировался как многопользовательская система, поэтому права доступа к файлам в linux продуманы очень хорошо.

И это очень важно, потому что локальный доступ к файлам для всех программ и всех пользователей позволил бы вирусам без проблем уничтожить систему. Но новым пользователям могут показаться очень сложными новые права на файлы в linux, которые очень сильно отличаются от того, что мы привыкли видеть в Windows. В этой статье мы попытаемся разобраться в том как работают права файлов в linux, а также как их изменять и устанавливать.

Изначально каждый файл имел три параметра доступа. Вот они:

  • Чтение - разрешает получать содержимое файла, но на запись нет. Для каталога позволяет получить список файлов и каталогов, расположенных в нем;
  • Запись - разрешает записывать новые данные в файл или изменять существующие, а также позволяет создавать и изменять файлы и каталоги;
  • Выполнение - вы не можете выполнить программу, если у нее нет флага выполнения. Этот атрибут устанавливается для всех программ и скриптов, именно с помощью него система может понять, что этот файл нужно запускать как программу.

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

  • Владелец - набор прав для владельца файла, пользователя, который его создал или сейчас установлен его владельцем. Обычно владелец имеет все права, чтение, запись и выполнение.
  • Группа - любая группа пользователей, существующая в системе и привязанная к файлу. Но это может быть только одна группа и обычно это группа владельца, хотя для файла можно назначить и другую группу.
  • Остальные - все пользователи, кроме владельца и пользователей, входящих в группу файла.

Именно с помощью этих наборов полномочий устанавливаются права файлов в linux. Каждый пользователь может получить полный доступ только к файлам, владельцем которых он является или к тем, доступ к которым ему разрешен. Только пользователь Root может работать со всеми файлами независимо от их набора их полномочий.

Но со временем такой системы стало не хватать и было добавлено еще несколько флагов, которые позволяют делать файлы не изменяемыми или же выполнять от имени суперпользователя, их мы рассмотрим ниже:

Специальные права доступа к файлам в Linux

Для того, чтобы позволить обычным пользователям выполнять программы от имени суперпользователя без знания его пароля была придумана такая вещь, как SUID и SGID биты. Рассмотрим эти полномочия подробнее.

  • SUID - если этот бит установлен, то при выполнении программы, id пользователя, от которого она запущена заменяется на id владельца файла. Фактически, это позволяет обычным пользователям запускать программы от имени суперпользователя;
  • SGID - этот флаг работает аналогичным образом, только разница в том, что пользователь считается членом группы, с которой связан файл, а не групп, к которым он действительно принадлежит. Если SGID флаг установлен на каталог, все файлы, созданные в нем, будут связаны с группой каталога, а не пользователя. Такое поведение используется для организации общих папок;
  • Sticky-bit - этот бит тоже используется для создания общих папок. Если он установлен, то пользователи могут только создавать, читать и выполнять файлы, но не могут удалять файлы, принадлежащие другим пользователям.

Теперь давайте рассмотрим как посмотреть и изменить права на файлы в linux.

Как посмотреть права доступа к файлам в Linux

Конечно, вы можете посмотреть права доступа к файлам в Linux с помощью файлового менеджера. Все они поддерживают эту функцию, но так вы получите неполную информацию. Для максимально подробной информации обо всех флагах, в том числе специальных, нужно использовать команду ls с параметром -l. Все файлы из каталога будут выведены в виде списка, и там будут показаны все атрибуты и биты.

Чтобы узнать права на файл linux выполните такую команду, в папке где находится этот файл:

За права файлов в linux тут отвечают черточки. Первая это тип файла, который рассмотрен в отдельной статье. Дальше же идут группы прав сначала для владельца, для группы и для всех остальных. Всего девять черточек на права и одна на тип.

Рассмотрим подробнее, что значат условные значения флагов прав:

  • --- - нет прав, совсем;
  • --x - разрешено только выполнение файла, как программы но не изменение и не чтение;
  • -w- - разрешена только запись и изменение файла;
  • -wx - разрешено изменение и выполнение, но в случае с каталогом, вы не можете посмотреть его содержимое;
  • r-- - права только на чтение;
  • r-x - только чтение и выполнение, без права на запись;
  • rw- - права на чтение и запись, но без выполнения;
  • rwx - все права;
  • --s - установлен SUID или SGID бит, первый отображается в поле для владельца, второй для группы;
  • --t - установлен sticky-bit, а значит пользователи не могут удалить этот файл.

В нашем примере, файл test1 имеет типичные разрешения для программ, владелец может все, группа только чтение и выполнение, а все остальные - только выполнение. Для test2 дополнительно установлен флаг SUID и SGID. А для папки test3 установлен Sticky-bit. Файл test4 доступный всем. Теперь вы знаете как посмотреть права на файл linux.

Как изменить права файла в Linux

Чтобы изменить права на файл в linux вы можете использовать утилиту chmod. Она позволяет менять все флаги, включая специальные. Рассмотрим ее синтаксис:

$ chmod опции категория действие флаг файл

Опции сейчас нас интересовать не будут, разве что только одна. С помощью опции -R вы можете заставить программу применять изменения ко всем файлам и каталогам рекурсивно.

  • u - владелец файла;
  • g - группа файла;
  • o - другие пользователи.

Действие может быть одно из двух, либо добавить флаг "+", либо убрать флаг - "-". Что касается самих прав доступа, то они аналогичны выводу утилиты ls: r - чтение, w - запись, x - выполнение, s - suid/sgid, в зависимости от категории, для которой вы его устанавливаете, t - устанавливает sticky-bit. Например, всем пользователям полный доступ к файлу test5:

chmod ugo+rwx test5

Или заберем все права у группы и остальных пользователей:

chmod go-rwx test5

Дадим группе право на чтение и выполнение:

chmod g+rx test5

Остальным пользователям только чтение:

Для файла test6 установим SUID:

А для test7 - SGID:

Посмотрим что получилось:

Как видите, изменить права на файл в linux очень просто. К тому же вы можете изменить основные права с помощью файлового менеджера.

Выводы

Вот и все, теперь вы знаете не только что такое права доступа к файлам в linux, но и как их посмотреть, и даже как их изменить. Это очень важная тема, в которой действительно стоит разобраться новичкам, чтобы использовать свою систему более полноценно. Если у вас остались вопросы, спрашивайте в комментариях!

На завершение хочу предложить неплохое видео про права доступа в linux:

В данном материале вы ознакомитесь с тем, как создать пользователя, как создать изменить пароль, получить информацию о пользователе или удалить вовсе, создать/изменить/удалить группу, после прочтения этого материала вы сможете все это выполнить с легкостью.

Работаем с пользователями и группами, учимся управлять, создавать пользователей, группы, перемещать по группам и прочие другие манипуляции с группами в Ubuntu Linux.

Добавление пользователя

Добавление пользователя осуществляется при помощи команды useradd . Пример использования:

Sudo useradd vasyapupkin

Эта команда создаст в системе нового пользователя vasyapupkin. Чтобы изменить настройки создаваемого пользователя, вы можете использовать следующие ключи:

Ключ Описание
-b Базовый каталог. Это каталог, в котором будет создана домашняя папка пользователя. По умолчанию /home
Комментарий. В нем вы можете напечатать любой текст.
-d Название домашнего каталога. По умолчанию название совпадает с именем создаваемого пользователя.
-e Дата, после которой пользователь будет отключен. Задается в формате ГГГГ-ММ-ДД. По умолчанию отключено.
-f Блокирование учетной записи. Если значение равно 0, то запись блокируется сразу после устаревания пароля, при -1 - не блокируется. По умолчанию -1.
-g Первичная группа пользователя. Можно указывать как GID, так и имя группы. Если параметр не задан будет создана новая группа название которой совпадает с именем пользователя.
-G Список групп в которых будет находится создаваемый пользователь
-k Каталог шаблонов. Файлы и папки из этого каталога будут помещены в домашнюю папку пользователя. По умолчанию /etc/skel.
-m Ключ, указывающий, что необходимо создать домашнюю папку. По умолчанию домашняя папка не создается .
-p Пароль пользователя. По умолчанию пароль не задается.
-s Оболочка, используемая пользователем. По умолчанию /bin/sh.
-u Вручную задать UID пользователю.

Параметры создания пользователя по умолчанию

Если при создании пользователя не указываются дополнительные колючи, то берутся настройки по умолчанию. Эти настройки вы можете посмотреть выполнив

Useradd -D

Результат будет примерно следующий:

GROUP=100HOME=/home INACTIVE=-1EXPIRE= SHELL=/bin/shSKEL=/etc/skel CREATE_MAIL_SPOOL=no

Если вас не устраивают такие настройки, вы можете поменять их выполнив

Useradd -D-m-s/bin/bash

где -m и -s это ключи, взятые из таблицы выше.

Изменение пользователя

Изменение параметров пользователя происходит с помощью утилиты usermod . Пример использования:

Sudo usermod -c "Эта команда поменяет комментарий пользователю" vasyapupkin

usermod использует те же опции, что и useradd.

Изменение пароля

Изменить пароль пользователю можно при помощи утилиты passwd .

Sudo passwd vasyapupkin

Основные ключи passwd:

Получение информации о пользователях

    w – вывод информации (имя пользователя, оболочка, время входа в систему и т. п.) о всех вошедших в систему пользователях.

    whoami – вывод вашего имени пользователя.

    users – вывод имен пользователей, работающих в системе.

    groups имя_пользователя – вывод списка групп в которых состоит пользователь.

Удаление пользователя

Для того, чтобы удалить пользователя воспользуйтесь утилитой userdel . Пример использования:

Sudo userdel vasyapupkin

userdel имеет всего два основных ключа:

Управление группами

Создание группы

Программа groupadd создаёт новую группу согласно указанным значениям командной строки и системным значениям по умолчанию. Пример использования:

Sudo groupadd testgroup

Основные ключи:

Изменение группы

Сменить название группы, ее GID или пароль можно при помощи groupmod . Пример:

Sudo groupmod -n newtestgroup testgroup #Имя группы изменено с testgroup на newtestgroup

Опции groupmod:

Удаление группы

Удаление группы происходит так:

Sudo groupdel testgroup

groupdel не имеет никаких дополнительных параметров.

Файлы конфигурации

Изменять параметры пользователей и групп можно не только при помощи специальных утилит, но и вручную. Все настройки хранятся в текстовых файлах. Описание каждого из них приведено ниже.

/etc/passwd

В файле /etc/passwd хранится вся информация о пользователях кроме пароля. Одна строка из этого файла соответствует описанию одного пользователя. Примерное содержание строки таково:

Vasyapupkin:x:1000:1000:Vasya Pupkin:/home/vpupkin:/bin/bash

Строка состоит из нескольких полей, каждое из которых отделено от другого двоеточием. Значение каждого поля приведено в таблице.

Второе и последнее поля необязательные и могут не иметь значения.

/etc/group

В /etc/group , как очевидно из названия хранится информация о группах. Она записана в аналогичном /etc/passwd виде:

Vasyapupkin:x:1000:vasyapupkin,petya

В этом файле второе и четвертое поля могут быть пустыми.

/etc/shadow

Файл /etc/shadow хранит в себе пароли, по этому права, установленные на этот файл, не дают считать его простому пользователю. Пример одной из записей из этого файла:

Vasyapupkin:$6$Yvp9VO2s$VfI0t.o754QB3HcvVbz5hlOafmO.LaHXwfavJHniHNzq/bCI3AEo562hhiWLoBSqxLy7RJJNm3fwz.sdhEhHL0:15803:0:99999:7:::

Управление пользователями и группами через GUI

В текущей версии Ubuntu отсутствует штатная утилита управления группами пользователей системы, поэтому по умолчанию все действия с группами необходимо выполнять в консоли. Однако для этих целей существует специальная утилита «Пользователи и группы».

Установка графической GUI утилиты для управления группами

Пакет gnome-system-tools находится в репозитории Ubuntu, поэтому ставится одной командой:

Sudo apt-get install gnome-system-tools

Управление группами

Для добавления, удаления групп, а также добавления\удаления пользователей в\из конкретных групп, необходимо перейти в Меню Ubuntu / Dash - Системные утилиты - Администрирование - Пользователи и группы, после в данном окне нажав кнопку «Управление группами», вы увидите окно, отображающее все присутствующие в системе группы:

в котором выбрав нужную группу и нажав «Свойства» можно отметить галочкой пользователей, которых необходимо внести в группу.