技术源于努力
努力实现梦想

linux用户权限详解 linux入门

在linux中有两个概念:用户、用户组
用户分成:系统用户和普通用户
用户组分成:基本组、私有组、附加组
系统用户:系统进程运行的用户,主要是为了区分不同的用户权限来运行对应的进程,方便进程的管理
普通用户:留给普通用户用于用户空间进程运行和操作的用户
在linux中/etc/login.defs指定的系统和普通用户的用户编码范围,系统用户就要指定对应的UID和GID都要在系统账号范围内

# Min/max values for automatic uid selection in useradd
 32 #
 33 UID_MIN                  1000
 34 UID_MAX                 60000
 35 # System accounts
 36 SYS_UID_MIN               201
 37 SYS_UID_MAX               999
# Min/max values for automatic gid selection in groupadd
 41 #
 42 GID_MIN                  1000
 43 GID_MAX                 60000
 44 # System accounts
 45 SYS_GID_MIN               201
 46 SYS_GID_MAX               999

为了方便管理用户,以及用户权限的分配,给用户划分了组的概念
用户组根据用户指定组也划分了:基本组、私有组、附加组
用户组的目的:可以让该组下的所有成员用户拥有该组的权限,这种权限的划分叫做权限继承
私有组:创建用户的时候,如果没有为其指定所属的组,系统会自动为其创建一个与用户名同名的组。
附加组:又称为额外组,就是默认组之外的组
基本组:用户的默认的组,在创建用户的时候指定的所属组
用户的创建必须要有指定对应组,不指定就会创建私有组
存储用户信息的表有三个:/etc/passwd:/etc/shadow:/etc/group
/etc/passwd:存储用户的具体信息
/etc/shadow:存储用户的密码
/etc/group:存储用户组的信息
/etc/passwd:记录linux用户的信息,有7个字段,每个字段以分号区分

  1 root:x:0:0:root:/root:/bin/zsh
  2 bin:x:1:1:bin:/bin:/sbin/nologin
  3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
7个字段分别为:
1、name:用户的登录名,应该不包含大写字母
2、password:用户的密码,这个密码是加密的,可能是*或者x,如果是x,意味着这个是一个密码占位符,真正的密码在shadow中。
3、UID:用户标识符
4、GID:基本组ID
5、GECOS:这个又叫做评论区域,可选择来记录目的信息,通常包含用户全名。一些程序从这片区域来显示一些信息
6、Directory:家目录
7、Shell:用户默认的shell,就是一打开终端就给打开的程序。大多数都是bash,这里有些用户的shell是/sbin/nologin,就是不让登陆的用户,如果给用户指定非法的shell,用户一样不能登陆
注意:/etc/shells中的shell才被linux认为是合法的shell,才能被用户作默认shell

/etc/shadow:记录用户密码

有9个字段:同样是以:进行分隔
1、登录名
2、加密的密码,如果是*或者!!表明这个用户是锁定的用户,是不允许登录的,如果要锁定用户,就在密码前加上两个!就可以了
3、最后修改密码时间到现在的时间差
4、密码最短使用期限:如果是0就是不做限定,到期后可以不改
5、密码最长期限:到期后必须要改,登录系统后,首先改密码,否则就不能登陆,上次修改密码之后最长可使用的时间。
6、密码警告时间段:0表示没有密码警告期
7、密码禁用期:空字段表示强制无密码过期,在禁用期后就不能登录了
8、账号过期时间:从1970年1月1号到现在的天数,0表示永不过期
9、保留字段:留作将来使用

/etc/group:记录用户组信息,以及对应该设置成附加组的具体成员的UID

1、组名
2、密码占位符
3、组ID
4、以这个组为附加组的用户列表

添加linux的用户,基本上也就是这三个文件的记录增加,这三个文件相互关联,缺一不可
例如:使用useradd tom
这个命令会在/etc/passwd中添加一行信息,同时会在/etc/shadow中加一行数据,没有密码的。由于在创建的时候没有指明用户组,所以linux建立了一个和用户名同名的私有组作为基本组,会在/etc/group中添加一行记录。
passwd tom
就会在shadow中添加tom的密码
事实上使用useradd命令,该命令会到默认的useradd文件中去找设置,该配置文件在/etc/default/useradd

# useradd defaults file
GROUP=100 
HOME=/home 在这个目录下创建该用户的家目录
INACTIVE=-1 非活动期间,就是密码过期你还没有改,宽限的天数,-1就表示不做设置
EXPIRE= 禁用密码的期限
SHELL=/bin/bash 用户默认的shell
SKEL=/etc/skel 指定用户默认配置文件的模板文件路径,新建立的用户会将这个目录下的配置文件作为该用户的初始用户环境文件,该目录下的文件都是.开头的隐藏文件
CREATE_MAIL_SPOOL=yes 邮箱池,默认是开启的

