文章目录
1. 文件属性
通过ls -l filename
可以查看文件属性。
第一个属性代表这个文件的类型:
档案类型 | 描述 |
---|---|
d | 目录 |
- | 普通文件 |
l | 链接文件 |
b | 可存储的接口设备 |
c | 串行端口设备,例如键盘、鼠标 |
s | socket,数据接口文件 |
p | FIFO,数据传输文件 |
接下来的属性,三个为一组,以r,w,x为组合,r代表可读,w代表可写,x代表可执行。
2. 用户权限
2.1 使用者和群组
任何一个文件都具有User, Group 及 Others三个权限。User是一个文件的拥有者,Group是文件所在的群组,Others是不属于某一群组的用户。
2.1.2 用户登入linux的过程
- 先读取/etc/passwd中账号信息,找到对应的UID(User ID)和GID(Group ID),linux是根据id来识别用户的;
- 再读取/etc/shadow文件,找到对应的账号和UID核对密码是否正确;
- 如果密码正确,就可以进入shell。
2.1.2 /etc/passwd,/etc/shadow
这两个文件是账号管理最重要的文件。
-
/etc/passwd
该文件存放着账户信息,里面原先就有的账户为系统账户,保障着系统正常的运行。文件内容如下图:
每一行为一个用户信息,通过“:”分隔,主要分为7个部分,分别是:1. 账号名称 2. 密码,现在密码不存储在这里,x表示密码移动到/etc/shadow中 3. UID,使用者的ID
id范围 | 描述 |
---|---|
0 | 代表系统管理员,除了root用户,其他用户的UID改为0,那么那个用户也会变成系统管理员 |
1~499 | 保留给系统用的ID,1~99会保留给系统预设的·账号,100~499则保留给一些服务来使用 |
500~2^32-1 | 给一般使用者使用 |
4. GID,所在群组的ID,与/etc/group中设定有关
5. 使用者信息说明
6. 家目录
7. 使用shell的版本路径
-
/etc/shadow
shadow中一行以“:“为分隔符,分为9个部分:1. 账户名称 ,必须与/etc/passwd中相同 2. 密码,若密码栏第一个字符为”*“或”!",表示这个账号并不会被用来登入。 3. 最近更动密码的日期,1970年1月1日作为1,1971年1月1日则为366 4. 密码不可被变更的天数,若为0,表示密码随时可以变动 5. 密码需要重新变更的天数,若为99999就表示密码不需要重新更改 6. 密码需要变更期限前的警告期限 7. 密码过期的延缓时间,若密码过期,在延缓时间内还可以登录,过了这个时间,密码就失效了 8. 账号失效日期 9. 保留
2.1.3 /etc/group,/etc/gshadow
-
/etc/group
这个文件记录着GID和群组名称,内容如下:
每一行以冒号作为分隔符,分为四个部分:- 群组名称
- 群组密码,通常不需要设定,密码被记录在/etc/gshadow中
- GID,群组的ID,与/etc/passwd中的GID相对应
- 群组中的所有账号,与逗号分隔
-
/etc/gshadow
每一行以冒号作为分隔符,分为四个部分:1. 群组名称 2. 密码。开头为!表示无法登入 3. 群组管理员账号 4. 群组中的所有账号,与逗号分隔
初始群组和有效群组
初始群组指是用户登入系统中,就会拥有的各个群组的相关权限。
newgrp命令可以变更有效群组。
groups命令查看当前用户的所在群组,第一个输出的群组即是有效群组。
2.2 账号管理
2.2.1 新增、删除用户
useradd
Usage: useradd d [-u UID] [-g initial_group] [-G other_group]
Options:
-g, --gid GROUP 指定某账户群组的GID
-G, --groups GROUPS 指定某个群组名称
-u, --uid UID 指定UID
-U, --user-group 创建和用户名相同的群组名
实例:
# 创建一个默认的用户
[root@localhost tmp]# useradd user1
[root@localhost tmp]# ls -l /home/
total 8
drwx------. 4 hadoop hadoop 4096 Feb 9 15:16 hadoop
drwx------. 4 user1 user1 4096 Feb 9 21:00 user1
#此用户的UID为502,GID为502,家目录为/home/user1,群组名和用户名同名
#/etc/passwd中密码栏中为!!,说明用户不可登录,需要使用passwd
[root@localhost tmp]# grep user1 /etc/passwd /etc/shadow /etc/group
/etc/passwd:user1:x:502:502::/home/user1:/bin/bash
/etc/shadow:user1:!!:18302:0:99999:7:::
/etc/group:user1:x:502:
#创建指定用户id和群组名称的账号
[root@localhost tmp]# useradd -u 700 -g users user2
[root@localhost tmp]# grep user2 /etc/passwd /etc/shadow /etc/group
/etc/passwd:user2:x:700:100::/home/user2:/bin/bash
/etc/shadow:user2:!!:18302:0:99999:7:::
# 创建一个系统账号
[root@localhost tmp]# useradd -r user3
[root@localhost tmp]# grep user3 /etc/passwd /etc/shadow /etc/group
/etc/passwd:user3:x:496:493::/home/user3:/bin/bash
/etc/shadow:user3:!!:18302::::::
/etc/group:user3:x:493:
新建用户相关设定文件
使用useradd来新增账户时,相关信息参考/etc/default/useradd这个文件内容设定的。
用户家目录参考/etc/skel/*目录来创建。
用户的UID和GID参考/etc/login.defs文件来设定。
# 用户预设邮件的放置目录
MAIL_DIR /var/spool/mail
# /etc/shadow的第5栏,重置密码的时间间隔
PASS_MAX_DAYS 99999
# /etc/shadow的第4栏,密码不可变更得时间
PASS_MIN_DAYS 0
# 密码最短的字符长度
PASS_MIN_LEN 5
# /etc/shadow的第6栏,密码需要变更期限前的警告期限
PASS_WARN_AGE 7
#用户最小的UID,小于500的UID为系统保留
UID_MIN 500
#用户可以使用的最大UID
UID_MAX 60000
#用户群组最小的GID,小于500为系统保留
GID_MIN 500
#用户群组可以使用的最大GID
GID_MAX 60000
#在不加-M,-m时,是否主动建立用户家目录
CREATE_HOME yes
#文件的默认权限
UMASK 077
#指定删除用户的时候是否同时删除用户组,准备地说,这里指的是删除用户的初始组,此项的默认值为 yes。
USERGROUPS_ENAB yes
#指定用户密码采用的加密规则,默认采用 SHA512
ENCRYPT_METHOD SHA512
useradd在建立用户时,至少参考:
- /etc/default/useradd
- /etc/login.defs
- /etc/skel/*
passwd
Usage: passwd [OPTION...] <accountName>
-k, --keep-tokens 保留未过期的身份认证
-d, --delete 删除指定账户的密码(仅限root用户)
-l, --lock 锁定指定账户的密码(仅限root用户)
-u, --unlock 解锁指定账户的密码(仅限root用户)
-e, --expire 指定帐户的密码过期(仅限root用户)
-f, --force 强制操作
-x, --maximum=DAYS 最大密码生存期(仅限root用户)
-n, --minimum=DAYS 最小密码生存期(仅限root用户)
-w, --warning=DAYS 在密码过期之前警告用户的天数(仅限root用户)
-i, --inactive=DAYS 密码过期后禁用帐户的天数(仅限root用户)
-S, --status 报告指定帐户的密码状态(仅限root用户)
--stdin 从stdin中读取新令牌(仅限root用户)
Help options:
-?, --help 展示命令的帮助信息
--usage 显示使用信息
usermod
Usage: usermod [options] LOGIN
Options:
-c, --comment COMMENT 后面接账号的说明,即 /etc/passwd 第五栏的说明栏,可以加入一些账号的说明。
-d, --home HOME_DIR 后面接账号的家目录,即修改 /etc/passwd 的第六栏
-e, --expiredate EXPIRE_DATE 后面接日期,格式是 YYYY-MM-DD 也就是在 /etc/shadow 内的第八个字段数据
-f, --inactive INACTIVE set password inactive after expiration
to INACTIVE
-g, --gid GROUP 后面接 group name,修改 /etc/passwd 的第四个字段,亦即是 GID 的字段
-G, --groups GROUPS 后面接 group name,修改这个使用者能够支持的群组,修改的是 /etc/group
-a, --append 将用户添加到-G中提到的群组,而不从其他组中删除这个用户
-h, --help 显示该命令的使用方法
-l, --login NEW_LOGIN 后面接账号名称。亦即是修改账号名称, /etc/passwd 的第一栏
-L, --lock 暂时将使用者的密码冻结,让他无法登入。其实仅改 /etc/shadow 的密码栏
-m, --move-home 将主目录的内容移动到新位置(仅与-d一起使用)
-o, --non-unique 允许使用重复的(非唯一的)UID
-p, --password PASSWORD 使用加密的密码作为新密码
-R, --root CHROOT_DIR 改变根目录
-s, --shell SHELL 改变shell版本
-u, --uid UID 用户的UID
-U, --unlock 将 /etc/shadow 密码栏的 ! 拿掉,解除冻结
-Z, --selinux-user SEUSER 用户账号对应得 SELinux用户
实例:
#修改用户的说明栏
root@localhost skel]# usermod -c "user2 testing" user2
[root@localhost skel]# grep user2 /etc/passwd
user2:x:700:100:user2 testing:/home/user2:/bin/bash
#用户user2密码在2020/3/5失效
[root@localhost skel]# usermod -e "20200305" user2
[root@localhost skel]# grep user2 /etc/shadow
user2:$6$HPb1eMam$5RIz5JZO7Q2mEX77zOi3cq/XA9hO254LE.XmP.0.g865DVWPC.cjDDLmO10T1gy8uxce7apKSX3UB/cMXCDh30:18302:0:99999:7::20200305:
#暂时冻结用户密码
#密码中出现!
[root@localhost skel]# usermod -L user2
[root@localhost skel]# grep user2 /etc/shadow
user2:!$6$HPb1eMam$5RIz5JZO7Q2mEX77zOi3cq/XA9hO254LE.XmP.0.g865DVWPC.cjDDLmO10T1gy8uxce7apKSX3UB/cMXCDh30:18302:0:99999:7::20200305:
#解除冻结
[root@localhost skel]# usermod -U user2
[root@localhost skel]# grep user2 /etc/shadow
user2:$6$HPb1eMam$5RIz5JZO7Q2mEX77zOi3cq/XA9hO254LE.XmP.0.g865DVWPC.cjDDLmO10T1gy8uxce7apKSX3UB/cMXCDh30:18302:0:99999:7::20200305:
userdel
Usage: userdel [options] LOGIN
Options:
-f, --force 强制执行一些会失败的操作
-h, --help 显示命令的使用方法
-r, --remove 连同用户的家目录一起删除
删除一个用户可以手动将/etc/passwd和/etc/shadow中的账号移除。若只是暂时不用该用户,可以将/etc/shadow中最后倒数一个字段设定为0,该账号无法使用,但是所有跟账户相关的数据都会留下来。
2.2.2 用户相关信息:chfn,chsh,id
chsh
[dmtsai@linux ~]$ chsh [-ls]
参数:
-l :列出目前系统上面可用的 shell ,其实就是 /etc/shells 的内容
-s :设定修改自己的 Shell
#列举系统上面所有的shell
[root@localhost skel]# chsh -l
/bin/sh
/bin/bash
/sbin/nologin
/bin/dash
/bin/tcsh
/bin/csh
chfn
[root@linux ~]# chfn [-foph]
参数:
-f :后面接完整的大名
-o :办公室的房间号码
-p :办公室的电话号码
-h :家里的电话号码
id
#查看当前用户的相关信息
[root@localhost skel]# id
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
#查看user2用户信息
[root@localhost skel]# id user2
uid=700(user2) gid=100(users) groups=100(users)
2.2.3 新增、删除群组
groupadd
Usage: groupadd [options] GROUP
Options:
-f, --force 如果组已经存在,则成功退出,如果已经使用了GID,则取消-g
-g, --gid GID 后面接某个特定的 GID ,用来直接给予某个 GID
-K, --key KEY=VALUE override /etc/login.defs defaults
-o, --non-unique 允许创建相同的GID
-p, --password PASSWORD 密码
-r, --system 建立系统群组啦!与 /etc/login.defs 内的 GID_MIN 有关
-R, --root CHROOT_DIR 改变根目录
实例:
#新建一个群组,名称为 group1
#在 /etc/gshadow 里面可以发现,密码是不许登入的
[root@localhost skel]# groupadd group1
[root@localhost skel]# grep group1 /etc/group /etc/gshadow
/etc/group:group1:x:503:
/etc/gshadow:group1:!::
#新建一个系统群组,名称为 group2
#系统群组的id小于500
[root@localhost skel]# groupadd -r group2
[root@localhost skel]# grep group2 /etc/group /etc/gshadow
/etc/group:group2:x:492:
/etc/gshadow:group2:!::
groupmod
#修改群组属性
Usage: groupmod [options] GROUP
Options:
-g, --gid GID 修改既有的 GID 数字
-n, --new-name NEW_GROUP 修改既有的群组名称
-o, --non-unique 允许创建相同的GID
-p, --password PASSWORD 改变密码
groupdel
# 删除用户
Usage: groupdel [options] GROUP
gpasswd
Usage: gpasswd [option] GROUP
Options:
-a, --add USER 添加用户到群组
-d, --delete USER 从群组中移除该用户
-r, --delete-password 将 groupname 的密码移除
-R, --restrict 让 groupname 的密码栏失效,所以 newgrp 就不能使用了
-M, --members USER 将某些账号加入这个群组当中
-A, --administrators ADMIN 将 groupname 的主控权交由后面的使用者管理(该群组的管理员)
newgrp
newgrp 会额外以另一个 login 来提供使用者登入到另一个 shell 中, 并且将有效群组改为 newgrp 后面接的那个群组,若没有接群组,则预设群组为 initial group。
2.2.4 使用者身份切换
一般用户切换到root用户有su和sudo两种方式。
su
将用户变成root,需要root密码
Usage: su [OPTION]... [-] [USER [ARG]...]
Change the effective user id and group id to that of USER.
- 如果执行 su - 时,表示该使用者想要变换身份成为 root ,且使用 root 的
环境设定参数档,如 /root/.bash_profile 等等。
-l, --login 后面可以接使用者,
-c, --command=COMMAND 仅进行一次指令
-m, --preserve-environment -m 与 -p 是一样的,表示使用目前的环境设定,而不重新读取新使用者的设定档。
-p 和-m一样
sudo
sudo不需要输入root密码,sudo的工作流程:
- 当用户执行sudo时,系统会查看/etc/sudoers文件,判断该使用者时候有执行sudo的权限
- 若使用者具有可执行 sudo 的权限后,便让使用者输入使用者自己的密码来确认;
- 若密码输入成功,便开始进行 sudo 后续接的指令;
- 不过, root 执行 sudo 时,不需要输入密码;
- 若欲切换的身份与执行者身份相同,那也不需要输入密码。
[root@linux ~]# sudo [-u [username|#uid]] command
参数:
-u :后面可以接使用者账号名称,或者是 UID。
查看/etc/sudoers文件,发现其中一行为:
hadoop ALL=(ALL) NOPASSWD:ALL
#用户账号 登入的主机=(可以变换的身份) 可以下达的指令
#hadoop这个用户,可以变换为Linux中上所有账号,并执行所有指令
#NOPASSWD:设定这个参数表示用户使用sudo时,不需要使用密码
#用户账户前加%,表示一个群组
%wheel ALL=(ALL) ALL