用户和组是非常重要的概念,主要用于控制对系统资源的访问和权限管理。
用户
Linux系统中的每个用户都由一个唯一的用户名标识,用户可以属于一个或多个组。用户的详细信息通常存储在/etc/passwd文件中。该文件中的每一行都代表一个用户,其中包含7个字段,它们分别是:
组
在Linux系统中,组是一组用户的集合,每个组都有一个唯一的组名和组ID(GID)。组的详细信息通常存储在/etc/group文件中。该文件中的每一行都代表一个组,其中包含4个字段,它们分别是:
在Linux中,skel是指骨架(Skeleton)的缩写,通常用于在创建新用户时自动设置用户的默认环境。skel文件夹通常位于/etc/skel目录下,该目录中包含一些文件和目录,它们被用作新用户的默认文件和目录。
**当创建新用户时,系统会自动复制/etc/skel目录中的所有文件和目录到新用户的主目录中。**这些文件和目录包括用户的shell配置文件(例如.bashrc和.profile),以及一些默认的模板文件(例如.desktop文件),可以帮助新用户快速上手并使用系统。
通过编辑/etc/skel目录下的文件和目录,管理员可以自定义新用户的默认环境。例如,可以添加自定义的shell脚本、设置默认的终端和编辑器、设置默认的桌面环境等等。这样可以使得新用户在创建时拥有一个与系统当前环境相似的默认环境。
需要注意的是,skel文件夹中的文件和目录对已经存在的用户没有任何影响,它们只会影响新用户的默认环境。如果需要修改已经存在用户的环境,需要手动修改他们的配置文件或目录。
家目录下的三个脚本文件
.bash_logout 用户退出的时候自动执行
.bash_profile 用户登录的时候执行
.bashrc 进入新的bash环境的时间执行
如何正确的选择脚本文件
用户个性化设置:
只对当前用户生效,就修改家目录下的.bashrc或者.bash_profile文件
全局生效,针对所有用户生效 ,系统设置 /etc/bash_profile /etc/bashrc
useradd
是一个 Linux 命令,用于创建新用户账户
语法
useradd [选项] 用户名
-c
:用于指定用户的注释。注释通常包括用户的姓名、电话号码、邮箱等信息。-d
:用于指定用户的主目录。如果不指定,则默认为 /home/用户名
。-g
:用于指定用户的初始登录组。-m
:如果指定了 -d
选项,则使用该选项可以创建用户的主目录。-s
:用于指定用户的默认 shell。如果不指定,则默认为 /bin/bash
。-u
:用于指定用户的 UID。如果不指定,则会自动分配一个未被使用的 UID。查看passwd文件
[root@localhost home]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
查看用户sc的信息
[root@localhost home]# id sc1
uid=1001(sc1) gid=1001(sc1) 组=1001(sc1)
没有指明组,会自动创建跟用户同名的组
[root@localhost home]# useradd -g sc1 -G sc sc2
-g 指定基本组 :只有一个
-G 指定附加组 :可以有多个
指定某个组就拥有了这个组的权限了、方便管理
[root@localhost home]# id sc2
uid=1002(sc2) gid=1001(sc1) 组=1001(sc1),1000(sc)
指定用户id
[root@localhost home]# useradd -u 2000 sc3
-u创建的时候指定id
[root@localhost home]# id
uid=0(root) gid=0(root) 组=0(root) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
创建用户的时候,不指定用户id是,默认情况下,id会在前一个用户的基础上加一
[root@localhost home]# useradd sc4
[root@localhost home]# id
uid=0(root) gid=0(root) 组=0(root) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[root@localhost home]# useradd -c "test sc5" sc5
>-c指定用户的说明信息
[root@localhost home]# grep sc5 /etc/passwd
sc5:x:2002:2002:test sc5:/home/sc5:/bin/bash
>普通情况下,一个普通用户,只能在家目录
[root@localhost home]# useradd -d /opt/home/sc6 sc6
>-d 指定家目录
useradd:无法创建目录 /opt/home/sc6
[root@localhost home]# grep sc6 /etc/passwd
sc6:x:2003:2003::/opt/home/sc6:/bin/bash
[root@localhost home]# useradd -s /bin/sh sc7
[root@localhost home]# grep sc7 /etc/passwd
sc7:x:2004:2004::/home/sc7:/bin/sh
[root@localhost home]# su - sc7
-sh-4.2$ 登录shell
需要注意的是,useradd
命令只能被 root 用户或者具有 sudo 权限的用户执行。如果没有指定密码,则新用户无法登录系统。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IemYOo8T-1685365645928)(C:\Users\asus\AppData\Roaming\Typora\typora-user-images\image-20230519183437340.png)]
修改/etc/passwd,在文件末尾添加信息
hellow:x:6688:6688:wudangpai:/home/hellow:/bin/bash
修改/etc/shadow,设置密码,这里设置为空
hellow::19496:0:99999:7:::
修改/etc/group
wudangpai:x:6688:
新建家目录
[root@localhost ~]# mkdir /home/hellow
复制环境变量初始化脚本到家目录下
[root@localhost skel]# cp /etc/skel/.* /home/hellow/
新建一个邮箱
[root@localhost mail]# touch /var/spool/mail/hellow
截止目前,我们已经可以切换当hellow
用户,因为是root新建用户的,所有切换到hellow用户
后不完全适合用户的需求。
[hellow@localhost ~]$ mkdir aa
mkdir: 无法创建目录"aa": 权限不够
[hellow@localhost ~]$ ll -d /home/hellow
drwxr-xr-x 2 root root 62 5月 19 18:42 /home/hellow
这个时候我们需要修改家目录相关的权限。修改家目录相关的权限是为了确保该用户能够正常访问和使用自己的家目录。
同样的我们也需要修改邮箱的相关权限。
,修改家目录相关的权限
[root@localhost mail]# chown hellow:wudangpai /home/hellow/
[root@localhost mail]# chmod 700 /home/hellow
[root@localhost mail]# ll -d /home/hellow
drwx------ 2 hellow wudangpai 62 5月 19 18:42 /home/hellow
修改邮箱的相关权限
[root@localhost mail]# chown hellow:mail /var/spool/mail/hellow
[root@localhost mail]# chmod 660 /var/spool/mail/hellow
重新登录hellow
,
[hellow@localhost ~]$ mkdir aa
[hellow@localhost ~]$ ls
aa
可以看到用户hellow
已经可以执行基本的功能了。
以上就是手工新建用户的全部过程了。
usermod命令用于修改现有用户的属性和设置。通过使用usermod命令,管理员可以修改用户的用户名、用户ID、主目录、默认shell、附加组等属性。
语法
usermod [选项] 用户名
其中,用户名指要修改的现有用户的用户名。选项用于指定要进行的修改操作,下面是一些常用选项的介绍:
-l
: 修改用户的用户名。-u
: 修改用户的用户ID。-d
: 修改用户的主目录。-s
: 修改用户的默认shell。-G
: 修改用户所属的附加组。-a
: 将用户添加到指定的附加组中。-c
: 修改用户的备注信息。 usermod -l newusername oldusername
usermod -u 1001 username
usermod -d /home/newdir username
usermod -s /bin/bash username
usermod -G group1,group2 username
usermod -aG groupname username
usermod -c "New comment" username
需要注意的是,usermod命令需要使用root用户或具有sudo权限的用户来执行。
userdel
是一个 Linux 命令,用于删除用户账户
语法
userdel [选项] 用户名
-r
:删除用户账户和主目录以及用户的邮箱目录。这个选项应该谨慎使用,因为它会彻底删除用户的所有数据,包括文件和文件夹。如果你想要保留用户的主目录,不要使用该选项。-f
:强制删除用户账户。如果用户当前正在登录系统,或者用户的某些进程正在运行,userdel
默认会拒绝删除该用户,但是使用 -f
选项可以强制删除用户账户。-Z
:将用户的 SELinux 安全上下文设置为默认值 userdel john
userdel -r john
userdel -f john
userdel alice bob charlie
需要注意的是,userdel
命令只能被 root 用户或者具有 sudo 权限的用户执行,否则会提示权限不足。
在Shell中,chpasswd是一个用于批量修改用户密码的命令。它允许你通过脚本或命令行一次性修改多个用户的密码,而不需要逐个手动输入。
chpasswd命令通常使用文本文件作为输入,该文件包含了用户名和对应的新密码。它将读取文件中的每一行,将用户名和密码分开,并将新密码设置给相应的用户。
以下是chpasswd命令的详细解释:
用法:chpasswd [选项]
选项:
-c, --crypt-method METHOD 使用指定的加密方法对密码进行加密
-e, --encrypted 密码已经是加密的形式
-h, --help 显示帮助信息并退出
-m, --md5 使用 MD5 加密算法加密密码
-R, --root CHROOT_DIR 在指定的 chroot 目录中执行操作
-s, --sha-rounds ROUNDS 使用 SHA 加密算法加密密码,并指定循环次数
要使用chpasswd命令,你需要具有root权限或sudo权限。
chpasswd命令常用选项的解释如下:
chpasswd命令的典型用法如下:
$ chpasswd < password_file.txt
password_file.txt是一个包含用户名和密码的文本文件,每行一个用户,用冒号(:)分隔用户名和密码。例如:
user1:password1
user2:password2
$ echo "user1:$6$4sLTwmYs$TlT2Sdz1W9GfYRoUZGruO4ZRA" | chpasswd -e
上述命令中的密码已经是经过加密的,使用-e
选项告诉chpasswd命令密码已经是加密形式。
$ echo "user1:password1" | chpasswd -c SHA
上述命令将使用SHA加密算法来加密密码。
需要注意的是,chpasswd命令会直接修改密码,而不会进行任何确认。因此,在使用该命令时要小心,确保输入的密码是正确的并且你具有相应的权限。
当在CentOS 7的Shell中使用mkpasswd
命令时,它用于生成加密密码。这个命令在Linux系统中常用于创建安全的用户密码,特别适用于自动化脚本和系统配置文件。下面是对mkpasswd
命令的超详细解释。
语法
mkpasswd [选项]... [密码]
选项
-l, --length <长度>
:指定生成密码的长度。默认情况下,生成的密码长度为9个字符。-d, --method <方法>
:指定生成密码的加密方法。可以选择以下加密方法之一:des
、md5
、sha-256
、sha-512
。默认使用md5
方法。-R, --rounds <轮数>
:对于使用SHA-256和SHA-512加密方法,指定密码散列的轮数。默认值为5000。-s, --salt <盐>
:为密码加密指定自定义盐值。-S, --sha-rounds <轮数>
:对于使用SHA-256和SHA-512加密方法,指定密码散列的轮数。与-R
选项功能相同。密码
可以通过两种方式提供密码:
mkpasswd
命令。如果没有提供密码参数,则会提示用户输入密码。
示例
$ mkpasswd
输出:
s3cr3tP4ss
$ mkpasswd -l 12 -d des
输出:
3KhMjJbE9.oI.
$ mkpasswd -l 16 -d sha-512 -s mySalt
输出:
$6$mySalt$32xqDW8wO1iGV5MjgSDU4gXQ2lsJ6oZPFSKQm7UuavPCNpOIZrQQDEOHgmfY4eDjWWxDV8TWlGoo6GMz8zqeh/
以上是对mkpasswd
命令的超详细解释。该命令的主要功能是生成加密密码,以增加密码的安全性。使用时,根据实际需求选择合适的密码长度和加密方法,并妥善保管生成的密码。
在Shell中,chmod
命令用于修改文件或目录的权限。chmod
是"change mode"(改变模式)的缩写。通过使用chmod
命令,你可以添加或删除文件或目录的读取、写入和执行权限。以下是chmod
命令的详细介绍和使用方法:
语法:
chmod [选项] 模式 文件或目录
选项:
-R
:递归地修改目录及其子目录中的文件权限。模式:
模式用于指定要应用的权限更改。它可以使用以下格式之一:
数字形式:使用三个数字表示权限,每个数字范围是0-7。第一个数字表示所有者权限,第二个数字表示群组权限,第三个数字表示其他用户权限。每个数字对应的权限如下:
chmod 755 file.txt
将文件file.txt
的权限设置为所有者具有读、写和执行权限,群组和其他用户具有读和执行权限。符号形式:使用符号来表示权限更改。符号形式由以下组成:
chmod u+x file.txt
将文件file.txt
的所有者添加执行权限。文件或目录:
表示要修改权限的目标文件或目录的路径。
示例用法:
设置文件的读写权限:
chmod +rw file.txt
这将为文件file.txt
添加读取和写入权限。
设置目录及其子目录中文件的执行权限:
chmod -R +x directory
这将递归地为目录directory
及其子目录中的所有文件添加执行权限。
设置群组和其他用户的只读权限:
chmod go-w file.txt
这将删除文件file.txt
的群组和其他用户的写权限。
使用数字形式设置文件的权限:
chmod 644 file.txt
这将为文件file.txt
设置权限为所有者具有读写权限,群组和其他用户具有只读权限。
chmod
命令允许你根据需要更改文件或目录的权限。它是管理文件系统权限的重要工具,在Shell脚本、系统管理和文件权限管理中广泛使用。请注意,更改文件权限可能需要管理员权限或所有者权限。
在Shell中,chown
命令用于更改文件或目录的所有者(用户)和所属组。chown
是"change owner"(改变所有者)的缩写。通过使用chown
命令,你可以将文件或目录的所有权转移给其他用户或组。以下是chown
命令的详细介绍和使用方法:
语法:
chown [选项] 用户名[:组名] 文件或目录
选项:
-R
:递归地修改目录及其子目录中的所有文件和目录的所有者。用户名:
表示要将文件或目录的所有者更改为的用户名。
组名:
(可选)表示要将文件或目录的所属组更改为的组名。如果未提供组名,则默认为与用户名相同的组名。
文件或目录:
表示要更改所有者和所属组的目标文件或目录的路径。
示例用法:
更改文件的所有者:
chown john file.txt
这将将文件file.txt
的所有者更改为用户john
。
更改文件的所有者和所属组:
chown mary:users file.txt
这将将文件file.txt
的所有者更改为用户mary
,所属组更改为users
。
递归地更改目录及其子目录中的所有文件和目录的所有者:
chown -R john:users directory
这将递归地将目录directory
及其子目录中的所有文件和目录的所有者更改为用户john
,所属组更改为users
。
注意事项:
chown
命令可能需要管理员权限或所有者权限,因为只有所有者或管理员才能更改文件的所有者。chown :users file.txt
。chown
命令在Shell中是一个重要的权限管理工具,允许你更改文件和目录的所有者和所属组。它在系统管理、文件共享和安全设置方面非常有用。请确保在使用chown
命令时谨慎操作,以免意外更改了文件的所有权。
改变属主
[root@localhost shell-test]# chown sc1 h.sh
[root@localhost shell-test]# ls -al h.sh
-rwxr-xr-x. 1 sc1 root 32 4月 10 15:22 h.sh
第一种修改属主和数组:
[root@localhost shell-test]# chown sc1:sc2 h.sh
[root@localhost shell-test]# ls -al h.sh
-rwxr-xr-x. 1 sc1 sc2 32 4月 10 15:22 h.sh
第二种修改属主和数组:
[root@localhost shell-test]# chown sc1.sc3 h.sh
[root@localhost shell-test]# ls -al h.sh
-rwxr-xr-x. 1 sc1 sc3 32 4月 10 15:22 h.sh
在Linux中,切换用户时可以选择是否切换当前环境,这取决于使用的命令以及切换用户的方式。下面是CentOS 7中几种常见的切换用户方式及其对当前环境的影响:
需要注意的是,切换用户时会导致环境变量、工作目录等的改变,可能会影响当前进程的运行。因此,在切换用户前应该确认当前进程的状态,以避免不必要的错误。
su
是一个 Linux 命令,用于切换当前用户身份到另一个用户身份。
语法
su [选项] [用户名]
以下是 su
命令常用的选项:
-
: 使用该选项可以切换到另一个用户的环境,包括环境变量、工作目录等。-c
:用于执行一个命令。可以使用该选项在切换用户身份后立即执行一个命令,并在命令执行完成后切换回原来的用户身份。-s
:用于指定 shell。可以使用该选项指定要使用的 shell,如果不指定,则默认使用 /bin/sh
。su sc1
直接切换到sc1用户,不切换当前的环境
su - sc1
直接切换到sc1用户,并且切换当前的环境
在Linux系统中,sudo是一种授权管理工具,可以允许用户以另一个用户身份执行命令。通常情况下,sudo需要管理员授予用户权限才能使用。
在大多数Linux系统中,sudo已经预装了。如果没有,可以通过包管理工具进行安装。以Ubuntu系统为例,可以使用以下命令安装sudo:
sudo apt-get update
sudo apt-get install sudo
在安装完sudo后,需要进行配置才能使用。可以通过以下步骤进行配置:
a. 添加用户到sudo组
在Linux系统中,sudo命令是由sudo组授权的用户才能使用的。因此,首先需要将用户添加到sudo组中。可以使用以下命令添加用户到sudo组:
sudo usermod -aG sudo username
其中,username是要添加的用户名。
b. 编辑sudoers文件
sudoers文件是sudo的配置文件,存储着哪些用户可以使用sudo命令以及可以执行哪些命令。可以使用以下命令编辑sudoers文件:
sudo visudo
vim /etc/sudoers
在sudoers文件中,可以添加以下内容:
username ALL=(ALL) ALL
其中,username是要允许使用sudo命令的用户名。
在配置完sudo后,可以使用以下命令以root用户身份执行命令:
sudo command
其中,command是要执行的命令。
需要注意的是,使用sudo命令需要谨慎,因为执行的命令具有root用户的权限,可以对系统造成损害。建议只在必要的情况下使用sudo命令,并且在使用前仔细确认要执行的命令。
在Linux系统中,sudo命令可以切换到另一个用户的身份来执行命令。如果需要切换到另一个用户的环境下执行命令,可以使用sudo -i或sudo -E命令。
使用sudo -i命令可以切换到另一个用户的身份,并进入该用户的登录shell环境。这意味着,用户环境变量、工作目录等会被切换到新用户的值。使用以下命令切换到root用户的环境:
sudo -i
在切换到root用户的环境后,可以执行需要root权限的命令。
使用sudo -E命令可以切换到另一个用户的身份,并保留当前用户的环境变量。这意味着,用户环境变量、工作目录等不会被切换到新用户的值。使用以下命令切换到root用户的环境:
sudo -E command
其中,command是要执行的命令。
需要注意的是,在使用sudo命令切换到另一个用户的身份时,需要谨慎确认要执行的命令,并避免对系统造成不必要的损害。
/etc/sudoers
是一个配置文件,用于定义sudo
命令的授权规则和权限限制。它规定了哪些用户或用户组可以以超级用户(root)的权限执行特权命令。
以下是关于/etc/sudoers
文件的详细说明:
文件位置: /etc/sudoers
文件位于Linux系统中的根目录下。它是一个系统级别的文件,只能由超级用户(root)进行编辑。
文件格式: /etc/sudoers
文件的格式是基于特定的语法规则。通常使用visudo
命令来编辑此文件,以确保语法正确且文件完整。
用户授权: /etc/sudoers
文件中的条目定义了哪些用户或用户组有权使用sudo
命令以及可以执行的特权命令。以下是一些常用的授权示例:
用户名 主机=(授权用户) 命令
其中,用户名
指定了具有sudo权限的用户,主机
表示可以使用sudo的主机或主机组(通常使用ALL表示所有主机),(授权用户)
指定了该用户可以切换到的授权用户,命令
表示可以以sudo权限执行的命令。
命令别名: /etc/sudoers
文件支持命令别名的定义。通过使用Cmnd_Alias
关键字,可以将一组复杂的命令定义为别名,以简化文件中的授权规则。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jK2g5Tqz-1685365645930)(C:\Users\asus\AppData\Roaming\Typora\typora-user-images\image-20230519181916649.png)]
这里定义了USERMANAGER
拥有用户的新增、删除、修改密码、用户组的新增、ip等功能。
特殊用户和组: /etc/sudoers
文件中有一些特殊的用户和用户组,其中包括:
root ALL=(ALL:ALL) ALL
表示root用户可以在所有主机上执行所有命令,相当于无限制的特权。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Mw58o7OI-1685365645930)(C:\Users\asus\AppData\Roaming\Typora\typora-user-images\image-20230519182201333.png)]
这表示用户sc98
拥有USEMANAGER、NERWORKING
等功能。
%sudo组: %sudo ALL=(ALL:ALL) ALL
表示sudo组中的用户可以在所有主机上执行所有命令。
%sudo用户组: %sudo ALL=(ALL) NOPASSWD:ALL
表示sudo用户组中的用户可以在所有主机上执行所有命令,而无需输入密码。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JRMojh7e-1685365645930)(C:\Users\asus\AppData\Roaming\Typora\typora-user-images\image-20230519182348452.png)]
这表示用户组xiyouji
拥有USEMANAGER、NERWORKING
等功能,只有用户属于xiyouji
组就可以使用该组的所有功能了。
权限限制: /etc/sudoers
文件中可以定义对sudo命令的进一步限制。例如,可以限制用户使用sudo时必须输入密码,或者可以限制用户只能在特定的终端或主机上使用sudo。
注释: 在/etc/sudoers
文件中,使用#
符号可以添加注释。注释对于提供文件的可读性和可维护性非常有用。
请注意,编辑/etc/sudoers
文件时要非常小心,以免意外更改或删除授权规则,导致系统不可访问或安全风险。为了避免错误,建议始终使用visudo
命令来编辑文件,
在Linux系统中,login是一个命令行工具,用于登录到系统中。在登录时,login会要求用户输入用户名和密码,并根据用户提供的信息验证身份。如果验证成功,login会启动用户的登录shell,并将用户的工作目录设置为HOME目录。
在Linux系统中,可以通过按下Ctrl+Alt+T组合键打开终端窗口。
在终端窗口中,输入登录用户名和密码,按下Enter键确认。
login new_user
其中,new_user是要登录的新用户的用户名。
如果输入的用户名和密码正确,login会启动该用户的登录shell,并将用户的工作目录设置为HOME目录。
需要注意的是,在使用login命令登录到系统后,用户的环境变量、别名等都是新的。如果用户需要保留当前环境,可以使用su命令切换用户身份,或者在当前用户下使用sudo命令执行需要root权限的命令。