6 文件系统权限(一):用户、组


提纲


文件系统权限

3A 安全

Authentication    :  认证    --> 用户名&密码、指纹、人脸识别、DNA验证
Authorization    :  授权
Accounting|Audition :  审计

权限模型

Linux 下组和用户的特点:
    (1)Linux不支持用户或组的嵌套,windows支持
    (2)Linux允许用户名、组名、ID号相同

用户分类

  • 安全上下文 Security Context:进程所能够访问资源的权限取决于进程的运行者的身份

  • Linux下判断身份都是看UID号,而非名字

用户级别 ID号 备注
管理员 0 root
普通用户 1-65535
系统用户 1~499(v6),1-999(v7) 对守护进程获取资源进行权限分配(shell:/sbin/nologin;/usr/sbin/nologin)
普通用户 500+(v6),1000+(v7) 交互式登录
  • 对于文件和目录而言,用户大概分为三个级别

用户级别 说明
1st Class 拥有者 owner
2nd Class 群组成员 group members
3rd Class 其他用户 other users

组分类

组类型 说明
主组 用户有且只能有一个主要组,排位第一级别
辅助组 一个用户可以有0~n个附加组(辅助组)
私有组 组名与用户名相同,且仅包含一个用户
#-----------------------------------------------------------------------------
#  查看用户组信息
#-----------------------------------------------------------------------------
[root@localhost ~]# groups alice
alice : alice g2
[root@localhost ~]# getent group alice
alice:x:502:user2
[root@localhost ~]# getent gshadow alice
alice:!::user2
[root@localhost ~]# id alice
uid=501(alice) gid=502(alice) groups=502(alice),1240(g2)

配置文件

配置文件 说明
/etc/passwd 用户及其属性信息(名称、UID、主组ID等)
/etc/shadow 用户密码及其相关属性
/etc/group 组及其属性信息
/etc/gshadow 组密码及其相关属性

passwd 文件格式

[liang@centos7 ~]$ getent passwd root liang
root:x:0:0:root:/root:/bin/bash
liang:x:1000:1000:liang:/home/liang:/bin/bash

从左到右的含义依次是

字段 说明
name 登录名
password 密码(x为占位符,加密密码在/etc/shadow)
UID

用户ID,root的id=0,范围:1~65535

其中,系统用户:1-499(CentOS6),1-999(CentOS7);

    普通用户:500+(CentOS6), 1000+ (CentOS7)

GID 用户主组ID(系统组:V6<500, V7<1000)
GECOS 备注字段
directory 用户家目录
shell 用户默认的shell
#-----------------------------------------------------------------------------
#  1) getent passwd [username...]: 查看用户的passwd配置文件内容
#-----------------------------------------------------------------------------
[root@localhost ~]# getent passwd (= cat /etc/passwd)
[root@localhost ~]# getent passwd liang
liang:x:500:501::/home/liang:/bin/bash

#-----------------------------------------------------------------------------
#  2) chfn username : 修改用户的GECOS备注字段内容
#-----------------------------------------------------------------------------
[root@localhost ~]# chfn liang
Changing finger information for liang.
Name []: liangchao
Office []: 110
Office Phone []: 10086
Home Phone []: 119
Finger information changed.
[root@localhost ~]# getent passwd liang
liang:x:500:501:liangchao,110,10086,119:/home/liang:/bin/bash

#-----------------------------------------------------------------------------
#  3) 修改alice的密码
#-----------------------------------------------------------------------------
[root@localhost Packages]# echo 123456 | passwd --stdin alice
Changing password for user alice.
passwd: all authentication tokens updated successfully.

#-----------------------------------------------------------------------------
#  4) chsh -s shell username : 修改用户默认的shell类型
#  5) su - username : 切换用户(完全切换)
#-----------------------------------------------------------------------------
[root@localhost Packages]# getent passwd alice
alice:x:501:502::/home/alice:/bin/bash

[root@localhost Packages]# chsh -s /bin/csh alice
Changing shell for alice.Shell changed.

[root@localhost Packages]# getent passwd alice
alice:x:501:502::/home/alice:/bin/csh

[root@localhost Packages]# su - alice
[alice@localhost ~]$ echo $SHELL
/bin/csh

#-----------------------------------------------------------------------------
#  6) 将用户的shell类型改为nologin,导致用户无法切换,也无法登录
#-----------------------------------------------------------------------------
[root@localhost Packages]# file /sbin/nologin
/sbin/nologin: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped

[root@localhost Packages]# su - alice
This account is currently not available.

#-----------------------------------------------------------------------------
#  7) 设定是否将密码放进shadow:pwunconv不放(password unconvert),pwconv放
#-----------------------------------------------------------------------------
[root@centos7 testdir]# pwunconv
[root@centos7 testdir]# echo 123456 | passwd --stdin liangChanging 
password for user liang.
passwd: Authentication token manipulation error 

(此时 cat /etc/shadow会报找不到文件,cat /etc/passwd发现所有用户的密码位均有值,不再是x)

[root@centos7 testdir]# getent passwd liang
liang:$6$XoyQiDfz$R7dcM4mGTBYejUJ8d3w/:1000:1000:liang:/home/liang:/bin/bash

[root@centos7 testdir]# pwconv
[root@centos7 testdir]# getent passwd liang
liang:x:1000:1000:liang:/home/liang:/bin/bash

shadow 文件格式

#-----------------------------------------------------------------------------
# loginName:password:last change:min change age:max useage:warning period:inactivity period:expiration date:reserve filed
#-----------------------------------------------------------------------------
[root@localhost Packages]# getent shadow alice(等同于:cat /etc/shadow )
alice:!$6$AWo3D7uD$GyqAxaEXFkIcG8XE2kPBRl82……tm0LQo7eZhUS37Fj2Pymll.:17014:0:99999:7:::

