Linux用户和组
用户和组的相关文件
文件名 | 作用 |
---|---|
/etc/passwd | 系统中的账号信息 |
etc/shadow | 存放密码及其策略相关信息 |
/etc/group | 存放用户组的信息 |
/etc/gshadow | 存放用户组的密码及其策略相关信息 |
/etc/default/useradd | 创建新用户时默认的配置信息 |
/etc/skel/* | Directory containing default files. |
/etc/login.defs | 用户和组默认的配置信息 |
/etc/shells | 该文件记录着合法的 shell 版本 |
/etc/passwd文件
说明:存放用户相关信息,每一行都代表一个用户,有几行就代表有几个账号在你的系统中,每一行都以冒号作为分隔符有7个字段。
root | x | 0 | 0 | root | /root | /bin/bash |
---|---|---|---|---|---|---|
用户名称 | 密码占位符 | uid | gid | 说明信息 | 用户家目录 | 用户登录shell |
/etc/shadow文件
说明:存放密码及其策略相关信息,以冒号作为分隔符九个字段。`
root | 省略 | 14126 | 0 | 99999 | 7 | 空 | 空 | 空 |
---|---|---|---|---|---|---|---|---|
账户名 | 加密后密码 | 最近密码修改的日期 | 密码不可被更动的天数 | 密码需要重新变更的天数 | 密码需要变更期限前的警告天数 | 密码过期后的账号宽限时间 | 账号失效日期 | 保留 |
/etc/group文件
root | x | 0 | root |
---|---|---|---|
组名 | 群组密码,一般不设定 | GID | 此群组支持的账号名称 |
/etc/default/useradd文件
[root@www ~]# cat /etc/default/useradd
# useradd defaults file
GROUP=100 # 预设的群组
HOME=/home # 默认的家目录所在目录
INACTIVE=-1 # 密码失效日 , 在 shadow 第 7 栏
EXPIRE= # 账号失效日 , 在 shadow 第 8 栏
SHELL=/bin/bash # 预设的 shell /sbin/nologin 将无法登陆
SKEL=/etc/skel # 用户家目录的内容数据参考目录
CREATE_MAIL_SPOOL=yes # 是否主动帮助使用者建立邮件信箱 (mailbox)
/etc/skel/目录
[root@www skel]# ll -a /etc/skel
total 40
drwxr-xr-x. 4 root root 4096 Jan 2 01:58 .
drwxr-xr-x. 125 root root 12288 Mar 21 03:09 ..
-rw-r--r--. 1 root root 18 Jul 9 2013 .bash_logout
-rw-r--r--. 1 root root 176 Jul 9 2013 .bash_profile
-rw-r--r--. 1 root root 124 Jul 9 2013 .bashrc
-rw-r--r--. 1 root root 500 May 7 2013 .emacs
drwxr-xr-x. 2 root root 4096 Jul 14 2010 .gnome2
drwxr-xr-x. 4 root root 4096 Jan 2 01:52 .mozilla
/etc/login.defs文件
[root@www ~]# cat /etc/login.defs
MAIL_DIR /var/spool/mail # 用户默认邮件信箱放置目录
PASS_MAX_DAYS 99999 # /etc/shadow 第5栏,密码需要重新变更的天数
PASS_MIN_DAYS 0 # /etc/shadow 第4栏,密码不可被更动的天数
PASS_MIN_LEN 5 # 密码最短的字符长度,已被pam模块取代,失去效用
PASS_WARN_AGE 7 # /etc/shadow 第6栏,过期前会警告天数
UID_MIN 500 # 使用者最小的 UID 不能 <500
UID_MAX 60000 # 使用者最大的 UID 不能 >60000
GID_MIN 500 # 自定义组最小的 UID 不能 <500
GID_MAX 60000 # 自定义组最大的 UID 不能 >60000
CREATE_HOME yes # 默认是否主动建立用户家目录
UMASK 077 # 用户家目录建立的umask
USERGROUPS_ENAB yes # 使用userdel时,是否会删除初始群组
ENCRYPT_METHOD SHA512 # 经过 SHA512 进行加密处理
/etc/shells文件
[root@www skel]# cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/bin/dash
/bin/tcsh
/bin/csh
用户和组的相关命令
用户和组 | |
---|---|
新建组 | groupadd |
新建用户 | useradd |
修改密码 | passwd 密码 >8 位字符、小写 / 大写 / 数字 / 特殊符号之间任选 3 位 |
修改用户属性 | usermod |
修改组属性 | groupmod |
修改密码属性 | chage |
修改 shell | chsh |
删除用户 | userdel |
作用 | 命令 |
------------- | -------- |
删除组 | groupdel |
查看已存在用户的基本信息 | id |
查看当前用户支持的群组信息 | groups |
新建组:groupadd
groupadd [options] group
# 新建组 test 制定 gid 为 888
[root@www ~]# groupadd -g 888 test
新建用户:useradd
useradd [options] LOGIN
[root@www ~]# useradd -u 888 -g 888 -s /sbin/nologin alice
[root@www ~]# id alice
uid=888(alice) gid=888(test) groups=888(test)
[root@www ~]# tail -n 1 /etc/passwd
alice:x:888:888::/home/alice:/sbin/nologin
[root@www ~]# tail -n 1 /etc/shadow
alice:!!:16880:0:99999:7:0:16881:
设置密码:passwd
passwd [-k][-l] [-u [-f]][-d] [-e][-n mindays] [-x maxdays] [-w] warndays] [-i inactivedays] [-S] [--stdin] [username]
# 给alice用户设置密码
[root@www ~]# passwd alice
Changing password for user alice.
New password:
BAD PASSWORD: it is based on a dictionary word
Retype new password:
passwd: all authentication tokens updated successfully.
# 设置密码失效日期为 7 天
[root@www ~]# passwd -i 7 alice
Adjusting aging data for user alice.
passwd: Success
修改组属性:groupmod
groupmod [options] GROUP
[root@www ~]# groupmod -g 999 test
[root@www ~]# grep test /etc/group
test:x:999:
[root@www ~]# groupmod -n test1 test
[root@www ~]# grep test /etc/group
test1:x:999:
修改用户属性:usermod
usermod [options] LOGIN
[root@www ~]# usermod -g test2 -G test3 alice
[root@www ~]# id alice
uid=888(alice) gid=1000(test2) groups=1000(test2),1001(test3)
[root@www ~]# usermod -s /sbin/nologin alice
[root@www ~]# grep alice /etc/passwd
alice:x:888:1000::/home/alice:/sbin/nologin
[root@www ~]# su - alice
This account is currently not available.
修改密码策略:chage
chage [options] LOGIN
[root@www ~]# chage alice
Changing the aging information for t1
Enter the new value, or press ENTER for the default
Minimum Password Age [0]:
Maximum Password Age [99999]:
Last Password Change (YYYY-MM-DD) [2016-03-20]:
Password Expiration Warning [7]:
Password Inactive [7]:
Account Expiration Date (YYYY-MM-DD) [2016-03-21]:
修改shell:chsh
chsh [-s shell][-l] [-u][-v] [username]
[root@www ~]# chsh -s /bin/bash lucky
Changing shell for alice.
Shell changed.
[root@www ~]# grep lucky /etc/passwd
t1:x:888:1000::/home/lucky/bin/bash
删除组:groupdel
groupdel [options] GROUP
[root@www ~]# groupdel hello
[root@www ~]# grep hello /etc/group
删除用户:userdel
userdel [options] LOGIN
[root@www ~]# tail -n 3 /etc/group
test:x:999:
test2:x:1000:
test3:x:1001:t1
[root@www ~]# groupdel test3
[root@www ~]# tail -n 3 /etc/group
baby:x:490:
test:x:999:
test2:x:1000:
[root@www ~]# userdel -r alice
[root@www ~]# grep alice /etc/passwd
查看用户信息:id
id [OPTION]... [USER]
[root@www ~]# id root
uid=0(root) gid=0(root) groups=0(root)
[root@www ~]# id -g root
0
[root@www ~]# id -u root
0
查看组信息:groups
groups [OPTION]... [USERNAME]…
[root@www ~]# groups
root
切换用户身份:su
su [options...] [-] [user [args...]]
# 使用 root 切换成为任何使用者时 , 不需要输入新用户密码
[root@www ~]# su - jenny
Last login: Tue Jul 31 18:42:08 CST 2018 on pts/1
# 使用普通用户切换成为任何使用者时 , 需要输入对应用户密码
[jenny@www ~]$ su -
Password:
Last login: Fri Aug 3 15:27:19 CST 2018 from 220.248.35.50 on pts/1
Last failed login: Fri Aug 3 15:48:33 CST 2018 on pts/1
There was 1 failed login attempt since the last successful login.
临时切换用户身份:sudo
sudo [-u user name | uid] [command]
sudo 执行流程
- 在 /etc/sudoers 档案中查看 user 是否有 sudo 执行权限
- 若有 sudo 执行权限 , 『输入用户的密码』
- 密码正确 , 开始执行 sudo 后续接的指令
- root 无需密码,自己切换自己也无需密码
添加用户 sudo 执行权限的方法
- visudo 可以让系统检验 /etc/sudoers 的语法是否正确
- 修改 /etc/sudoers 中的语法
语法说明
# 单用户授权
username ALL=(ALL) ALL
# 群组授权
%groupname ALL=(ALL) ALL
# 免密码登录
%groupname ALL=(ALL) NOPASSWD: ALL
# 命令别名设置
Cmnd_Alias PROCESSES = /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall
# 用户别名设置
User_Alias ADMINS = jsmith, mikem
实验:设置指定免密sudo操作权限
[root@www ~]# visudo
Cmnd_Alias TEST = /bin/cat, /usr/bin/tail, /usr/bin/test, /usr/bin/stat, /bin/grep, /usr/bin/find, /sbin/iptables-save,/usr/bin/socat, /usr/sbin/ss
alice ALL = NOPASSWD: TEST
Linux 文件属性和权限
作者:Jenny
邮箱:jenny1228.li@foxmail.com
文件属性
类 Unix 系统的设计初衷就是为让多用户同时工作,所以也迫使 Linux 系统有了极强的安全性。接下来我们一起来看看 linux 系统示如何实现安全性的。
[root@mastera0 tmp]# ll /
total 4148
lrwxrwxrwx. 1 root root 7 May 5 17:28 bin -> usr/bin
dr-xr-xr-x. 4 root root 4096 May 5 17:40 boot
drwxr-xr-x. 15 root root 4096 Aug 19 13:19 content
-rw------- 1 root root 2166784 Aug 8 05:24 core.2052
-rw------- 1 root root 19017728 Aug 8 05:27 core.2488
drwxr-xr-x 19 root root 3380 Oct 26 12:22 dev
drwxr-xr-x. 138 root root 12288 Oct 26 12:22 etc
drwxr-xr-x. 4 root root 31 Aug 23 17:32 home
lrwxrwxrwx. 1 root root 7 May 5 17:28 lib -> usr/lib
lrwxrwxrwx. 1 root root 9 May 5 17:28 lib64 -> usr/lib64
drwxr-xr-x. 2 root root 6 May 25 2015 media
drwxr-xr-x. 2 root root 6 May 25 2015 mnt
drwxr-xr-x. 4 root root 36 May 6 13:19 opt
dr-xr-xr-x 229 root root 0 Oct 26 2016 proc
dr-xr-x---. 26 root root 4096 Oct 12 14:11 root
drwxr-xr-x 39 root root 1200 Oct 26 12:24 run
lrwxrwxrwx. 1 root root 8 May 5 17:28 sbin -> usr/sbin
drwxr-xr-x. 2 root root 6 May 25 2015 srv
dr-xr-xr-x 13 root root 0 Oct 26 2016 sys
drwxrwxrwt. 31 root root 4096 Oct 26 12:42 tmp
drwxr-xr-x. 13 root root 4096 May 5 17:28 usr
drwxr-xr-x. 23 root root 4096 Oct 26 2016 var
第一列内容的第一位字母就揭露了文件的类型。
文件的分类
文件类型 | 符号 | 说明 |
---|---|---|
普通文件 | - | 包括纯文本文件(ASCII);二进制文件(binary);数据格式的文件(data);各种压缩文件 |
目录文件 | d | windows中的文件夹 |
字符设备 | c | 行端口的接口设备,例如键盘、鼠标等等 |
块设备文件 | b | 存储数据以供系统存取的接口设备,简单而言就是硬盘。 |
套接字文件 | s | 这类文件通常用在网络数据连接。可以启动一个程序来监听客户端的要求,客户端就可以通过套接字来进行数据通信。 |
管道文件 | p | 解决多个程序同时存取一个文件所造成的错误 |
链接文件 | l | 类似于windows的快捷方式 |
UGO权限说明
Linux 系统中一切都是文件,文件和目录的所属与权限 —— 来分别规定所有者、所有组、其余人的读,写,
执行权限。
读 (read) ,写 (write) ,执行 (execute ),简写即为 (r\w\x) ,亦可用数字 (4\2\1) 表示
例如:
[root@www opt]# ll -d backup
drwxr-xr-x 2 jenny jenny 4096 Mar 22 2018 backup
# 该文件类型为:目录
# 文件拥有者为:jenny
# 文件所属组为:jenny
# 对于jenny用户具有rwx权限,即可读可写可执行
# 对于jenny组内的其他用户具有rx权限,即可读可执行。
# 对于除了jenny用户和jenny组内的用户,其他人具有rx权限,即可读可执行权限。
UGO权限对于文件和目录的实际意义
普通文件即实际保存数据的地方,其并不具备删除自身的权限:
- r: 可读取文件的实际内容
- w: 可编辑 / 新增 / 修改该文件的实际内容
- x: 可被执行
目录文件即保存有目录结构和文件权限:
- r: 可读取目录结构和权限
- w: 可更改目录结构列表、新建 / 删除 / 重命名 / 转移子文件 / 目录。
- x: 表示用户可进入到该目录中
特殊权限 suid|sgid|ticky
单纯对文件位置的 rwx 权限肯定不能满足我们对安全、便捷工作的需求,所以便有了 SUID 与 SGID 的特
殊权限机制。
SUID:
- 范围 : 二进制的可执行的文件
- 作用 : 临时拥有所有者的权限
SGID:
- 范围 : 目录或者拥有可执行权限的文件
- 作用 : 继承目录所属组
SBIT ( STICKY )
- 范围 : 目录
- 作用 : 只有 root 用户和文件拥有者有权删除目录中的文件。
隐藏属性 ATTR
文件权限除了 UGO 读写执行与 SUID 、 SGID 、 SBIT 外还有一种隐藏权限,例如明明有权限删除某个文件
却报错了,或者仅能为某个文件追加内容而不能减少内容,遇到这种很 “ 奇怪 ” 的文件,就要怀疑是文件被设
置隐藏权限了。
chattr 命令用于设置文件的隐藏权限,格式为: “ chattr [ 参数 ] 文件 ” 。
参数 | 作用 |
---|---|
i | 将无法对文件进行修改,若对目录设置后则仅能修改子文件而不能新建或删除。 |
a | 仅允许补充(追加)内容.无法覆盖/删除(Append Only)。 |
S | 文件内容变更后立即同步到硬盘(sync)。 |
s | 彻底从硬盘中删除,不可恢复(用 0 填充原文件所在硬盘区域)。 |
A | 不再修改这个文件的最后访问时间(atime)。 |
b | 不再修改文件或目录的存取时间。 |
D | 检查压缩文件中的错误。 |
d | 当使用 dump 命令备份时忽略本文件/目录。 |
c | 默认将文件或目录进行压缩。 |
u | 当删除此文件后依然保留其在硬盘中的数据,方便日后恢复。 |
t | 让文件系统支持尾部合并(tail-merging)。 |
X | 可以直接访问压缩文件的内容。 |
lsattr 命令用于显示文件的隐藏权限,格式为: “ lsattr [ 参数 ] 文件 ” 。
参数 | 作用 |
---|---|
a | 显示所有文件和目录。 |
l | 显示隐藏属性的全称(默认简写成一个字母)。 |
R | 递归处理,将指定目录下的所有文件及子目录一并处理。 |
d | 若目标文件为目录,请加此参数。 |
文件访问控制列表 ACL
不知大家有没有发现其实上面讲解的 rwx 权限、特殊权限、隐藏权限都是对某一类用户设置的,而如果希望
对某个指定的用户进行单独的权限设置,那么就需要用文件的访问控制列表来实现啦。
我们可以基于普通文件或目录设置进行设置 ACL ,通俗来说 ACL 就是设置指定的特定用户或用户组对某个
文件的操作权限。并且如果对某个目录设置了访问控制策略,那么子文件则继承其访问策略,而若对文件设
置了访问控制策略则不再继承上级目录的控制策略。
ACL:Access Control List 缩写 ,UGO 的 rwx 权限以外的细部权限设置。
- setfacl 命令用于增加或者修改 ACL 规则,格式为: ” setfacl [ 参数 ] 文件 ” 。
- getfacl 命令用于显示文件的 ACL 规则,格式为: ” getfacl 文件 ” 。
详细命令用法请看第三章节。
权限的修改
chmod
作用:修改指定文件的r\w\x权限
命令用法:chmod [ u g o a 所有用户 ][ + - = ] [ rwx] /[ 777]
- w 结合 x 权限可以对目录下的文件进行以下操作 : cd rm touch cp
- r 结合 x 权限可以对目录下的文件进行 ls 操作
- x 决定了能否进入目录
[ root@www tmp]# ll jenny
-rw-r--r--. 1 root root 0 Mar 21 06:09 jenny
[ root@www tmp]# chmod 750 jenny
[ root@www tmp]# ll jenny
-rwxr-x---. 1 root root 0 Mar 21 06:09 jenny
chown
作用:修改文件的拥有者和所属组
命令用法:chown user:group 目录 / 文件
- -R 针对目录递归修改拥有者
[ root@www tmp]# chown jenny:jenny test
[ root@www tmp]# ll test
-rwxrwxrwx. 1 jenny jenny 0 Mar 21 06:09 test
chgrp
作用:修改文件的所属组
命令用法:chgrp [-R] group file/dir
[ root@www tmp]# chgrp -R jenny testdir
[ root@www tmp]# ll -R testdir
testdir:
total 4
drwxr-xr-x. 3 jenny jenny 4096 Mar 21 06:11 1
dabao1/1:
total 4
drwxr-xr-x. 2 jenny jenny 4096 Mar 21 06:11 2
dabao1/1/2:
total 0
umask
作用:修改文件、目录的默认创建权限
命令用法:umask num
公式:最大权限 - umask = 默认权限
[ root@www tmp]# umask
0022
ATTR 权限命令
chattr
作用:配置文件隐藏属性
属性设置常见的是 a 和 i 的设定 , 必须要 root 身份
命令用法:chattr [ +-= ][ ASacdistu] file/dir
参数 | 作用 |
---|---|
+ | 增加 |
- | 移除 |
= | 设定为 |
A | 访问时间 atime 不修改 , 对速度较慢计算机有帮助 |
S | 『同步』写入磁盘 |
a | 只能增加数据 , 不能删除 / 修改数据 (root) |
c | 自动『压缩』 , 读取时自动解压缩 |
d | 不被 dump 备份 |
i | 以下操作不可执行 : 『删除、改名、设置连结、写入、新增资料』 ( root ) |
s | 彻底删除 , 无法挽回 |
u | 与 s 相反 , 删除可挽回 |
lsattr
作用:显示文件attr属性
命令用法:lsattr [ -adR] file/dir
参数 | 作用 |
---|---|
-a | 显示隐藏文件的属性 |
-d | 仅列出目录本身属性 |
-R | 连同子目录 |
A
[root@mastera0 tmp]# chattr +A file1
[root@mastera0 tmp]# lsattr file1
-------A-------- file1
[root@mastera0 tmp]# cat file1
hi
[root@mastera0 tmp]# stat file1
File: ‘file1’
Size: 3
Blocks: 8
IO Block: 4096 regular file
Device: fd00h/64768d
Inode: 52973916 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:user_tmp_t:s0Access: 2016-06-22 14:49:50.221000000 +0800
Modify: 2016-06-22 14:49:48.025000000 +0800
Change: 2016-06-22 14:50:14.621000000 +0800
Birth: -
[root@mastera0 tmp]# cat file1
hi
[root@mastera0 tmp]# stat file1
File: ‘file1’
Size: 3
Blocks: 8
IO Block: 4096 regular file
Device: fd00h/64768d
Inode: 52973916 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:user_tmp_t:s0
Access: 2016-06-22 14:49:50.221000000 +0800
Modify: 2016-06-22 14:49:48.025000000 +0800
Change: 2016-06-22 14:50:14.621000000 +0800
Birth: -
[root@mastera0 tmp]# chattr -A file1
a 只能增加数据 , 不能删除 / 修改数据 (root)
[root@mastera0 tmp]# chattr +a file1
[root@mastera0 tmp]# lsattr file1
-----a---------- file1
[root@mastera0 tmp]# echo 99 > file1
-bash: file1: Operation not permitted
[root@mastera0 tmp]# echo 99 >> file1
[root@mastera0 tmp]# cat file1
hi
99
i 以下操作不可执行 : 『删除、改名、设置连结、写入、新增资料』 ( root )
[root@mastera0 tmp]# chattr +i file1
[root@mastera0 tmp]# rm -rf file1
rm: cannot remove ‘file1’: Operation not permitted
[root@mastera0 tmp]# mv file1 file100
mv: cannot move ‘file1’ to ‘file100’: Operation not permitted
[root@mastera0 tmp]# link file1 file1h
link: cannot create link ‘file1h’ to ‘file1’: Operation not permitted
[root@mastera0 tmp]# echo nini>>file1
-bash: file1: Permission denied
[root@mastera0 tmp]# chattr -i file1
[root@mastera0 tmp]# lsattr file1
---------------- file1
### 3.3 ACL 权限命令
#### 3.3.1 ACL 权限概念
ACL:Access Control List 缩写 ,UGO 的 rwx 权限以外的细部权限设置。
ACL 可以针对单一用户 , 单一文件 , 单一目录 r,w,x 的权限规范
针对几个项目 :
1. 使用者 (user): 可以针对使用者设定权限
2. 群组 (group): 针对群组为对象设定权限
3. 默认属性 (mask): 还可以针对在该目录下在建立新档案或目录时 , 规范新数据的默认权限
#### 3.3.2 getfacl
取得文件 / 目录的 ACL 设定内容
getfacl filename
```shell
[root@www tmp]# getfacl jenny
file: jenny
owner: jenny
group: jenny
user::rwx
group::rwx
other::rwx
ACL权限设置
setfacl
作用:解决ugo权限限制粒度不足问题
命令用法:setfacl [-bkRd][{-m|-x} acl 参数 ] file/dir
参数 | 作用 |
---|---|
-m | 设置 acl 参数 |
-x | 删除 acl 参数 |
-b | 删除所有 acl 参数 |
-k | 删除预设的 acl 参数 |
-R | 递归设置 acl 参数 |
-d | 设置『预设 acl 参数』只对目录有效 , 在该目录新建的数据会引用 |
使用举例:
[root@mastera0 tmp]# setfacl -m u:student:rwx file1
[root@mastera0 tmp]# setfacl -m g:student:rw file1
[root@mastera0 tmp]# getfacl file1
file: file1
owner: root
group: root
user::rw-
user:student:rwx
group::r--
group:student:rw-
mask::rwx
other::r--
-d 针对预设权限 , 属性将继承到次目录
[root@mastera0 tmp]# mkdir test
[root@mastera0 tmp]# setfacl -d -m u:student:rwx test
[root@mastera0 tmp]# getfacl test
file: test
owner: root
group: root
user::rwx
group::r-x
other::r-x
default:user::rwx
default:user:student:rwx
default:group::r-x
default:mask::rwx
default:other::r-x
[root@mastera0 tmp]# ll test -d
drwxr-xr-x+ 2 root root 6 Jun 22 15:09 test
[root@mastera0 tmp]# touch test/jenny
[root@mastera0 tmp]# ll test
total 4
-rw-rw-r--+ 1 root root 0 Jun 22 15:10 jenny
[root@mastera0 tmp]# getfacl jenny
file: jenny
owner: root
group: root
user::rw-
user:student:rwx
effective:rw-
group::r-x
effective:r--
mask::rw-
other::r--
切换为 student 用户
[student@mastera0 tmp]$ cd
[student@mastera0 dabao]$ ll
total 4
-rw-rw-r--+ 1 root root 0 Jun 22 15:10 jenny
[student@mastera0 dabao]$ cat jenny