linux 用户和权限管理


目录

  • 用户和组
  • 创建用户
  • 修改用户
  • 特殊权限
  • 访问控制列ACL

用户和组

Linux中每个用户都是通过uid来唯一标识的,root的uid是0,系统用户的uid是1-999,普通登录用户的uid是1000+

用户可以加入一个或多个组,用户组通过gid标识,系统组的gid是1-999,普通组的gid是1000+

用户和组的关系

用户必须属于一个且只有一个主组,默认创建用户的时候会同时创建和用户名相同的组。作为用户的主要组,因为 这个组中只有一个用户,也被叫做私有组

一个用户可以同时拥有一个或多个附加组

查看用户

id root

用户和组的主要配置文件

  • /etc/passwd        用户和用户属性信息
  • /etc/shadow        用户密码及相关属性
  • /etc/group           用户组和属性信息
  • /etc/gshadow      组密码和相关属性

创建用户 useradd

常用选项

-u UID          # 手动指定创建用户的uid
-o              # 配合-u一起使用,可以创建相同uid的用户
-g GID          # 指定用户所属组,可以跟组名或GID
-c "comment"    # 用户的注释信息
-d /home/dir    # 以指定的路径作为家目录
-s /bin/bash    # 指定用户的shell程序
-G group        # 指定附加组
-N              # 不创建私用组做主组,使用users组做主组
-r              # 创建系统用户,uid在1-999
-m              # 创建家目录,用于系统用户
-M              # 不创建家目录,用于非系统用户
-p              # 指定加密的密码

 useradd命令的默认值在 /etc/default/useradd 所定义

# useradd defaults file
GROUP=100                # 不指定组或使用-N参数的时候,useradd创建用户的gid
HOME=/home               # 用户家目录位置
INACTIVE=-1              # 密码过期的宽限期
EXPIRE=                  # 用户账户的有效期
SHELL=/bin/bash          # 默认shell
SKEL=/etc/skel           # 模板目录
CREATE_MAIL_SPOOL=yes    # 是否创建邮箱

 批量创建用户

使用newusers,后边跟 /etc/passwd 格式相同的文件

newusers users.txt 

cat users.txt

user1:x:2003:2003::/home/user1:/bin/bash
user2:x:2004:2004::/home/user2:/bin/bash
user3:x:2005:2005::/home/user3:/bin/bash

 批量修改密码

cat passwd.txt | chpasswd  #  密码文件每一行格式 user:passwd

用户属性修改 usermod

-u UID: 新UID
-g GID: 新主组
-G GROUP1[,GROUP2,...[,GROUPN]]]:新附加组,原来的附加组将会被覆盖;若保留原有,则要同时使
用-a选项
-s SHELL:新的默认SHELL
-c 'COMMENT':新的注释信息
-d HOME: 新家目录不会自动创建;若要创建新家目录并移动原家数据,同时使用-m选项
-l login_name: 新的名字
-L: lock指定用户,在/etc/shadow 密码栏的增加 !
-U: unlock指定用户,将 /etc/shadow 密码栏的 ! 拿掉
-e YYYY-MM-DD: 指明用户账号过期日期
-f INACTIVE: 设定非活动期限,即宽限期

 删除用户

-f, --force 强制
-r, --remove 删除用户家目录和邮箱

切换用户或用其他用户的身份执行命令

su username     # 非登陆式切换,不会读取目标用户的配置文件,不改变当前工作目录,不完全切换
su - username   # 登录式切换,会读取目标用户的配置文件,并切换到用户自己的家目录,完全切换
su - username -c "command" # 换个身份执行命令

设置密码

passwd 常用选项

-d:删除指定用户密码
-l:锁定指定用户
-u:解锁指定用户
-e:强制用户下次登录修改密码
-f:强制操作
-n mindays:指定最短使用期限
-x maxdays:最大使用期限
-w warndays:提前多少天开始警告
-i inactivedays:非活动期限
--stdin:从标准输入接收用户密码,Ubuntu无此选项

非交互式修改秘码

echo -e '123456\n123456' | passwd user1    # 兼容多种linux版本
echo "123456" | passwd --stdin user1       # 适用于红帽版本的linux


passwd -e user1                            # 用户下次登录的时候修改密码

修改用户密码策略 

chage常用选项

-d LAST_DAY #更改密码的时间
-m --mindays MIN_DAYS
-M --maxdays MAX_DAYS
-W --warndays WARN_DAYS
-I --inactive INACTIVE #密码过期后的宽限期
-E --expiredate EXPIRE_DATE #用户的有效期
-l 显示密码策略

创建组-groupadd

-g GID 指明GID号;[GID_MIN, GID_MAX]
-r 创建系统组,CentOS 6之前: ID<500,CentOS 7以后: ID<1000

修改组属性-groupmod

-n group_name: 新名字
-g GID: 新的GID

删除组-groupdel

-f, --force 强制删除,即使是用户的主组也强制删除组,但会导致无主组的用户不可用无法登录

linux文件的特殊权限

linux文件除了rwx三种常用的权限,还有suid,sgid,sticky三种特殊的权限

  • suid,占用属主的执行权限位,用数字表示是4
  • sgid,占用属组的执行权限位,用数字表示是2
  • sticky,占用other的执行权限位,用数字表示是1

suid 主要作用在二进制可执行文件上,当文件有suid权限的时候,其他用户执行这个文件将继承此文件所有者的权限,如/usr/bin/passwd,普通用户执行passwd将拥有root的权限

chmod u+s /usr/bin/passwd   # 添加suid权限
chmod u-s /usr/bin/passwd   # 删除
 
chmod 4755 /usr/bin/passwd  # 数字法添加
chmod 755 /usr/bin/passwd   # 数字法删除

sgid 

  • 当sgid权限作用在二进制可执行文件上,执行这个文件的用户将继承这个文件所属组的权限
  • 当sig权限作用在目录上,其他用户在这个目录上创建的文件的所属组将继承于这个目录的所属组
chmod g+x file
chmod 2xxx file
chmod g-x file

sticky 主要作用在目录上,此目录中的文件只能由文件的所有者自己删除

chmod o+t file
chmod 1xxx file
chmod o-t file

设置文件特殊属性

lsattr  123.txt      # 查看文件特殊属性

chattr +i 123.txt    # 使文件不能被删除,修改
chattr -i 123.txt    # 去除文件特殊属性

chattr +a 123.txt    # 只能追加内容,不能删除 改名
chattr -a 123.txt

ACL访问控制列表

除了文件的所有者,所属组,其他人,可以对更多的用户设置权限

ACL生效顺序  所有者,自定义用户,所属组,其他人

acl常用命令

setfacl   # 设置acl权限
getfacl   # 查看acl权限
setfacl -b  # 清除acl权限