一、Linux用户
1. 用户分类
Linux的用户可以分为三种:超级用户、系统用户和普通用户。
-
超级用户(root):拥有最高权限,在系统中是唯一的。
-
普通用户:权限受限制的用户,但在自己的家目录下有着完整权限。
-
程序用户:安装软件时,需要设置软件的执行用户。这种用户不用登录,只需要执行软件。或者称为系统用户。
Linux的超级用户是root,并不是因为名字是root,而是超级用户的UID(用户身份标识号)是0。在Linux系统中,UID是唯一的,因此可以通过UID来判断用户是身份。超级用户的UID是0,程序用户(系统用户)的UID是1~999,普通用户的UID是从1000开始。
2. 用户账户文件
Linux系统中的/etc/passwd文件,是系统用户配置文件,存储了系统中所有用户的基本信息。下面是文件的部分内容;
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
……
ljj:x:1000:1000:ljj,,,:/home/ljj:/bin/bash
sshd:x:129:65534::/run/sshd:/usr/sbin/nologin
nginx:x:1001:1001:::/sbin/nologin
文件的每一行就代表一个用户,使用“:”作为分隔符,被分为7个字段。下面是每行的格式:
用户名:密码:UID:GID:描述性信息:用户家目录:默认Shell
- 密码的“x” 表示此用户有密码,但不是真正的密码,真正的密码保存在/etc/shadow文件中。
下面是/etc/shadow的主要内容:
root:$y$j9T$5TQm6GAwLu6myOEk9cza60$BqcdScNz2I5eanNovQ9LLKs69aypATFEohIS0svQic8:20024:0:99999:7:::
daemon:*:19773:0:99999:7:::
bin:*:19773:0:99999:7:::
……
ljj:$y$j9T$JaxFmwkQqrlvHiFPvRwXd1$cA2npm1uotsM3URtA9nNpboiFbRb7sMM9E3rGtmJxo4:20024:0:99999:7:::
sshd:*:20024:0:99999:7:::
nginx:!:20025:0:99999:7:::
文件中的每行代表一个用户,同样使用“:”作为分隔符,不同之处在于,每行用户信息被划分为 9 个字段。每个字段的含义如下:
用户名:加密密码:最后一次修改时间:最小修改时间间隔:密码有效期:密码需要变更前的警告天数:密码过期后的宽限时间:账号失效时间:保留字段
- 加密密码处为“!”或“*”说明密码为空。
3. su命令 – 切换用户身份
su命令来自英文单词switch user的缩写,功能是切换用户身份。将管理员切换至任意用户身份时无须密码验证,而将普通用户切换至任意用户身份时均需密码验证。
su [选项] 用户名
常见的选项:
选项 | 功能 |
---|---|
- | 完全切换用户 |
-
su -是将用户和Shell环境都切换,而su是只切换用户。
-
只执行su命令,不指定用户名,就是切换到超级用户(root)。
-
使用su切换用户后,系统会尝试加载该用户的登录环境,这包括加载目标用户的环境变量、启动文件和配置等。
4. hostnamectl命令 – 显示与设置主机名称
hostnamectl命令来自于英文词组hostname control的缩写,功能是显示与设置主机名称。基于/etc/hostname文件修改主机名称时,必须要重启服务器后才可生效,而使用hostnamectl命令设置过的主机名称可以立即生效。
hostnamectl [选项] [用户名]
常见的选项:
选项 | 功能 |
---|---|
set-hostname | 设置用户名 |
status | 显示主机名和系统信息 |
5. useradd命令 – 创建并设置用户信息
useradd命令的功能是创建并设置用户信息。
useradd [选项] 用户名
常见的选项:
选项 | 功能 |
---|---|
-d | 指定用户家目录 |
-m | 自动创建用户家目录 |
-M | 不创建用户家目录 |
-s | 指定用户的默认Shell |
-u | 指定用户的UID |
6. userdel命令 – 删除用户
userdel命令来自英文词组user delete的缩写,功能是删除用户信息。
userdel [选项] 用户名
常见的选项:
选项 | 功能 |
---|---|
-r | 删除用户家目录 |
7. passwd命令 – 修改用户的密码
passwd命令来自英文单词password的缩写,功能是修改用户的密码值;同时也可以对用户进行锁定等操作,但需要管理员身份才可以执行。
passwd [选项] [用户名]
常见的选项:
选项 | 功能 |
---|---|
-d | 清除用户密码 |
-l | 锁定用户密码 |
-S | 查看用户密码状态 |
-u | 解锁用户密码 |
-
除了通过命令交互修改密码,还可以通过命令修改密码。
-
CentOS:echo 密码 | passwd --stdin 用户名
-
Ubuntu:echo “用户名:密码” | chpasswd
注意:在Ubuntu系统中,通过命令行设置的密码必须要遵循一定的规则:长度不短于8位,要包含特殊字符、大小写字母、数字。
-
8. usermod命令 – 修改用户信息
usermod命令来自英文词组user modify的缩写,功能是修改用户信息中的各项参数。
usermod [选项] 用户名
常见的选项:
选项 | 功能 |
---|---|
-d | 修改用户家目录 |
-e | 修改用户有效时间 |
-g | 修改用户所在组 |
-G | 修改用户附加组 |
-L | 锁定用户密码 |
-s | 修改用户默认Shell |
-u | 修改用户的UID |
-U | 解锁用户密码 |
二、Linux组群
1. 组文件
Linux系统中/etc/group文件是有关于系统管理员对用户和用户组管理的文件,用户组的所有信息都存放在/etc/group文件中。下面是文件的部分内容:
root:x:0:
daemon:x:1:
bin:x:2:
……
ljj:x:1000:
sambashare:x:136:ljj
nginx:x:1001:
文件中的每行就代表一个用户组,使用“:”作为分隔符,被分为4个字段。下面是每行的基本格式:
组名:口令:GID:组内用户列表
- 一般而言,Linux系统用户组的口令字段为空,或者是“*”。
2. groupadd命令 – 创建新的用户组
groupadd命令的功能是创建新的用户组。每个用户在创建时都有一个与其同名的用户组。可以使用groupadd命令创建出新的用户组信息,让多个用户加入指定的用户组,从而提供文件共享环境。
groupadd [选项] 用户组
常见的选项:
选项 | 功能 |
---|---|
-g | 指定用户组的GID |
3. gpasswd命令 – 管理用户组
gpasswd命令来自英文词组group password的缩写,其功能是设置管理用户组。可以使用gpasswd命令对用户组进行管理,比如设置或删除密码、添加/或删除组成员、设置组管理员或普通成员等。
gpasswd [选项] 用户组名
常见的选项:
选项 | 功能 |
---|---|
-a | 添加用户到用户组 |
-d | 删除用户组的用户 |
-M | 设置用户组成员,逗号分隔用户 |
4. groupdel命令 – 删除用户组
groupdel命令来自英文词组“delete a group”的缩写,功能是用于删除用户组。
groupdel [选项] 用户组名
常见的选项:
选项 | 功能 |
---|---|
-f | 强制删除 |
三、全局环境配置和用户环境配置
在Linux系统中,/etc目录下存放的是系统配置文件,用户的配置文件存放在用户的家目录下。
1. 全局环境配置
- /etc/profile:为所有用户定义了环境变量和shell的启动行为。当用户登录系统时,这个文件都会被首先执行。
- /etc/bashrc:是Bash shell专用的配置文件,它为每个新的Bash shell会话定义了环境和行为。用户启动一个新的Bash会话时,该文件都会被执行。
2. 用户环境配置
- ~/.profile:用户的个人文件,只有在该用户登录时,该文件才会被执行。
- ~/.bashrc:这是用户的个人Bash shell配置文件,仅在该用户启动新的Bash shell会话时执行。
四、权限管理
1. Linux文件权限
在Linux系统中,文件的权限针对所有者、所属组和其他用户这三类用户进行定义,每类用户对文件都有三个主要的权限:
- r(可读)
- w(可写)
- x(可执行)
2. chmod命令 – 改变文件权限
chmod命令来自英文词组change mode的缩写,功能是改变文件权限。
chmod [选项] 权限 文件
常见的选项:
选项 | 功能 |
---|---|
-R | 递归处理 |
权限可以使用数字表示法,也可以使用字母表示法。
-
数字表示法:可读、可写、可执行分别用4、2、1表示。
chmod 421 test
-
字母表示法:
u、g、o、a分别表示所有者、所属组、其他用户、所有用户。
+表示增加权限,-表示减少权限,=表示重新设置权限。
chmod u=r,g=w,o=x test
3. chown命令 – 改变文件的所有者和所属组
chown命令来自英文词组change owner的缩写,功能是改变文件或目录的用户和用户组信息。
chown [选项] 所有者:所属组 文件 # 或所有者.所属组
- 只更改所有者:chown 所有者 文件
- 只更改所属组:chown :所属组 文件 或 chown .所属组 文件
常见的选项:
选项 | 功能 |
---|---|
-R | 递归处理 |
4. Linux文件权限掩码
Linux系统当中的文件权限掩码,是指文件权限设置当中的umask。umask决定了用户创建目录及文件的默认权限值。umask的值是一个八进制数,用于屏蔽掉文件或目录的默认权限。对于文件,默认权限是666(可读可写);对于目录,默认权限是777(可读可写可执行)。创建一个目录或文件后所的实际权限,就是默认权限减去umask所得到的权限。
-
使用umask命令,可以查看系统的umask值。
umask 0022 # 第一个0表示umak是八进制数
-
创建一个文件和一个目录,查看文件和目录的权限。
touch text1 && mkdir dir1
查看文件和目录权限,发现文件的权限是644,目录的权限是755。
drwxr-xr-x 2 root root 4096 10月 30 14:45 dir1 -rw-r--r-- 1 root root 0 10月 30 14:45 text1
-
通过查看权限可以发现,目录的实际权限符合默认权限-umask的值,而文件的权限却不符合。这个是因为在Linux系统中,出于安全考虑,创建的文件都不能有可执行权限。要想文件拥有可执行权限,则必须通过chmod命令来进行权限的设置。
五、总结实验
-
创建一个普通用户zhangsan。
useradd -m -s /bin/bash zhangsan
-
设置该用户的密码。
passwd zhangsan
-
进入/opt目录,创建一个test.sh文件,在文件中写入以下内容:
#!/bin/bash echo "欢迎来到Linux的世界!"
-
保存文件后,使用chmod命令设置文件权限。
chmod 777 /opt/test.sh
-
进入zhangsan的家目录,编辑.profile文件,在文件的最后一行写入以下内容,表示调用刚刚所编写的test.sh文件。
/opt/test.sh
-
使用source执行.profile,该文件会执行test.sh文件。执行命令后可以看到终端的输出内容。
source .profile
-
切换位zhangsan用户,同样可以看到test.sh中设置的内容输出。
su - zhangsan
-
切换回root用户,查看test.sh文件的所有者和所属组。将该文件的所有者和所属组都切换为zhangsan,再重新切换为zhangsan用户。同样有设定好的内容输出。
chown zhangsan.zhangsan /opt/test.sh
su - zhangsan