当前位置: 首页 > Linux

Linux用户、用户组和权限

时间:2023-04-07 00:57:42 Linux

用户类型除root用户外,Linux账户(用户)一般分为两种,系统账户和普通账户。系统账户主要用于运行特定的守护程序。比如我们添加特殊的Linux用户www和mysql来运行Nginx和MySQL。这是为了方便控制??程序权限(即运行该程序的账号的权限),防止攻击者能够在系统中执行任意其他操作。系统账户一般将其登录shell设置为/sbin/nologin,即不能通过shell登录。使用系统账户运行程序的一般方式是通过sudo以系统账户启动程序。普通账户是分配给Linux系统用户的账户。默认情况下,添加用户时,将为用户创建主目录和邮件假脱机(/var/mail/username),但系统帐户不会。普通账号uid>=1000,系统账号uid<1000添加用户默认情况下(不指定options),创建用户的同时会创建一个与账号同名的用户组,这个用户组将被指定为帐户的主要组(此处称为主要用户组)。一个用户可以属于多个用户组,只能指定一个主组,即用户的默认组,即用户创建文件后该文件的组属性值。主要组以外的组是补充组(这里称为附加用户组)。命令:$useradd[options]LOGIN_NAME常用的选项有:-r创建系统账户,不会创建家目录-s指定登录shell,默认为/bin/bash,可以指定为/sbin/nologin-g为用户指定其他主用户组,如果不指定,将创建一个与用户同名的组作为其主用户组。-G为用户指定一个额外的用户组,可以有多个。如果通过usermod命令给用户增加一个额外的用户组,可以加上-a参数:$usermod-a-GGROUP_NAMELOGIN_NAME用户和用户组相关的系统文件Linux(这里更准确的说应该是GNU/Linux.PureLinux常指Linux内核,为了方便,本文将Linux发行版或GNU/Linux统称为Linux,请指正)用户数据库以文件形式存储在/etc/下,所以有时我们可以不使用命令直接操作文件来添加/修改/删除用户,但最好不要这样做,以免格式不正确。/etc/passwd用户账号信息/etc/shadow用户密码信息/etc/group用户组信息/etc/sudoers指定可以执行sudo命令的用户...[root@centos~]#ll/etc/passwd/etc/影子/etc/group/etc/sudoers-rw-r--r--.1rootroot464Jan1912:57/etc/group-rw-r--r--.1rootroot882Jan1912:57/etc/passwd--------.1rootroot812Jan1912:57/etc/shadow-r--r-----.1rootroot4328Jan1912:57/etc/sudoers查看相关文件权限,可见除root用户外的其他用户无法操作用户账号数据。如果普通用户可以随意删除和修改用户账号,就会出现很多问题,这显然是不允许的。用户登录后的shell[root@centos~]#grepxvrzhao/etc/passwdxvrzhao:x:1000:1000::/home/xvrzhao:/bin/bashfile/etc/passwd每一行是一个账号信息,不同的Attributes分开by:,最后一个属性是登录shell,默认为/bin/bash。可以直接修改/etc/passwd文件,也可以在通过useradd或usermod命令添加用户时指定(-s参数)或修改用户登录shell。系统会为每个登录的用户分配一个shell环境,作为用户与操作系统交互的一种方式。常见的shell环境包括sh、bash、zsh等,用户登录后,系统会为当前的Shell环境设置一些环境变量(可以理解为session),首先读取/etc/profile设置,然后阅读~/.bash_profile设置。前者是全局设置,影响每个用户,后者是个人设置,只影响个体(详见鸟哥Linux私房菜相关章节)。设置用户密码添加用户后,无法通过新用户登录,因为没有为其设置登录密码。passwd[OPTION...]root用户可以通过命令passwd设置自己的密码,也可以通过命令passwdaccountName设置其他账户的密码。其他账户只能设置自己的密码。用户组管理您可能需要预先添加一个用户组,然后再将其他用户添加到该组,或删除一个组。可以直接修改/etc/group文件,也可以使用命令。groupaddaddgroupdeldelete...具体用法见man。sudo-之前使用其他用户的身份执行命令,我误以为sudo是借用root身份执行命令。其实它不仅可以借用root,还可以借用任何其他用户的身份,前提是root用户已经为你启用了相关权限。这个权限文件是/etc/sudoers,但是通常我们不会直接操作这个文件,而是通过visudo命令。su命令是切换用户,需要输入切换到的用户的密码。通过sudo以其他用户身份执行命令是输入自己的密码,不是其他用户的密码。su不能切换到没有shell的用户,但是sudo可以以无shell用户的身份执行命令。$sudocmd#如果没有指定用户,以root运行cmd$sudo-usomebodycmd#以someone[xvrzhao@centos~]运行cmd[xvrzhao@centos~]$visudo#...##允许root在任何地方运行任何命令rootALL=(ALL)ALL##允许组wheel中的人运行所有命令left在哪些主机上执行sudo,右边指定哪些用户可以执行该命令,后面跟一个空格,后面指定哪些命令可以通过sudo执行(命令必须是绝对路径)。以上输出是默认配置,可以看到:root用户可以以任意用户身份运行任意命令,wheel组的用户也可以以任意用户身份运行任意命令。如果在命令前加上NOPASSWD:,你连自己的密码都没有需要在默认配置里输入,除了root以外的其他用户不能使用sudo,root需要给其他用户开放sudo权限,指定他可以用哪个身份运行which命令,或者直接将用户添加到wheel组(usermod-a-GwheelUSER)。但是在默认配置下,使用sudo执行命令时,环境变量会被重置,PATH变量也不例外,可能会导致某些命令找不到。可以打印前后环境变量进行对比:$env#打印当前用户下的环境变量$sudoenv#使用sudo执行命令时打印环境变量我们可以通过visudo更改默认配置,让一些环境可以保留变量:#重置环境变量Defaultsenv_reset#保留环境变量Defaultsenv_keep="HTTP_PROXYHTTPS_PROXYNO_PROXYPATH"#注释下面一行,否则env_keep中的PATH会被secure_path覆盖#Defaultssecure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin”保存退出,即可生效。删除用户userdel[options]USERNAME要彻底删除一个用户,先执行find/-userUSERNAME搜索所有属于该用户的文件,删除文件,然后执行userdel-rUSERNAME,-r参数表示删除user它还删除了它的主目录和它的邮件假脱机。文件和文件夹权限[xvrzhao@centos~]$lltotal0drwxrwxr-x。2xvrzhaoxvrzhao19年1月6日14:50my_dir-rw-rw-r--。1xvrzhaoxvrzhao0Jan1914:50my_file我们知道文件文件的权限属性分为u/g/o和r/w/x。对于文件和文件夹,它们的r/w/x有不同的含义:filer可以读取文件内容w可以修改文件内容xfile可以执行文件夹r可以查看该文件夹下的文件名称列表w可以创建,删除,重命名和移动这个文件夹中的文件x你可以把这个文件夹作为工作目录,也就是你可以cd到这个文件夹。权限设置鸟哥私房菜-linux下文件权限和目录配置文件/文件夹权限