从左到右的含义依次是

字段 说明
login name 登录名
encrypted password 加密密码
date of last password change 从1970年1月1日起到密码最近一次被更改的时间,天数(空即禁用)
minimum password age 密码再过几天可以被变更(0表示随时可被变更)
maximum password age 密码再过几天必须被变更(99999表示永不过期)
password warning period 密码过期前几天系统提醒用户(默认为一周)
password inactivity period 密码过期几天后帐号会被锁定
account expiration date 从1970年1月1日算起,多少天后帐号失效
reserved field 预留字段

关于各个时间的先后顺序,如下图所示

image

[root@localhost Packages]# getent shadow alice(等同于:cat /etc/shadow )
alice:!$6$AWo3D7uD$GyqAxaEX……hUS37Fj2Pymll.:17014:0:99999:7:::

#-----------------------------------------------------------------------------
#  关于第二列密码详解:
#       1)  $6: 加密方式
#               常见的加密方式:md5($1),sha1,sha224,sha256,sha384,sha512($6)
#            *  修改加密算法:authconfig --passalgo=md5 --update
#-----------------------------------------------------------------------------
[root@localhost Packages]# authconfig --passalgo=md5 --update

[root@localhost Packages]# useradd john
[root@localhost Packages]# echo 12345 | passwd --stdin john
Changing password for user john.
passwd: all authentication tokens updated successfully.

[root@localhost Packages]# getent shadow john
john:$1$nJw0PIvZ$jJ0IklD4k9u3WYxMM4Ssr.:17014:0:99999:7:::

#-----------------------------------------------------------------------------
#       2)  $8MvEcVLBt2bVhbld$:随机数,故即便密码相同,加密后也不同;
#       3)  !:用户锁定,不可登陆,但root可以su过去
#               * 加锁:usermod -L username
#               * 解锁:usermod -U username
#-----------------------------------------------------------------------------
[root@localhost Packages]# usermod -L alice
[root@localhost Packages]# getent shadow alice
alice:!$6$AWo3D7uD$GyqAxaEXFkIcG8XE2k……S37Fj2Pymll.:17014:0:99999:7:::
[root@localhost Packages]# usermod -U alice
[root@localhost Packages]# getent shadow alice
alice:$6$AWo3D7uD$GyqAxaEXFkIcG8XE2kPBR……7Fj2Pymll.:17014:0:99999:7:::

#-----------------------------------------------------------------------------
#       4)  密码建议:数字/大小写/特殊字符混合;足够长;使用随即密码;定期更换
#-----------------------------------------------------------------------------
[root@localhost Packages]# openssl rand -base64 10 (生成随机密码)
S8DBJeAt4bugFg==
[root@localhost Packages]# echo "`date +%s`/86400" |bc17014
[root@localhost Packages]# echo $[`date +%s`/86400]17014

#-----------------------------------------------------------------------------
#   使用户alice下次登录必须修改密码
#-----------------------------------------------------------------------------
# 方式一:
[root@localhost Packages]# chage -d 0 alice
[root@localhost Packages]# getent shadow alice
alice:$6$AWo3D7uD$GyqAx……37Fj2Pymll.:0:0:99999:7:::

# 方式二:
[root@localhost Packages]# passwd -e alice
Expiring password for user alice.
passwd: Success

[root@localhost Packages]# getent shadow alice
alice:$6$AWo3D7uD$GyqAxa……ZhUS37Fj2Pymll.:0:0:99999:7:::

group 文件格式

#-----------------------------------------------------------------------------
# groupName:passwd:GID:userList
#-----------------------------------------------------------------------------
[root@centos7 Desktop]# getent group admins
admins:x:1002:harry,sarah
字段名 说明
group_name 用户名
password 密码,若为空则不需密码
GID 组ID
user_list 组成员列表

gshadow 文件格式

#-----------------------------------------------------------------------------
# 关于第二列【密码】的详解:
#   1) 若密码出现非加密字符,如!或*,用户将不能用unix密码使用组(组成员不受限)
#   2) 组密码用于一个非组成员想要获取组权限(参考 newgrp命令)
#   3) ! 开头表明密码锁定
#-----------------------------------------------------------------------------
[root@centos7 Desktop]# getent gshadow admins hehe
admins:!::harry,sarah
hehe:*::
header 1 header 2
group name 存在于系统中的有效组名
encrypted password 密码
administrators 组管理员列表(权限与组成员相同,但可修改组员和组密码)
members 成员列表

用户、组 管理命令

useradd

  • 语法

useradd [options] LOGIN
useradd -D
useradd -D [options]
  • 参数