如果要建立一个账号,要指定一个组作为该账号的基本组,这个时候就需要先建立组,建立组使用的命令是:groupadd

groupadd GROUP_NAME 后边直接跟上组名即可

创建了组之后,就可以创建用户了,创建用户使用的命令是:useradd

useradd的格式是:useradd [options] USER_NAME
option:选项有 
    -u #:制定用户的uid
    -r:一旦使用这个选项,表明该用户是系统用户,是没有家目录的
    -g #:指定其基本组GID,不管是基本组或者是附加组,这个组必须存在才可以用
    -G #,#... : 指定其用户的附加组GID,如果是多个就直接用,隔开即可
    –c :指定其注释信息,如果注释信息有空格,用””引用起来的
    -d:指定该账号的家目录的
    -s:指定该账号需要用到的shell的路径,该shell必须是在/etc/shells中有定义
    -m:如果用户主目录不存在,那么就会自动创建主目录,并将框架目录中的文件或者目录复制到主目录来,这个框架文件可以用-k来指定。这个框架目录在/etc/skel,其实说白了就是bash的配置文件。
注意:在手动复制框架配置文件的时候,cp –a /etc/skel/. /home/DIR 这里的.不能省略,因为skel目录下都是隐藏文件。
    -M:不创建家目录,即便是/etc/login.defs中设置CREATE_HOME=yes,也不创建主目录。
注意:/etc/login.defs:就是添加用户的时候系统自动向passwd和shadow加入等设置都有默认值,就在这里设置的。

如果账号不用了需要删除,可以使用:userdel

userdel格式:userdel [option] username
 userdel USER_NAME 会删除账号,但是不会删除用户的家目录
 userdel -r USER_NAME 删除用户并删除家目录

想要查看用户的账号信息或者属性:id

id格式:id [option] USERNAME
id USERNAME:显示当前账号的信息,主要是一些编号信息
-u:查看用户的UID
–g查看user的GID
–G查看user的所属组的id,包括基本组和附加组
–n –G 查看user所属组的名字。n 选项是不能单独使用的,必须要和u、g、G等连用

如果用户的信息需要修改,需要用到:usermod

usermod格式:usermod [option] USERNAME
  –u 改uid
  –g 改基本组GID,这个基本组必须事先存在。
  –G 改附加组GID,要注意:以前用户有附加组,用这个命令的时候会覆盖原有的附加组
  –aG 在原有附加组的基础上追加附加组
  –c “” 注释信息
  –d 指定家目录,但是在之前家目录中创建的文件就会访问不到了,因为新目录中没有这些文件
  –d –m 指定新的家目录并将之前的家目录文件移动到新的目录下
  –s 修改shell
  –l 该用户登录名,不会更改别的任何东西。特别是,用户的主目录名和邮件池也需要手动修改以和新登录名对应。
  –L 锁定用户,类似禁用
  –U 解锁用户,允许登录

如果要修改用户的默认shell,还可以使用:chsh

chsh格式:chsh [-s shell] [-l] [-u] [-v] [username]
  -s 指定要修改的shell
  -l 显示在/etc/shells中定义的shell
  -u 显示chsh的帮助信息
  -v 显示chsh的版本

单独修改用户的注释信息,可使用chfn

chfn用法:chfn [-f full-name] [-o office] ,RB [ -p office-phone] [-h home-phone] -u] [-v] [username]
-f, --full-name full-name
            Specify your real name.
       -o, --office office
             Specify your office room number.
       -p, --office-phone office-phone
             Specify your office phone number.
       -h, --home-phone home-phone
             Specify your home phone number.
       -u, --help
             Print a usage message and exit.
       -v, --version
             Print version information and exit.

修改linux用户的密码使用:passwd

passwd格式:passwd [option [VALUE]] USERNAME
   --stdin 从标准输入读取密码,标准输入就是键盘输入,还可以接受其他文件传递过来的内容作为标准输入经常用echo “redhat” | passwd –stdin
   -l 锁定用户账号
   -u 解锁用户
   –n 设置密码最短使用期限
   –x 设置密码最长使用时间
   –w 警告时间
   –i 非活动时间
   –d 删除密码
注意:可以直接使用pwck检查账号密码的完整性

用户组的增加,可使用:groupadd

groupadd格式:groupadd [option] GROUP_NAME
   -g # 指定组的GID
   -r 创建的组是系统组

用户组的修改,可使用:groupmod

groupmod格式:groupmod [option] GROUP_NAME
   –g 修改GID
   –n 修改组名

用户组的删除,可使用:groupdel

