Недавно я разработал проект с несколькими друзьями.В этот период я использовал сервер для запуска модели.Этот сервер используется многими людьми.У многих людей на нем есть свои учетные записи,и они не вмешиваются во внутренние дела друг друга. Дела, кажется, все очень упорядоченно.
Недавно на этом сервере как раз был смонтирован новый жесткий диск, который смонтировал друг под учетной записью root, а затем диск был сопоставлен с определенной папкой. Однако после того, как он был смонтирован, было обнаружено, что обычная учетная запись не имеет разрешения на работу в папке и не может создавать файлы, поэтому он просто изменил разрешение папки на 777. Я подумал про себя, это неплохо, его поменяли на 777, что делать другим людям, если они его поменяют? Это будет фатально!
Поэтому я подробно изучил базовые знания о пользователях, группах пользователей, правах доступа к файлам и т. д. в Linux по этому вопросу.После прочтения этого не меняйте папку на разрешения 777 в любое время в будущем.
Основная операция
Сначала давайте разберемся с базовыми знаниями о пользователях, группах пользователей и правах доступа к файлам в Linux, а затем на примере продемонстрируем некоторые операции с настройками разрешений.
Прежде всего, в системе Linux существует понятие пользователей и групп пользователей. Пользователи являются символом идентичности. Мы должны управлять системой как определенный пользователь. Фактически это соответствует учетной записи, с которой мы входим в систему. . Группа пользователей представляет собой набор некоторых пользователей, мы можем разделить и управлять некоторыми пользователями единообразно через группу пользователей.
Например, если я хочу отправить круг друзей в WeChat, я просто хочу показать его своим родственникам. Нужно ли мне проверять всех людей по одному при отправке? Это слишком большая проблема. Чтобы решить эту проблему, в WeChat есть концепция тегов: мы можем классифицировать друзей по тегам заранее и просто проверять тег непосредственно при отправке, что просто и эффективно. По сути, это концепция групп пользователей. Мы можем группировать и классифицировать определенных людей. В то время нам нужно только указать категорию или группу, вместо того, чтобы проверять количество людей, что экономит много времени.
В Linux пользователь может принадлежать к нескольким группам, а группа также может содержать несколько пользователей.Позвольте мне взять Ubuntu Linux в качестве примера, чтобы продемонстрировать соответствующие команды и операции.
пользователи и группы пользователей
Сначала просмотрите всех пользователей, команда выглядит следующим образом:
cut -d':' -f 1 /etc/passwd
результат:
root
daemon
bin
sys
...
ubuntu
mysql
Здесь одна строка - это имя пользователя. Поскольку их слишком много, часть ее опущена. На самом деле, эта команда выводит имя пользователя отдельно от файла паролей.
Затем, чтобы просмотреть все группы пользователей, команда аналогична:
cut -d':' -f 1 /etc/group
результат:
root
daemon
bin
sys
...
ubuntu
mysql
Результаты в основном аналогичны, так как каждый пользователь автоматически создается с группой с тем же именем, что и его группа пользователей по умолчанию, когда она создается.
Здесь я использую учетную запись ubuntu для входа в систему. Позвольте мне посмотреть, к каким группам принадлежит учетная запись ubuntu.
Формат команды для проверки принадлежности пользователя к группе следующий:
gorups <username>
Вот команда групп плюс имя пользователя для просмотра группы, к которой принадлежит имя пользователя.Если имя пользователя не добавлено, по умолчанию используется текущий пользователь.
Например, чтобы просмотреть группу, к которой принадлежит пользователь ubuntu, команда выглядит следующим образом:
groups ubuntu
результат:
ubuntu : ubuntu adm cdrom sudo dip plugdev lxd lpadmin sambashare
Не много, этот пользователь закреплен за многими группами, такими как группа ubuntu с таким же именем, группа sudo и некоторые другие группы.
Группа sudo особенная, если она приписана к этой группе, значит у учетной записи есть привилегии root и можно использовать команду sudo.
Зная, как проверить группы, к которым принадлежит пользователь, мы также должны научиться проверять, каких пользователей содержит группа пользователей.
Команда для просмотра всех пользователей в группе пользователей выглядит следующим образом:
members <group>
Однако эта команда не включена, вам необходимо дополнительно установить пакет участников, команда выглядит следующим образом:
sudo apt-get install members
Например, чтобы просмотреть всех пользователей в группе пользователей sudo, то есть пользователей с привилегиями root:
members sudo
результат:
ubuntu hadoop
Видно, что есть два пользователя с правами root, ubuntu и hadoop.Конечно, результаты разных машин должны быть разными.
Затем вводится более полезная команда — команда id, которую можно использовать для просмотра группы, к которой принадлежит пользователь, в следующем формате:
id <username>
Например, чтобы просмотреть информацию о пользователе ubuntu, это выглядит так:
id ubuntu
результат:
uid=500(ubuntu) gid=500(ubuntu) groups=500(ubuntu),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),110(lxd),115(lpadmin),116(sambashare)
Здесь есть gid, который является основной рабочей группой, за которой следуют группы, в которых перечислены все группы, в которых состоит пользователь. Существует только одна основная рабочая группа, и количество последних не ограничено. Вы можете видеть, что результаты для групп пользователей такие же, как и для команды groups.
Далее давайте посмотрим, как создать пользователя и как назначить группы пользователям.
Формат добавления пользовательской команды следующий:
sudo adduser <username>
Например, если я хочу добавить пользователя cqc, команду можно написать так:
sudo adduser cqc
Используемым здесь командам предшествует sudo, потому что, в конце концов, это операция системного уровня.
Формат команды для добавления группы следующий:
sudo groupadd <group>
Формат аналогичен, просто следуйте имени группы.Например, если я хочу создать группу пользователей для своей лаборатории, я могу использовать следующую команду:
sudo groupadd lab
После создания пользователей и групп их необходимо связать.Ассоциация означает добавление пользователя в группу.Формат команды следующий:
sudo adduser <username> <group>
Или используйте команду usermod:
sudo usermod -G <group> <username>
Если вы хотите добавить несколько групп, вы можете указать несколько имен с опцией -a:
sudo usermod -aG <group1,group2,group3..> <username>
Например, если я хочу добавить пользователя cqc в группу пользователей sudo, команда выглядит так:
sudo adduser cqc sudo
или:
sudo usermod -G sudo cqc
Это делает ассоциацию пользователей и групп пользователей.
Управление правами на файлы
Поняв это, давайте узнаем больше о правах доступа к файлам.Давайте сначала найдем каталог и проверим список файлов.
Команда для вывода сведений о файлах в каталоге выглядит следующим образом:
ll
или используйте:
ls -l
Например, здесь я перечисляю список файлов в каталоге /etc/nginx:
total 80
drwxr-xr-x 7 root root 4096 Jun 21 22:16 ./
drwxr-xr-x 103 root root 4096 Sep 4 18:04 ../
drwxr-xr-x 2 root root 4096 Jul 12 2017 conf.d/
-rw-r--r-- 1 root root 1077 Feb 12 2017 fastcgi.conf
-rw-r--r-- 1 root root 1007 Feb 12 2017 fastcgi_params
-rw-r--r-- 1 root root 2837 Feb 12 2017 koi-utf
-rw-r--r-- 1 root root 2223 Feb 12 2017 koi-win
-rw-r--r-- 1 root root 3957 Feb 12 2017 mime.types
-rw-r--r-- 1 root root 1505 Jun 21 20:24 nginx.conf
-rw-r--r-- 1 root root 12288 Jun 21 20:44 .nginx.conf.swp
-rw-r--r-- 1 root root 180 Feb 12 2017 proxy_params
-rw-r--r-- 1 root root 636 Feb 12 2017 scgi_params
drwxr-xr-x 2 root root 4096 Jun 21 22:42 sites-available/
drwxr-xr-x 2 root root 4096 Jun 21 19:08 sites-enabled/
drwxr-xr-x 2 root root 4096 Jun 21 19:08 snippets/
-rw-r--r-- 1 root root 664 Feb 12 2017 uwsgi_params
drwxr-xr-x 2 root root 4096 Jun 22 02:44 vhosts/
-rw-r--r-- 1 root root 3071 Feb 12 2017 win-utf
Мы заметили, что каждая строка представляет собой информацию о файле или папке, включая в общей сложности семь столбцов:
Первый столбец — это информация о правах доступа к файлу.
Во втором столбце указано количество файлов, подключенных к папке
Третий столбец указывает пользователя, которому принадлежит файл.
Четвертый столбец указывает группу пользователей, к которой принадлежит файл
В пятой колонке указан размер файла (в байтах).
В шестом столбце указана дата последнего изменения
Седьмой столбец представляет имя файла
Информация о правах доступа к файлу в первом столбце очень важна, она состоит из десяти символов:
Первый символ обозначает тип файла, всего их три: - означает, что это файл, d означает, что это папка, и l означает, что это ссылка.
2-4 символа представляют права владельца файла на файл, r для чтения, w для записи, x для выполнения, если это папка, выполнение означает просмотр содержимого папки, например rw- означает, что владелец файла может читать и писать в файл.
5-7 символов представляют собой разрешения группы, к которой принадлежит файл, и значение то же самое.Например, r-x означает, что все пользователи в группе, к которой принадлежит файл, имеют права на чтение и выполнение файла.
8-10 символов представляют права доступа других пользователей к файлу, и смысл тот же.Например, r-- означает отсутствие владельца, а пользователи, не входящие в группу пользователей, имеют только права на чтение файла.
Мы можем использовать команду chmod для изменения прав доступа к файлу или каталогу несколькими способами.
Одним из них является наименование цифровых разрешений. rwx соответствует двоичному числу. Например, 101 означает, что у него есть разрешение на чтение и выполнение. Если его преобразовать в десятичное число, r означает 4, w означает 2, x означает 1, а затем три числа.Сложите, чтобы соответствовать двоичным числам. Например, 7=4+2+1 соответствует rwx, 5=4+1 соответствует r-x. Поэтому, соответственно, 777 представляет собой rwxrwxrwx, то есть владельца, группу пользователей, к которой он принадлежит, и других пользователей, имеющих права на чтение, запись и выполнение файла, что довольно опасно!
Команда для предоставления разрешения выглядит следующим образом:
sudo chmod <permission> <file>
Например, если я хочу предоставить права доступа 777 для файла .txt, я бы написал:
sudo chmod 777 file.txt
Кроме того, мы также можем использовать кодовые имена для предоставления разрешений. Кодовые имена u, g, o и a представляют собой разрешения владельца, разрешения группы пользователей, разрешения других пользователей и все разрешения пользователей. За этими кодами следует + и - символы для управления добавлением и удалением разрешений, за которыми следует тип разрешения, например:
sudo chmod u-x file.txt
Это удаление разрешения x у владельца, которое является разрешением на выполнение.
sudo chmod g+w file.txt
Это добавить разрешение w группе пользователей, то есть разрешение на запись.
Кроме того, если это папка, вы можете рекурсивно назначать права доступа к папке, например:
sudo chmod -R 777 share
Это должно дать 777 разрешений на общую папку и все ее содержимое.
Что ж, с идентификацией разрешений, то мы должны связать пользователей и группы пользователей с файлами.Здесь используются команды chown и chgrp.
Формат команды следующий:
sudo chown <username> <file>
sudo chgrp <group> <file>
Например, если я хочу изменить владельца файла .txt на cqc, я могу использовать следующую команду:
sudo chown cqc file.txt
Если я хочу изменить группу пользователей file.txt на lab, я могу использовать следующую команду:
sudo chgrp lab file.txt
Кроме того, вы также можете использовать -R для выполнения рекурсивных операций, таких как замена владельца общей папки и всего ее содержимого на cqc, команда выглядит следующим образом:
sudo chown -R cqc share/
Что ж, разобравшись с chown, chgrp и chmod, мы можем гибко управлять правами доступа к файлам.
Фактическая демонстрация
Может быть, вышеизложенное немного абстрактно. Давайте используем пример, чтобы продемонстрировать процесс контроля разрешений. Я считаю, что благодаря этому процессу легко понять приведенные выше команды.
Первая ситуация такова: я хочу поделиться некоторыми файлами на определенном хосте с людьми в моей лаборатории, но есть другие люди, не работающие в лаборатории, которые используют этот хост, и я просто хочу, чтобы люди в лаборатории могли просматривать и изменять эти файлы. файлы, другие не могут.
Кроме того, моя собственная учетная запись должна иметь самые высокие полномочия для управления разрешениями на совместное использование этих файлов, то есть полномочия root.
Теперь я вошел в учетную запись ubuntu, которая инициализируется системой и имеет привилегии root.
Далее я смоделирую создание трех учетных записей и группы пользователей, чтобы получить следующие эффекты:
Учетная запись cqc — это учетная запись, которую я использую, с наивысшими полномочиями, которая может свободно настраивать информацию о правах доступа к файлам и может свободно назначать группу пользователей пользователю.
Учетная запись lbd является сотрудником моей лаборатории и не имеет привилегий root, но может просматривать и изменять мои общие файлы.
Учетная запись slb не является сотрудником моей лаборатории, не имеет прав root и не может изменять файлы, которыми я делюсь.
Создайте свою учетную запись
Сначала я создаю учетную запись для себя и добавляю пользователя cqc:
sudo adduser cqc
После запуска вам будет предложено ввести пароль и другую информацию:
Adding user `cqc' ...
Adding new group `cqc' (1002) ...
Adding new user `cqc' (1002) with group `cqc' ...
Creating home directory `/home/cqc' ...
Copying files from `/etc/skel' ...
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Changing the user information for cqc
Enter the new value, or press ENTER for the default
Full Name []:
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n]
В это время обнаруживается, что создана группа с таким же названием.Проверяем группу, в которой находится cqc:
groups cqc
Результат выглядит следующим образом:
cqc : cqc
Затем используйте команду id для просмотра следующей информации:
id cqc
Результат выглядит следующим образом:
uid=1002(cqc) gid=1002(cqc) groups=1002(cqc)
Вы можете видеть, что текущий cqc принадлежит только к группе пользователей cqc.
Затем мы создаем группу пользователей с именем lab для идентификации моей лаборатории с помощью следующих команд:
sudo groupadd lab
Затем посмотрите на членов группы пользователей:
members lab
Нет результата, мы создали пустую группу без участников.
Затем добавляем в эту группу только что созданный нами cqc, потому что я тоже принадлежу к лаборатории, и я тоже должен его добавить.Команда такая:
sudo adduser cqc lab
результат:
Adding user `cqc' to group `lab' ...
Adding user cqc to group lab
Done.
Затем посмотрите на членов следующей группы:
members lab
результат:
cqc
Таким образом, в группе lab есть пользователь cqc.
Не забываем, что для cqc тоже нужны root-права, поэтому нам тоже нужно добавить cqc в группу sudo, команда такая:
sudo adduser cqc sudo
результат:
Adding user `cqc' to group `sudo' ...
Adding user cqc to group sudo
Done.
Это успешно присоединяется к группе sudo, и cqc, который является моей учетной записью, может использовать команду sudo.
Проверьте статус пользователя:
id cqc
Результат выглядит следующим образом:
uid=1002(cqc) gid=1002(cqc) groups=1002(cqc),27(sudo),1003(lab)
Таким образом, cqc принадлежит к трем группам пользователей, которые являются членами лаборатории и имеют привилегии root.
Приведенную выше команду для назначения групп пользователей также можно реализовать с помощью usermod:
sudo usermod -aG sudo,lab cqc
Это добавляет к нескольким группам.
Добавить пользователя лаборатории
Затем добавьте другого человека в лабораторию, lbd, а затем добавьте его в лабораторную группу.Процесс аналогичен.Команда выглядит следующим образом:
sudo adduser lbd
sudo adduser lbd lab
После запуска команда id просматривает свою информацию:
id lbd
Результат выглядит следующим образом:
uid=1004(lbd) gid=1005(lbd) groups=1005(lbd),1003(lab)
Это успешно создало lbd и добавило его в группу lab lab.
Добавить пользователей, не являющихся лабораторными
Наконец, добавьте еще одного пользователя slb, не являющегося членом лаборатории, просто создайте учетную запись, команда выглядит следующим образом:
sudo adduser slb
Но мы не добавляем его в лабораторную группу.
Проверьте его статус:
id slb
Результат выглядит следующим образом:
uid=1003(slb) gid=1004(slb) groups=1004(slb)
Итак, состояние тройки следующее:
id cqc
uid=1002(cqc) gid=1002(cqc) groups=1002(cqc),27(sudo),1003(lab)
id lbd
uid=1004(lbd) gid=1005(lbd) groups=1005(lbd),1003(lab)
id slb
uid=1003(slb) gid=1004(slb) groups=1004(slb)
назначение прав доступа к файлам
Затем мы создаем папку для совместного использования лабораторных данных в каталоге /srv. Затем вызовите команду mkdir, чтобы создать папку с именем share, команда выглядит следующим образом:
cd /srv
sudo mkdir share
Обратите внимание, что я все еще использую учетную запись Ubuntu для ее создания.
Сначала посмотрите на текущие права доступа к каталогу:
ls -l
Результат выглядит следующим образом:
total 12
drwxr-xr-x 3 root root 4096 Sep 4 18:17 ./
drwxr-xr-x 24 root root 4096 Sep 4 18:17 ../
drwxr-xr-x 2 root root 4096 Sep 4 18:17 share/
Видно, что владелец файла общего доступа — root, группа пользователей — тоже root, а разрешение — 755, то есть только root имеет право на изменение, а остальные — только чтение и выполнение.
Затем перейдите в общую папку и создайте файл names.txt:
cd share
sudo vi names.txt
Отредактировано следующим образом:
cqc
lbd
После сохранения проверьте права доступа к файлу следующим образом:
-rw-r----- 1 root root 8 Sep 4 20:00 names.txt
Разрешения равны 640, что означает, что только у root-владельца есть права на запись, а у его группы — только на чтение.
В это время откройте другой терминал и войдите в учетную запись cqc. На самом деле вы не можете просматривать и изменять содержимое любого из файлов. Следующие команды модификации и чтения будут запрашивать недостаточные разрешения:
vi names.txt
cat names.txt
Зачем? Поскольку файл был создан учетной записью ubuntu с помощью команды sudo только что, владельцем файла является root, а не cqc, поэтому, даже если разрешение файла равно 640, разрешение владельца файла нельзя использовать, а cqc не принадлежит корневая группа, поэтому вы не можете использовать разрешения файловой группы, поэтому вы ничего не видите и ничего не можете изменить.
Но cqc принадлежит к группе sudo.Вы можете использовать команду sudo, чтобы временно получить привилегии root и временно управлять файлом как root, чтобы вы могли просматривать и изменять файл, поэтому следующие команды действительны:
sudo vi names.txt
sudo cat names.txt
Но для этого все равно нужно использовать sudo для модификации, что очень неудобно.
В это время, если мы изменим владельца файла на cqc, ситуация будет другой.
Используя учетную запись ubuntu, измените владельца name.txt на cqc.Команда для изменения выглядит следующим образом:
sudo chown cqc names.txt
В это время проверьте следующую информацию о файле:
-rw-r----- 1 cqc root 8 Sep 4 20:29 names.txt
Видно, что информация о владельце стала cqc, так что учетную запись cqc можно напрямую просматривать и изменять, а затем команда sudo больше не требуется:
vi names.txt
cat names.txt
Таким образом, не будет никаких запросов на разрешение, и, конечно же, добавление sudo не составит труда.
Хорошо, а что насчет фунта дальше? Давайте авторизуемся и попробуем изменить его.
Во-первых, текущий статус файла выглядит следующим образом:
-rw-r----- 1 cqc root 8 Sep 4 20:31 names.txt
lbd больше не является владельцем, поэтому предыдущее разрешение rw- бесполезно, но он принадлежит к группе lab, а разрешение файла для группы пользователей — r--, что означает разрешение на чтение.
Давайте используем учетную запись lbd, чтобы попытаться увидеть содержимое файла:
cat names.txt
cat: names.txt: Permission denied
К сожалению, у меня снова нет разрешения. из-за чего? Так как группа пользователей этого файла не является lab, а пользователь lbd не принадлежит к корневой группе, у него нет никаких разрешений.
что теперь? Просто измените группу пользователей файла на lab и используйте учетную запись ubuntu или учетную запись cqc для работы:
sudo chgrp lab names.txt
Таким образом, группа пользователей, к которой принадлежит файл, успешно меняется на lab, а затем используется учетная запись lbd для просмотра содержимого файла:
cat names.txt
успешно прочитано.
Однако сейчас у lbd нет разрешения на запись, потому что для группы пользователей разрешение на файл равно r-- Чтобы получить разрешение на запись, мы можем использовать следующую команду:
sudo chmod g+w names.txt
или:
sudo chmod 660 names.txt
Это эквивалентно предоставлению разрешения rw, давайте попробуем изменить этот файл, используя учетную запись lbd:
vi names.txt
Без проблем.
Так что насчет одноклассников, не являющихся лабами slb? У него нет никаких разрешений, мы входим в учетную запись slb и пытаемся изменить и прочитать файл:
cat names.txt
vi names.txt
Ни у кого нет разрешения.
Таким образом, нам удалось дать разрешения людям в лаборатории, а у людей, которые не были в лаборатории, не было разрешений.
Что делать, если я хочу дать разрешение на чтение для slb? Это просто, просто добавьте:
sudo chmod o+r names.txt
Это то, что добавляет разрешения на чтение для других пользователей. В это время slb может читать файл, но не может изменять его, что также относительно безопасно.
Хорошо, а если у меня много файлов? Например, в расшаренную папку помещается десяток-двадцать, так что права по одному не выставишь, да?
В настоящее время нам нужно работать только с папкой.Следующая команда может дать 775 разрешений на общую папку, то есть владелец cqc и групповая лаборатория могут просматривать и изменять ее, а другие люди могут только видеть и не могут изменять это. :
sudo chmod -R 775 share/
sudo chown -R cqc share/
sudo chgrp -R lab share/
Обратите внимание, что папке обычно дается разрешение x, в противном случае разрешение на вход в папку отсутствует. Вот почему папкам обычно назначаются 775, 755, а файлам — 664, 600, 644, 640.
После предоставления разрешений 775 права доступа становятся:
drwxrwxr-x 2 cqc lab 4096 Sep 4 20:31 share/
Таким образом, другие пользователи могут только видеть и не могут изменять, так что с обычными файлами проблем не будет.
Если папка содержит исполняемые файлы, вы также можете удалить разрешение x для исполняемого файла для других пользователей, например, удалив разрешение на выполнение файла Python:
sudo chmod o-x *.py
Что ж, мы успешно завершили контроль разрешений!
Я считаю, что если вы терпеливо читаете это, с управлением пользователями и управлением разрешениями все в порядке!
Всем привет, меня зовут Цуй Цинцай, инженер Microsoft China Big Data в отделе Microsoft XiaoIce. Конечно, это моя профессия, и я обычно занимаюсь исследованиями и разработками в области поискового робота, веб-разработки, глубокого обучения и т. д.
Я лично хотел бы подвести итоги и поделиться.На этот раз я имею честь поделиться с вами своим опытом, связанным с краулерами на платформе Nuggets, включая сканирование, синтаксический анализ, анти-анти-сканирование, ускорение и т. д. Я надеюсь, что вы получите что-то после прослушивания к этому. .
В это воскресенье (21 октября) я буду гостем в живой комнате Nuggets Bilibili, чтобы дать вам прямую трансляцию «Надежного и эффективного веб-краулера».【Веб ссылки】. Во время прямой трансляции я также выберу 5 небольших партнеров, каждому из которых будет выдана книга «Разработка поискового робота на Python3», надеюсь, все поддержат.