参数 使用说明
-b BASE_DIR 指定用户的默认家目录的BASE目录; 默认参考配置文件; 若无-m,则家目录必须存在。
-c COMMENT 描述信息,用作用户的全名
-d HOME_DIR 指定用户家目录;默认在BASE_DIR下建与用户同名的目录作为家目录;
-D 改变默认值(当仅用-D则使用默认值;当-D配合其他选项,则用指定值更新默认)
-e YYYY-MM-DD 设定用户账号的失效时间(account expiredDate);默认不失效;
-f INACTIVE_DAYS 设定当密码过期后多少天帐号将被禁用
-g GROUP 设定主组(组存在);若未指定,则参考/etc/login.defs的USERGROUPS_ENAB的设定(yes:创建同名组;no:参考/etc/default/useradd的GROUP,或100)
-G 2nd_GROUPS… 设定附属组
-k SKEL_DIR 设定创建家目录后,从SKEL_DIR拷贝文件到用户家目录
-K KEY=VALUE 设定如下默认值(-K UID_MIN=100 -K UID_MAX=499 -K UMASK=… -K PASS_MAX_DAYS=-1)
-l 不降用户添加到lastlog 和 faillog 数据库。
-m 若用户家目录不存在则创建,并从-k指定的数据拷贝到该家目录;家目录的父目录必须存在才能创建
-M 不创建家目录,即使/etc/login.defs(CREATE_HOME=yes)也不行
-N 不创建同名组,为用户添加组:-g 或 /etc/default/useradd(GROUP)指定的
-o 允许创建UID相同的用户,仅当配合-u时有效
-r 创建系统账户(不创建家目录,若必须指定需使用-m选项)
-s SHELL 设定用户默认登录shell
-u UID 设定用户UID,必须唯一(除非使用-o)
-U 创建同名组
  • 配置文件

    /etc/default/useradd : 用户创建的默认值

    /etc/login.defs    : 密码相关的配置项

    /etc/skel/        : 包含默认文件的目录

  • 示例

#-----------------------------------------------------------------------------
# 新增用户alice:
#   1)新增完成后,查看alice的组是alice(未指定时自动创建同名组)
#   2)新增完成后,未指定家目录的,自动创建家目录(系统用户不创建)
#-----------------------------------------------------------------------------
[root@localhost ~]# useradd alice
[root@localhost ~]# id alice
uid=501(alice) gid=502(alice) groups=502(alice)
[root@localhost ~]# ll /home
total 12
drwx------.  4 alice alice 4096 Aug  1 11:45 alice
drwx------. 28 liang liang 4096 Jul 20 18:04 liang

#-----------------------------------------------------------------------------
# 创建UID相同的两个用户:mag,mag2
#-----------------------------------------------------------------------------
[root@localhost Packages]# useradd -u 1234 mag
[root@localhost Packages]# useradd -u 1234 mag2
useradd: UID 1234 is not unique
[root@localhost Packages]# useradd -u 1234 -o mag2
[root@localhost Packages]# getent passwd mag mag2
mag:x:1234:1234::/home/mag:/bin/bash
mag2:x:1234:1235::/home/mag2:/bin/bash

#-----------------------------------------------------------------------------
# 创建用户user2,为其添加辅助组:liang,alice,bin
#-----------------------------------------------------------------------------
[root@localhost Packages]# useradd -G liang,alice,bin user2
[root@localhost Packages]# getent passwd user2
user2:x:1236:1236::/home/user2:/bin/bash
[root@localhost Packages]# groups user2
user2 : user2 bin liang alice

#-----------------------------------------------------------------------------
# 1)创建用户user3,为其指定家目录:/testdir/user3home,目录不存在
# 2)创建用户user4,为其指定家目录:/testdir/user4,目录存在不重建,所需文件不复制
#-----------------------------------------------------------------------------
[root@localhost Packages]# useradd -d /testdir/user3home user3
[root@localhost Packages]# getent passwd user3
user3:x:1237:1237::/testdir/user3home:/bin/bash
[root@localhost Packages]# ll /testdirtotal 
69876
drwx------. 2 root  root     16384 Jul 20 16:54 lost+found
drwx------. 4 user3 user3     4096 Aug  1 15:51 user3home
-r--r--r--. 1 root  root    71524872 Jul 22 11:51 VMwareTools-10.0.0-2977863.tar.gz
drwxr-xr-x. 9 root  root     4096 Aug 12  2015 vmware-tools-distrib
[root@localhost Packages]# mkdir /testdir/user4
[root@localhost Packages]# useradd -d /testdir/user4 user4
useradd: warning: the home directory already exists.
Not copying any file from skel directory into it.

#-----------------------------------------------------------------------------
# 创建用户user5,不创建默认组:因未指定组,默认设定GID=100
#-----------------------------------------------------------------------------
[root@localhost Packages]# useradd -N user5
[root@localhost Packages]# getent passwd user5
user5:x:1239:100::/home/user5:/bin/bash

#-----------------------------------------------------------------------------
# 创建系统用户user6,设定shell为/sbin/nologin:不创建家目录、邮箱
#-----------------------------------------------------------------------------
[root@localhost Packages]# useradd -r -s /sbin/nologin user6
[root@localhost Packages]# getent passwd user6
user6:x:496:492::/home/user6:/sbin/nologin
[root@localhost Packages]# ls /homealice  
john  liang  mage  mage2  tom  user1  user2  user5
[root@localhost Packages]# cd /var/spool/mail
[root@localhost mail]# ll
total 8
-rw-rw----. 1 liang   mail    0 Jul 20 17:15 liang
-rw-------. 1 root   mail    5376 Aug  1  09:11 root
-rw-rw----. 1 rpc   mail    0 Jul 20 16:59 rpc

#-----------------------------------------------------------------------------
# 查看系统创建用户的默认设置:
#   (1) useradd -D == cat /etc/default/useradd
#   (2) /etc/skel
#-----------------------------------------------------------------------------
[root@localhost Packages]# useradd -DGROUP=100HOME=/home
INACTIVE=-1EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes

[root@localhost Packages]# ll -a /etc/skeltotal 
36
drwxr-xr-x.   4 root root  4096 Jul 20 17:00 .
drwxr-xr-x.   125 root root  12288 Aug  1 15:55 ..
-rw-r--r--.   1 root root   18 May 11 07:21 .bash_logout
-rw-r--r--.   1 root root   176 May 11 07:21 .bash_profile
-rw-r--r--.   1 root root   124 May 11 07:21 .bashrc
drwxr-xr-x.   2 root root  4096 Nov 12 2010  .gnome2
drwxr-xr-x.   4 root root  4096 Jul 20 16:58 .mozilla

