1. 用户组
RHEL 7/CentOS 7系统中的用户组有如下3类:
超级用户,UID 0:系统的超级用户。
系统用户,UID 1-999:系统中系统服务由不同用户运行,更加安全,默认被限制不能登录系统。
普通用户,UID1000~60000:即管理员创建的用于日常工作而不能管理系统的普通用户。
1.1 groupadd 添加用户组
一般创建用户的时候会自动创建与用户名相同的基本组,而groupadd命令通常单独创建用户组,并且作为部分用户的附加组,便于对这部分用户的权限做集中管理。
语法
groupadd [选项] group
示例
# 创建一个名为xxx的用户组
groupadd xxx
# 创建一个名为xxx的用户组,同时指定GID为1234
groupadd -g 1234 xxx
# 创建一个名为mariadb的系统组
groupadd -r mariadb
# 创建一个名为docker的系统组,同时指定GID为888
groupadd -r -g 888 docker
1.2 groupmod 修改组属性
语法
roupmod [选项] GROUP
示例
# 将名为mariadb的组重命名为mysql
groupmod -n mysql mariadb
# 将名为nginx的组GID改为777
groupmod -g 777 nginx
1.3 groupdel 删除用户组
示例
# 删除名为docker的用户组
groupdel docker
1.4 gpasswd 组(密码/用户)操作
语法
gpasswd [选项] 组
选项
-a, --add USER 向组 GROUP 中添加用户 USER
-d, --delete USER 从组 GROUP 中添加或删除用户
-h, --help 显示此帮助信息并推出
-Q, --root CHROOT_DIR 要 chroot 进的目录
-r, --delete-password Remove the password from the named group. The group password will be empty. Only group members will be allowed to use newgrp to join the named group.
-R, --restrict Restrict the access to the named group. The group password is set to "!". Only group members with a password will be allowed to use newgrp to join the named group.
-M, --members USER,... 设置组 GROUP 的成员列表
-A, --administrators ADMIN,... 设置组的管理员列表
示例
# 向group1组中添加用户user1
gpasswd -a user1 group1
# 从group1组中删除用户
gpasswd -d user1 group1
# 移除组密码
gpasswd -r group1
# 设置group1组的成员为user1、user2
gpasswd -M user1,user2 group1
# 设置group1组的管理员为user1、user2
gpasswd -A user1,user2 group1
1.5 newgrp (临时)登录到指定的组
语法
newgrp [-] [group]
-: 会模拟用户重新登录以实现重新初始化其工作环境;
2. 用户
2.1 useradd 创建用户
# 用法
useradd [选项] 用户名 (创建用户,默认设定配置文件/etc/login.defs)
useradd -D:显示创建用户的默认配置;
useradd -D 选项: 修改默认选项的值;(结果保存于/etc/default/useradd文件中)
# 选项(更多选项查看帮助)
-u, --uid UID:指定UID;
-g, --gid GROUP:指定基本组ID,此组得事先存在;
-G, --groups GROUP1[,GROUP2,...[,GROUPN]]]:指明用户所属的附加组,多个组之间用逗号分隔;
-c, --comment COMMENT:指明注释信息;
-d, --home HOME_DIR:以指定的路径为用户的家目录;通过复制/etc/skel此目录并重命名实现;指定的家目录路径如果事先存在,则不会为用户复制环境配置文件;
-s, --shell SHELL:指定用户的默认shell,可用的所有shell列表存储在/etc/shells文件中;
-r, --system:创建系统用户;
2.2 usermod:修改用户属性
# 用法
usermod [选项] 登录
# 选项
-u, --uid UID:修改用户的ID为此处指定的新UID;
-g, --gid GROUP:修改用户所属的基本组;
-G, --groups GROUP1[,GROUP2,...[,GROUPN]]]:修改用户所属的附加组;原来的附加组会被覆盖;
-a, --append:与-G一同使用,用于为用户追加新的附加组;
-c, --comment COMMENT:修改注释信息;
-d, --home HOME_DIR:修改用户的家目录;用户原有的文件不会被转移至新位置;
-m, --move-home:只能与-d选项一同使用,用于将原来的家目录移动为新的家目录;
-l, --login NEW_LOGIN:修改用户名;
-s, --shell SHELL:修改用户的默认shell;
-L, --lock:锁定用户密码;即在用户原来的密码字符串之前添加一个"!";
-U, --unlock:解锁用户的密码;
2.3 user del:删除用户
# 用法
userdel [选项] 用户名
# 选项
-r:删除用户时一并删除其家目录;
2.4 passwd:设置密码属性
# 用法
passwd [-k] [-l] [-u [-f]] [-d] [-e] [-n mindays] [-x maxdays] [-w warndays] [-i inactivedays] [-S] [--stdin] [username]
(1) passwd:修改用户自己的密码;
(2) passwd USERNAME:修改指定用户的密码,但仅root有此权限;
# 选项
-l, -u:锁定和解锁用户;
-d:清除用户密码串;
-e DATE: 过期期限,日期;
-i DAYS:非活动期限;
-n DAYS:密码的最短使用期限;
-x DAYS:密码的最长使用期限;
-w DAYS:警告期限;
--stdin:从标准输入读取密码,如 echo "PASSWORD" | passwd --stdin USERNAME
2.5 su:switch user
# 用法
su [options...] [-] [user [args...]]
# 说明
登录式切换:会通过读取目标用户的配置文件来重新初始化
su - USERNAME
su -l USERNAME
非登录式切换:不会读取目标用户的配置文件进行初始化
su USERNAME
注意:管理员可无密码切换至其它任何用户;
-c 'COMMAND':仅以指定用户的身份运行此处指定的命令;
3. 相关文件
3.1 /etc/passwd:用户信息
# 格式如下
name:password:UID:GID:GECOS:directory:shell
# name: 用户名
# password:可以是加密的密码,也可是占位符x;
# UID:用户ID;
# GID:用户所属的主组的ID;
# GECOS:注释信息;
# directory:用户的家目录;
# shell:用户的默认shell,登录时默认shell程序;
3.2 /etc/shadow:用户密码
# 格式如下
用户名:加密的密码:最近一次修改密码的时间:最短使用期限:最长使用期限:警告期段:过期期限:保留字段
3.3 /etc/group:用户组信息
group_name:password:GID:user_list
user_list:该组的用户成员;以此组为附加组的用户的用户列表;
4. 用户权限
4.1 chmod:
注意:用户仅能修改属主为自己的那些文件的权限;
# 用法
chmod [OPTION]... MODE[,MODE]... FILE...
chmod [OPTION]... OCTAL-MODE FILE...
chmod [OPTION]... --reference=RFILE FILE...
# 选项
-R, --recursive change files and directories recursively(递归)
# 示例&说明
chmod 755 FILE
chmod ugo+rwx FILE
chmod a-w FILE
a:所有,u:属主,g:属组,o:其它;
r:读,w:写,x:执行
chmod --reference=RFILE FILE(将FILE的权限修改为与RFILE一致)
4.2 chown:修改文件的属主、属组(修改属组相当于chgrp)
注意:仅管理员可修改文件的属主和属组
# 用法
chown [OPTION]... [OWNER][:[GROUP]] FILE...
chown [OPTION]... --reference=RFILE FILE...
# 选项
-R, --recursive operate on files and directories recursively(递归)
# 示例&说明
chown user1:group1 FILE (将FILE的属主设为user1,属组设为group1)
chgrp --reference=RFILE FILE(将FILE的属主、属组修改为与RFILE一致)
5. 特殊权限
5.1 SUID:
默认情况下,进程其以发起者的身份运行(前提:发起者具有该程序的执行权限);
SUID可以使没有该程序的执行权限的用户,临时以该程序属主的身份运行该程序。
功能:
让执行者临时拥有属主的权限(仅对拥有执行权限的二进制程序有效)
用法:
chmod u+|-s FILE...
# 展示位置(属主的执行权限位):
# 如果属主原本有执行权限,显示为小写s;
# 否则,显示为大写S;
示例:
[root@VM_0_171_centos ~]# ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 6月 10 2014 /usr/bin/passwd
5.2 SGID:
功能:
1)让执行者临时拥有属主的权限(仅对拥有执行权限的二进制程序有效)
2)在该目录中创建的文件自动继承此目录的用户组(只可以对目录设置)
用法:
chmod g+|-s FILE...
# 展示位置(属组的执行权限位):
# 如果属组原本有执行权限,显示为小写s;
# 否则,显示为大写S;
示例:
[root@VM_0_171_centos ~]# ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 6月 10 2014 /usr/bin/passwd
5.3 SBIT(Sticky BIT):
功用:
对于属组或全局可写的目录,组内的所有用户或系统上的所有用户对在此目录中都能创建新文件或删除所有的已有文件;如果为此类目录设置Sticky BIT权限,则每个用户能创建新文件,且只能删除自己的文件;
用法:
chmod o+|-t FILE...
# 展示位置(其它用户的执行权限位)
# 如果其它用户原本有执行权限,显示为小写t;
# 否则,显示为大写T;
示例:
# 系统上的/tmp和/var/tmp目录默认均有Sticky BIT权限;
[root@VM_0_171_centos ~]# ls -ld /tmp /var/tmp
drwxrwxrwt. 7 root root 4096 5月 6 14:58 /tmp
drwxrwxrwt. 2 root root 4096 4月 4 14:59 /var/tmp
补充:管理特殊权限的另一方式:
SUID
SGID
SBIT
左右交叉组合
一般权限
0
0
0
...
0
0
0
1
...
1
0
1
0
...
2
0
1
1
...
3
1
0
0
...
4
1
0
1
...
5
1
1
0
...
6
1
1
1
...
7
基于八进制方式赋权时,可于默认的三位八进制数字左侧再加一位八进制数字;
例如:chmod 1777
6. 隐藏权限
在Linux系统中除了能对文件设置一般权限和特殊权限外还有一种叫做隐藏权限的功能
6.1 chattr:设置文件的隐藏权限
用法
chattr [-RVf] [-+=aAcCdDeijsStTu] [-v version] files...
OPTIONS
-R 递归设置目录中的文件权限
-V 详尽打印输出信息
-f 抑制多数错误信息
-v version 设置文件版本
参数说明(来自man帮助文档):
The letters 'aAcCdDeijsStTu' select the new attributes for the files:
append only (a), no atime updates (A), compressed (c), no copy on write(C), no dump (d), synchronous directory updates (D), extent format (e),immutable (i), data journalling (j), secure deletion (s), synchronous updates (S), no tail-merging (t), top of directory hierarchy (T), and undeletable (u).
示例
[root@VM_0_171_centos tmp]# chattr -V +i acl
chattr 1.42.9 (28-Dec-2013)
acl的标志被设为 ----i-----------
[root@VM_0_171_centos tmp]#
6.2 lsattr:查看文件的隐藏权限
用法
lsattr [ -RVadv ] [ files... ]
OPTIONS
-R 递归
-V 显示lsattr程序版本号
-a List all files in directories, including files that start with '.'
-d 查询目录本身
-v 显示文件版本号
示例
[root@VM_0_171_centos tmp]# lsattr -v
123 suS-iadAcj-t---- ./acl
687539122 ---------------- ./attr
7. 文件访问控制列表facl
指定的特定用户或用户组对某个文件的操作权限(在原来的u、g、o之外,另一层对用户或用户组的赋权机制)
7.1 setfacl
用法:
# 赋权给用户
setfacl -m u:USERNAME:MODE FILE...
# 赋权给用户组
setfacl -m g:GROUPNAME:MODE FILE...
# 撤销赋权
setfacl -x u:USERNAME FILE...
setfacl -x g:GROUPNAME FILE...
7.2 getfacl
用法:
getfacl FILE...
示例:
# 对acl文件为gentoo用户赋予rwx选项
[root@VM_0_171_centos tmp]# setfacl -m u:gentoo:rwx acl
# 查询文件的访问控制列表
[root@VM_0_171_centos tmp]# getfacl acl
# file: acl
# owner: root
# group: root
user::rw-
user:gentoo:rwx
group::r--
mask::rwx
other::r--
# 撤销acl文件对gentoo用户的赋权
[root@VM_0_171_centos tmp]# setfacl -x u:gentoo acl
# 再次查询访问控制列表
[root@VM_0_171_centos tmp]# getfacl acl
# file: acl
# owner: root
# group: root
user::rw-
group::r--
mask::r--
other::r--
# 设置访问控制列表后,文件的权限位后会增加一个+
[root@VM_0_171_centos tmp]# ls -l acl
-rw-r--r--+ 1 root root 35 5月 6 16:31 acl