groupdel格式:groupdel [option] GROUP_NAME
   -h, --help
           Display help message and exit.
   -R, --root CHROOT_DIR
           Apply changes in the CHROOT_DIR directory and use the configuration files from the CHROOT_DIR directory.

用户组的加密,可使用:gpasswd GROUP_NAME

gpasswd格式: gpasswd GROUP_NAME

登陆到一个新的组,就需要使用newgrp进行切换,但是注意该组事先必须是先存在的
简单分成两种情况:
1、当这个用户有多个附加组,这些个附加组的切换是不需要密码的
2、当这个用户切换到其他组,而切换的组又不是这个用户的附加组,那么就会要求输入密码,linux是不允许初始化空密码登录的,所以就要先用gpasswd指定密码。
当我们建立文件的时候,这个文件的属主和属组就是当前用户和当前的属组。创建完后直接用exit退出登录新组
Chage:更改密码的过期信息:

chage [option] user
 –d 修改最近一次的修改的时间,格式是YYYY-MM-DD
 –E 用户账号的禁用时间,也叫过期时间
 –I 非活动期限, 设置密码已过期后的密码已过期的天数,在帐户被锁定之前
 –m 密码最短使用期限
 –M 密码最长使用期限
 –W 警告时长

权限管理:
修改文件或者目录的属主或者属组(只有管理员才可以使用这个命令):chown

chown格式:chown [option] FILE||DIRECTORY 
  -R 修改目录及内部文件的属主
  –reference=/path/to/somefile file,file …..参考somefile的属组和属主来修改file…的属主和属组,使之与somefile一样的属组和属主 
  USERNAME:GROUPNAME file,….既修改属组有修改属主==chown USERNAME.GROUPNAME file,…是一样的效果
  :GROUPNAME file,…只改属组

修改文件或者目录的属组(只有管理员才可以使用这个命令):chgrp

chgrp格式:chgrp [option] FILE||DIRECTORY
  –R 递归修改属组

手动生成密码:
Openssl:计算密码的hash值,通过whatis passwd找到的man文档,通过>man sslpasswd找到的。
openssl passwd –crypt 默认使用隐藏算法
openssl passwd -1 使用基于BSD的MD5算法来计算hash值
openssl passwd –salt “String” 使用特殊的字符,当在终端读取一个密码,这是不会验证的。
意思说白了就是为了改变数据特征的。
openssl passwd –in file 从文件中读取密码
openssl passwd –stdin 从标准输入读取数据,就是键盘输入
openssl passwd –noverify 当在终端读取密码的时候不验证
openssl passwd –quiet 当密码在命令行被截断,不显示警告信息
注意:在linux中使用md5计算的密码都可以被使用
Umask:用户创建文件或者目录的时候的遮罩码:
创建文件的时候,就用666-umask
创建目录的时候,就用777-umask
管理员的umask一般是022,所以创建文件的默认权限就是644,创建目录的时候默认权限就是755
一般用户的umask一般是002,所以创建文件的默认权限就是664,创建目录的时候默认权限就是775
umask 显示当前用户的umask
umask 023 设置当前用户的umask为023,创建文件默认属性:643,创建目录默认权限:754,注意了,这里的文件默认的属性是644,因为文件默认都是没有执行权限的,如果计算的时候有了执行权限,那么linux会自动加1,如果算出来是负数的话,那么默认为0。一旦退出了系统重新登录系统的话,umask就会成为初始的设定值002
站在用户的角度来说,SHELL的类型分为:
登陆式SHELL:
1、 正常通过某终端登录的
2、 su – username 完全切换,因为要读取username的个人配置文件,所以叫完全切换
su – username读取配置文件信息方式:/etc/profile–>/etc/profile.d/*.sh—->~./.bash_profile—->~./.bashrc—>/etc/bashrc
非登录式SHELL:
1、 su username 半切换,因为不读取个人环境配置文件
2、 图形终端中打开的终端
3、 自动执行的shell脚本
读取配置文件信息方式:~./.bashrc—>/etc/bashrc—>/etc/profile.d/*.sh
由于Bash的配置文件:按照作用范围:全局配置和个人配置
全局配置文件:对所有用户都生效的
全局配置文件路径:/etc/profile,/etc/profile.d/*.sh, /etc/bashrc
个人配置文件:只是对个人使用环境生效的
个人配置文件路径:~/.bash_profile,~/.bashrc
注意:当全局配置文件和个人配置都配置了环境,那么一个人的配置为准。
根据文件类型分成profile和bashrc
Profile类文件:
1、 设定环境变量
2、 运行命令或脚本,例如开机的时候提示欢迎信息
Bashrc类的文件:
1、 设定本地变量
2、 定义命令的别名

赞(0) 感谢小主打赏
未经允许不得转载:新域软件科技 » linux用户权限详解
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