#-----------------------------------------------------------------------------
# 修改用户创建的默认shell:/sbin/nologin
#-----------------------------------------------------------------------------
[root@localhost mail]# useradd -D -s /sbin/nologin
[root@localhost mail]# useradd -D 
GROUP=100
HOME=/home
INACTIVE=-1EXPIRE=
SHELL=/sbin/nologin
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes

#-----------------------------------------------------------------------------
# 1、创建用户gentoo,附加组为bin和root,默认shell为/bin/csh,注释信息为"Gentoo Distribution"
#-----------------------------------------------------------------------------
[root@centos7 Packages]# useradd -G bin,root -s /bin/csh -c "Gentoo Distribution" gentoo
[root@centos7 Packages]# getent passwd gentoo
gentoo:x:1001:1001:Gentoo Distribution:/home/gentoo:/bin/csh
[root@centos7 Packages]# groups gentoogentoo : gentoo root bin

#-----------------------------------------------------------------------------
# 2、创建下面的用户、组和组成员关系
#       名字为admins 的组
#       用户natasha,使用admins 作为附属组
#       用户harry,也使用admins 作为附属组
#       用户sarah,不可交互登录系统,且不是admins 的成员,
#       natasha,harry,sarah密码都是centos
#-----------------------------------------------------------------------------
[root@centos7 Packages]# groupadd admins

[root@centos7 Packages]# useradd -G admins natasha
[root@centos7 Packages]# useradd -G admins harry
[root@centos7 Packages]# useradd -s /sbin/nologin sarah

[root@centos7 Packages]# echo centos | passwd --stdin sarah
Changing password for user sarah.
passwd: all authentication tokens updated successfully.
[root@centos7 Packages]# echo centos | passwd --stdin harry
Changing password for user harry.
passwd: all authentication tokens updated successfully.
[root@centos7 Packages]# echo centos | passwd --stdin natasha
Changing password for user natasha.
passwd: all authentication tokens updated successfully.

[root@centos7 Packages]# getent passwd natasha harry sarah
natasha:x:1002:1003::/home/natasha:/bin/bash
harry:x:1003:1004::/home/harry:/bin/bash
sarah:x:1004:1005::/home/sarah:/sbin/nologin

[root@centos7 Packages]# groups natasha harry sarah
natasha : natasha admins
harry : harry admins
sarah : sarah
  • 其他参考

    newusers passwd格式文件:批量创建用户

    chpasswd :批量修改用户口令

#-----------------------------------------------------------------------------
# 批量创建用户:newusers filename
#-----------------------------------------------------------------------------
[root@centos7 testdir]# cat user.txt
hehe:x:2000:2000::/home/hehe:/bin/bash
hehe2:x:2000:2000::/home/hehe2:/bin/bash
hehe3:x:2000:2000::/home/hehe3:/bin/bash
hehe4:x:2000:2000::/home/hehe4:/bin/bash
hehe5:x:2000:2000::/home/hehe5:/bin/bash

[root@centos7 testdir]# newusers user.txt

#-----------------------------------------------------------------------------
# 批量设定密码:chpasswd
#       1) cat passwdfile | chpasswd
#       2) echo mage:centos | chpasswd
#       3) echo centos | passwd --stdin mage &> /dev/null
#-----------------------------------------------------------------------------
[root@centos7 testdir]# cat passwd.txt
hehe:123456
hehe2:123456
hehe3:123456
hehe4:123456
hehe5:123456
[root@centos7 testdir]# cat passwd.txt | chpasswd
#-----------------------------------------------------------------------------
# 拷贝默认配置文件等:
#       1) cp -r /etc/skel/.[^.]*   /path/to/homedir 
#        2) cp -r `ls -A`  /path/to/homedir (这种方法要求用户当前处在/etc/skel) 
#       3) cp -r /etc/skel/. /path/to/homedir (注意/etc/skel/.和 /etc/skel/.*的差异)
#-----------------------------------------------------------------------------
[root@centos7 testdir]# cd /etc/skel
[root@centos7 skel]# ls -a
.  ..  .bash_logout  .bash_profile  .bashrc  .mozilla
[root@centos7 skel]# ls /home
gentoo  harry  hehe  hehe2  hehe3  hehe4  hehe5  liang  natasha  sarah
[root@centos7 skel]# cp -r /etc/skel/.[^.]* /home/hehe
[root@centos7 skel]# cp -r /etc/skel/.[^.]* /home/hehe2
[root@centos7 skel]# cp -r /etc/skel/.[^.]* /home/hehe3
[root@centos7 skel]# cp -r /etc/skel/.[^.]* /home/hehe4
[root@centos7 skel]# cp -r /etc/skel/.[^.]* /home/hehe5
[root@centos7 skel]# ls -a /home/hehe3
.  ..  .bash_logout  .bash_profile  .bashrc  .mozilla

usermod

  • 语法

    usermod [OPTION] login

  • 参数

header 1 header 2
-a 新增附加组
-u UID 新UID
-g GID 新基本组
-G GROUP1[,GROUP2,…[,GROUPN]]] 新附加组,原来的附加组将会被覆盖;若保留原有,则要同时使用-a选项,表示append;
-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 设定非活动期限;
  • 示例

#-----------------------------------------------------------------------------
# 修改hehe:
#       1)设定UID=20000, 主组=liang,附加组=bin,root,shell=/bin/csh
#       2)自动创建家目录=/testdir/hehedir,并移动其下文件
#       3)重命名username=newhehe,增加备注=hehe test
#       4)设定帐号过期时间=2017-08-01,非活动时间=10天
#-----------------------------------------------------------------------------
[root@centos7 skel]# getent passwd hehe
hehe:x:2000:2000::/home/hehe:/bin/bash
[root@centos7 skel]# usermod -u 20000 -g liang -G bin,root -s /bin/csh -d /testdir/hehedir -m -c "hehe test" -l newhehe -e 2017-08-01 -f 10 hehe
[root@centos7 skel]# getent passwd newhehe
newhehe:x:20000:1000:hehe test:/testdir/hehedir:/bin/csh
[root@centos7 skel]# getent shadow newhehe
newhehe:$6$.VWAU/eiQyR/M$vn/bC13Qyy……lLet0wV4BNzhfQ/:17014:0:99999:7:10:17379:
[root@centos7 skel]# cd /testdir/hehedir
[root@centos7 hehedir]# ls -a /testdir/hehedir
.   .bash_history  .bash_profile  .cache   .mozilla
..  .bash_logout   .bashrc        .config
[root@centos7 hehedir]# ll /testdir
total 2
-rw-r--r--. 1 root    root    64 Aug  1 16:56 passwd.txt
-rw-r--r--. 1 root    root   203 Aug  1 17:01 user.txt

#-----------------------------------------------------------------------------
# 为用户newhehe新增附加组:bin,root
#-----------------------------------------------------------------------------
[root@centos7 hehedir]# groups newhehe
newhehe : liang ftp
[root@centos7 hehedir]# usermod -aG bin,root newhehe
[root@centos7 hehedir]# groups newhehe
newhehe : liang root bin ftp

#-----------------------------------------------------------------------------
# 清空sarah的附加组
#-----------------------------------------------------------------------------
[root@centos7 hehedir]# usermod -G "" sarah 
[root@centos7 hehedir]# usermod -G sarah sarah

userdel

  • 语法

    userdel [OPTION]… login

  • 参数

    -r: 删除用户家目录;

  • 示例

[root@centos7 hehedir]# userdel -r natasha
[root@centos7 hehedir]# ls /homegentoo  
harry  hehe2  hehe3  hehe4  hehe5  liang  sarah
[root@centos7 hehedir]# ll /var/spool/mail/
total 76
-rw-rw----. 1 gentoo  mail     0 Aug  1 16:08 gentoo
-rw-rw----. 1 harry  mail     0 Aug  1 16:13 harry
-rw-rw----. 1 liang  mail     628 Jul  31 23:11 liang
-rw-------. 1 root   mail     71445 Jul  22 10:25 root
-rw-rw----. 1 rpc   mail     0 Jul  21 17:34 rpc
-rw-rw----. 1 sarah  mail     0 Aug  1 16:15 sarah

id 查看用户相关的ID信息

  • 用法

    id [OPTION]… [USER]

  • 参数

参数 说明
-u UID
-g GID
-G Groups
-n Name
  • 示例

[root@localhost ~]# groups bin
bin : bin daemon sys
[root@localhost ~]# id bin
uid=1(bin) gid=1(bin) groups=1(bin),2(daemon),3(sys)

su 用户切换(switch user)

  • 使用说明

    su命令使用户可以切换用户和组ID来执行命令。

    su不加参数默认切换至root。

    为了向后兼容,su默认不会改变用户当前目录,只会改变环境变量:HOME, SHELL, 如果目标用户不是root也会改变LOGNAME 和 USER。

    强烈建议所有切换均使用 su – 以避免复杂环境的副作用。

  • 参数说明

参数 使用说明
-c command 切换用户后执行command
-, -l, –login 近似真正登录,会重置环境变量:HOME,SHELL,USER,LOGNAME,PATH,同时会切换到用户家目录
  • 配置文件

/etc/nologin  : 若要限制除管理员外的普通用户登录系统,则可以创建该文件(V6 & V7)
/run/nologin  : V7
[root@localhost ~]# touch /etc/nologin
[root@centos7 ~]# echo "The system is maintaining. Try again 2h later." >> /run/nologin
[root@centos7 ~]# rm -rf /etc/nologin
[root@centos7 ~]# touch /run/nologin
[root@centos7 ~]# echo "The system is maintaining. Try again 2h later." >> /run/nologin
[root@centos7 ~]# rm -rf /run/nologin
  • 示例

#-----------------------------------------------------------------------------
# 1. su username:切换后查看环境变量,PATH及当前目录保持原用户设定
# 2. su - username:切换后查看环境变量,PATH及当前目录均切换至当前用户的设定
# 3. id 、who 均显示当前切换后的用户信息
#-----------------------------------------------------------------------------
[root@localhost testdir]# su liang      ### su liang 不完全切换至liang用户
[liang@localhost testdir]$ id
uid=500(liang) gid=501(liang) groups=501(liang) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[liang@localhost testdir]$ whoami
liang
[root@localhost testdir]# su - liang    ### su - liang 完全切换至liang用户
[liang@localhost ~]$ id
uid=500(liang) gid=501(liang) groups=501(liang) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[liang@localhost ~]$ whoami
liang

#-----------------------------------------------------------------------------
# 1. su username:切换后查看环境变量,PATH及当前目录保持原用户设定
# 2. su - username:切换后查看环境变量,PATH及当前目录均切换至当前用户的设定
# 3. id 、who 均显示当前切换后的用户信息
#-----------------------------------------------------------------------------
[liang@localhost testdir]$ echo -e "$HOME \n$SHELL \n$USER \n$LOGNAME \n$PATH"  ### 从root 不完全切换su liang 之后查看环境变量 
/home/liang 
/bin/csh 
liang 
liang 
/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

[root@localhost testdir]# echo -e "$HOME \n$SHELL \n$USER \n$LOGNAME \n$PATH"   ### 回到 root 查看环境变量
/root 
/bin/bash 
root 
root 
/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

[liang@localhost ~]$ echo -e "$HOME \n$SHELL \n$USER \n$LOGNAME \n$PATH"      ### 从root 完全切换 su liang 后查看环境变量
/home/liang 
/bin/csh 
liang 
liang 
/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin

#-----------------------------------------------------------------------------
# 4. su :不完全切换,使用 w、who、finger 无法看到该登录用户,但查看系统进程可以发现切换后用户发起的进程,
#-----------------------------------------------------------------------------
[liang@localhost testdir]$ w        ### 不完全切换后,w查看用户信息
 21:00:31 up 15:17,  3 users,  load average: 0.31, 0.40, 0.38USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
root     tty1     :0               Tue16   28:32m  4.09s  4.09s /usr/bin/Xorg :0 -br -verbose -audit 4 -auth /var
root     pts/0    10.1.250.53      16:22    0.00s  0.20s  0.03s w
john     tty7     :1               Tue16   28:32m  6.49s  0.47s pam: gdm-password

[liang@localhost ~]$ w           ### 完全切换后,w查看用户信息
 21:05:02 up 15:22,  3 users,  load average: 0.01, 0.19, 0.30USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
root     tty1     :0               Tue16   28:36m  4.09s  4.09s /usr/bin/Xorg :0 -br -verbose -audit 4 -auth /var
root     pts/0    10.1.250.53      16:22    0.00s  0.17s  0.00s w
john     tty7     :1               Tue16   28:36m  6.50s  0.47s pam: gdm-password

[liang@localhost testdir]$ who        ### 不完全切换后,who查看登录用户信息root     tty1         2016-08-02 16:28 (:0)
root     pts/0        2016-08-03 16:22 (10.1.250.53)
john     tty7         2016-08-02 16:36 (:1)

[liang@localhost ~]$ who          ### 完全切换后,who查看登录用户信息root     tty1         2016-08-02 16:28 (:0)
root     pts/0        2016-08-03 16:22 (10.1.250.53)
john     tty7         2016-08-02 16:36 (:1)

[liang@centos7 root]$ finger        ### 不完全切换后,finger查看登录用户信息Login     Name       Tty      Idle  Login Time   Office     Office Phone   Host
root      root      *:0             Aug  2 10:01                           (:0)
root      root       pts/0          Aug  4 09:11                           (10.1.250.53)
root      root       pts/1      42  Aug  4 09:11                           (10.1.250.53)

[liang@centos7 ~]$ finger          ### 完全切换后,finger查看登录用户信息Login     Name       Tty      Idle  Login Time   Office     Office Phone   Host
root      root      *:0             Aug  2 10:01                           (:0)
root      root       pts/0          Aug  4 09:11                           (10.1.250.53)
root      root       pts/1      42  Aug  4 09:11                           (10.1.250.53)


[liang@localhost testdir]$ ps aux | grep ps           ### 不完全切换后,查看系统进程root         64  0.0  0.0      0     0 ?        S    05:42   0:00 [kpsmoused]
root       2247  0.0  0.1 189124  3504 ?        Ss   05:43   0:00 cupsd -C /etc/cups/cupsd.conf
liang      7856  0.0  0.0 110248  1148 pts/0    R+   21:00   0:00 ps aux
liang      7857  0.0  0.0 103320   856 pts/0    S+   21:00   0:00 grep ps
[liang@localhost ~]$ ps aux |grep ps            ### 完全切换后,查看系统进程root         64  0.0  0.0      0     0 ?        S    05:42   0:00 [kpsmoused]
root       2247  0.0  0.1 189124  3504 ?        Ss   05:43   0:00 cupsd -C /etc/cups/cupsd.conf
liang      7907  0.0  0.0 110244  1148 pts/0    R+   21:04   0:00 ps aux
liang      7908  0.0  0.0 103320   856 pts/0    S+   21:04   0:00 grep ps

#-----------------------------------------------------------------------------
# 5. su username -c 'COMMAND' : 使用liang身份执行COMMAND
#-----------------------------------------------------------------------------
[root@centos7 ~]# su - liang -c 'echo $SHELL'/bin/bash
[root@centos7 ~]# 

#-----------------------------------------------------------------------------
# 6. 在su 命令中,单引号 与 双引号 的差异
#-----------------------------------------------------------------------------
[root@centos7 ~]# su - liang -c 'echo $USER'
liang
[root@centos7 ~]# su - liang -c "echo $USER"
root

passwd

  • 语法说明

    passwd [-k] [-l] [-u [-f]] [-d] [-e] [-n mindays] [-x maxdays] [-w warndays] [-i inactivedays] [-S] [–stdin] [username]

  • 参数说明

参数 使用说明
-l 锁定指定用户
-u 解锁指定用户
-e 强制用户下次登录修改密码(相当于 chage -d 0 username)
-n mindays 指定最短使用期限
-x maxdays 最大使用期限
-w warndays 提前多少天开始警告
-i inactivedays 非活动期限
–stdin 从标准输入接收账户密码(echo "password"

chage

设置用户密码过期信息
  • 语法说明

    passwd [-k] [-l] [-u [-f]] [-d] [-e] [-n mindays] [-x maxdays] [-w warndays] [-i inactivedays] [-S] [–stdin] [username]

  • 参数说明

参数 使用说明
-d LAST_DAY 设定密码最后更改时间(0:强制用户下次登录必须修改密码)
-E EXPIRE_DATE 设定用户帐号不可用的日期(-1:去掉账户的expiration date)
-I INACTIVE 指定用户密码过期后多久帐号将被锁定(-1:去掉账户的inactivity)
-l 最大使用期限
-m MIN_DAYS 设定多少天后用户可以修改密码(0:用户可以随时修改密码)
-M MAX_DAYS 设定密码最大有效天数(若 MAX_DAYS+LAST_DAY < CURRENT_DAY,要求用户在使用账户前即更改密码;-1 清楚验证密码有效时间)
-W WARN_DAYS 设定密码过期日多少天之前提醒用户修改
  • 示例

#-----------------------------------------------------------------------------
# /etc/shadow 格式:
# loginName:password:last change:min change age:max useage:warning period:inactivity period:expiration date:reserve filed
#-----------------------------------------------------------------------------
[root@centos7 ~]# getent shadow wangcai     ### wangcai 原始信息
wangcai:!!:0:0:99999:7:::

#-----------------------------------------------------------------------------
# 1)chage -d 'YYYY-MM-DD'|DAYS USERNAME:设定密码最后更改时间(0:强制用户下次登录必须修改密码)
#-----------------------------------------------------------------------------
[root@centos7 ~]# chage -d '2016-08-01' wangcai
[root@centos7 ~]# getent shadow wangcai
wangcai:!!:17014:0:99999:7:::               ### 从1970-01-01后17014天

#-----------------------------------------------------------------------------
# 2)chage -E 'YYYY-MM-DD'|DAYS USERNAME:设定用户帐号不可用的日期(-1:去掉账户的expiration date)
#-----------------------------------------------------------------------------
[root@centos7 ~]# chage -E '2017-08-01' wangcai
[root@centos7 ~]# getent shadow wangcai
wangcai:!!:17014:0:99999:7::17379:

#-----------------------------------------------------------------------------
# 3)chage -I DAYS USERNAME:指定用户密码过期后多久帐号将被锁定(-1:去掉账户的inactivity)
#-----------------------------------------------------------------------------
[root@centos7 ~]# chage -I 14 wangcai
[root@centos7 ~]# getent shadow wangcai
wangcai:!!:17014:0:99999:7:14:17379:

#-----------------------------------------------------------------------------
# 4)chage -l USERNAME:列示账户期限信息
#-----------------------------------------------------------------------------
[root@centos7 ~]# chage -l wangcai
Last password change	: Aug 01, 2016
Password expires : never
Password inactive: never
Account expires: Aug 01, 2017
Minimum number of days between password change : 0
Maximum number of days between password change : 99999
Number of days of warning before password expires: 7

#-----------------------------------------------------------------------------
# 4)chage -m DAYS USERNAME:设定多少天后用户可以修改密码(0:用户可以随时修改密码)
#-----------------------------------------------------------------------------
[root@centos7 ~]# chage -m 3 wangcai
[root@centos7 ~]# getent shadow wangcai
wangcai:!!:17014:3:99999:7:14:17379:

#-----------------------------------------------------------------------------
# 5)chage -M DAYS USERNAME:设定密码最大有效天数(若 MAX_DAYS+LAST_DAY<CURRENT_DAY,要求用户在使用账户前即更改密码;-1 清楚验证密码有效时间)
#-----------------------------------------------------------------------------
[root@centos7 ~]# chage -M 365 wangcai
[root@centos7 ~]# getent shadow wangcai
wangcai:!!:17014:3:365:7:14:17379:

#-----------------------------------------------------------------------------
# 6)chage -W DAYS USERNAME:设定密码过期日多少天之前提醒用户修改
#-----------------------------------------------------------------------------
[root@centos7 ~]# chage -W 15 wangcai
[root@centos7 ~]# getent shadow wangcai
wangcai:!!:17014:3:365:15:14:17379:

#-----------------------------------------------------------------------------
# 7)清除设定:chage -E -1 -I -1 -m 0 -M -1 wangcai
#-----------------------------------------------------------------------------
[root@centos7 ~]# chage -E -1 -I -1 -m 0 -M -1 wangcai
[root@centos7 ~]# getent shadow wangcai
wangcai:!!:17014:0::15:::
[root@centos7 ~]# chage -l wangcaiLast password change					            : Aug 01, 2016Password expires					                : neverPassword inactive					                : neverAccount expires						                : neverMinimum number of days between password change		: 0Maximum number of days between password change		: -1Number of days of warning before password expires	: 15

groupadd

  • 语法格式

    groupadd [OPTION]... group_name
  • 参数说明

参数 使用说明
-g, –gid GID 设定GID(非负整数),仅当-o配合时允许重复使用,否则唯一
-K, –key KEY=VALUE 修改/etc/login.defs的设定(如GID_MIN, GID_MAX),格式:-K GID_MIN=100 -K GID_MAX=499
-o, –non-unique 允许用户创建一个同一ID的组
-p, –password PASSWORD 设定组密码,改密码为已经加密过的密码(非明文)
-r, –system 创建系统组(范围:/etc/login.defs[SYS_GID_MIN ~ SYS_GID_MAX])
  • 示例

#-----------------------------------------------------------------------------
# /etc/group组及其属性信息 格式: groupName:passwd:GID:附加组userList
#-----------------------------------------------------------------------------
[root@localhost ~]# groupadd -r systestliang  ### 创建系统组
[root@localhost ~]# getent group systestliang
systestliang:x:491:
[root@localhost ~]# usermod -G systestliang tom  ### 设置用户附加组为 systestliang
[root@localhost ~]# groupdel systestliang      ### 删除systestliang组,不抱错
[root@localhost ~]# usermod -g systestliang tom  ### 设定用户主组为 systestliang
[root@localhost ~]# groupdel systestliang      ### 删除组报错
groupdel: cannot remove the primary group of user 'tom'

#-----------------------------------------------------------------------------
# /etc/group & /etc/gshadow 中的userList指的是将该组作为附加组的成员
#-----------------------------------------------------------------------------
[root@localhost ~]# usermod -g systestliang tom  ### 设定用户主组为 systestliang
[root@localhost ~]# getent group systestliang           
systestliang:x:491:
[root@localhost ~]# getent gshadow systestliang
systestliang:!::
[root@localhost ~]# usermod -G systestliang john  ### 设置用户附加组为 systestliang
[root@localhost ~]# getent gshadow systestliang
systestliang:!::john
[root@localhost ~]# getent group systestliang
systestliang:x:491:john

groupdel

  • 示例

#-----------------------------------------------------------------------------
# 删除组时,若组为某用户的主组则不可删除,需清楚后再删;若组内有附加成员,则可删
#-----------------------------------------------------------------------------
[root@localhost ~]# usermod -G systestliang tom   ### 设置用户附加组为 systestliang
[root@localhost ~]# groupdel systestliang       ### 删除systestliang组,不抱错
[root@localhost ~]# usermod -g systestliang tom   ### 设定用户主组为 systestliang
[root@localhost ~]# groupdel systestliang       ### 删除组报错
groupdel: cannot remove the primary group of user 'tom'

groupmod

  • 语法格式

    groupmod [options] GROUP
  • 参数说明

参数 使用说明
-g, –gid GID 修改GID(非负整数),仅当-o配合时允许重复使用,否则唯一
-n, –new-name NEW_GROUP 修改组名
-o, –non-unique 允许修改组ID时,使用相同的GID
-p, –password PASSWORD 修改组密码,改密码为已经加密过的密码(非明文)

gpasswd

  • 语法格式

    gpasswd [OPTION] GROUP
  • 参数说明

参数 使用说明
-a user 将user添加至指定组中;
-d user 从指定组中移除用户user
-A user1,user2,… 设置有管理权限的用户列表
  • 参考命令

    newgrp Groupname:临时切换基本组,如果用户不属于该组,则需要组密码

[alice@localhost ~]$ newgrp tomPassword: 
Invalid password.

groupmems

  • 语法格式

    groupmems [options] [action]
  • 参数说明

    options:
        -g, --group groupname   更改为指定组 (只有root)
    
    Actions:
        -a, --add username     指定用户加入组    
        -d, --delete username   从组中删除用户    
        -p, --purge        从组中清除所有成员    
        -l, --list         显示组成员列表
  • 示例

[root@localhost ~]# groupmems -l -g bin        ### 列示组用户成员
bin  daemon  user2 
[root@localhost ~]# getent group bin            
bin:x:1:bin,daemon,user2

[root@localhost ~]# groupmems -g bin -a john    ### 向组添加成员
[root@localhost ~]# groupmems -l -g bin       ### 列示组用户成员
bin  daemon  user2  john 
[root@localhost ~]# getent group bin
bin:x:1:bin,daemon,user2,john

groups

  • 语法格式

    groups [OPTION].[USERNAME]… 查看用户所属组列表

  • 示例

[root@localhost ~]# groups binbin : bin daemon sys

其他命令(chfn、chsh、finger、newgrp、vipw、vigr、pwck、grpck、strace)

  • 示例

#-----------------------------------------------------------------------------
# chfn username: 修改用户备注
#-----------------------------------------------------------------------------
[root@centos7 ~]# chfn wangcai
Changing finger information for wangcai.
Name []: wangcai
Office []: tiantang
Office Phone []: 110
Home Phone []: 120
Finger information changed.

#-----------------------------------------------------------------------------
# chsh -s SHELL username: 修改用户shell
#-----------------------------------------------------------------------------
[root@centos7 ~]# chsh -s /bin/csh wangcai
Changing shell for wangcai.Shell changed.

#-----------------------------------------------------------------------------
# finger username: 查看用户信息
#-----------------------------------------------------------------------------
[root@centos7 ~]# getent passwd wangcai
wangcai:x:1001:1001:wangcai,tiantang,110,120:/home/wangcai:/bin/csh
[root@centos7 ~]# finger wangcai
Login: wangcai  
Name: wangcai
Directory: /home/wangcai 
Shell: /bin/cshOffice: tiantang, 110			
Home Phone: 120
Last login Thu Aug  4 11:06 (CST) on pts/0No mail.No Plan.
#-----------------------------------------------------------------------------
# vipw == vi /etc/passwd :若要直接修改/etc/passwd,建议使用vipw,修改后会自动检查格式是否正确
# vigr == vi /etc/group  :若要直接修改/etc/group ,建议使用vigr,修改后会自动检查格式是否正确
# pwck  (password check):检查/etc/passwd文件  
# grpck (group check)  :检查/etc/group文件
#-----------------------------------------------------------------------------
[root@localhost Packages]# pwck
user 'adm': directory '/var/adm' does not exist
user 'uucp': directory '/var/spool/uucp' does not exist
user 'gopher': directory '/var/gopher' does not exist
user 'ftp': directory '/var/ftp' does not exist
user 'avahi-autoipd': directory '/var/lib/avahi-autoipd' does not exist
user 'saslauth': directory '/var/empty/saslauth' does not exist
user 'pulse': directory '/var/run/pulse' does not exist
pwck: no changes

[root@localhost Packages]# grpck
group liang has an entry in /etc/gshadow, but its password field in /etc/group is not set to 'x'
grpck: no changes

#-----------------------------------------------------------------------------
# strace:跟踪命令执行过程
#-----------------------------------------------------------------------------
[root@centos7 hehedir]# strace groupmems -l -g sarah

原创文章,作者:taobaibai,如若转载,请注明出处:http://www.178linux.com/31286