1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > Linux shell 学习笔记(5)— 文件权限(添加 修改 删除用户及创建 修改群组)

Linux shell 学习笔记(5)— 文件权限(添加 修改 删除用户及创建 修改群组)

时间:2019-12-16 12:37:14

相关推荐

Linux shell 学习笔记(5)— 文件权限(添加 修改 删除用户及创建 修改群组)

1. Linux的安全性

Linux 安全系统的核心是用户账户。每个能进入 Linux 系统的用户都会被分配唯一的用户账户。用户对系统中各种对象的访问权限取决于他们登录系统时用的账户。

用户权限是通过创建用户时分配的用户 ID(User ID,通常缩写为 UID)来跟踪的。UID 是数值,每个用户都有唯一的 UID,但在登录系统时用的不是 UID,而是登录名。

1.1 etc/passwd 文件

Linux 系统使用一个专门的文件来将用户的登录名匹配到对应的 UID 值。这个文件就是 /etc/passwd文件。

$ cat /etc/passwdroot:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinadm:x:3:4:adm:/var/adm:/sbin/nologinlp:x:4:7:lp:/var/spool/lpd:/sbin/nologinsync:x:5:0:sync:/sbin:/bin/sync....sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologinrpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologinnfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologinhaldaemon:x:68:68:HAL daemon:/:/sbin/nologinxfs:x:43:43:X Font Server:/etc/X11/fs:/sbin/nologingdm:x:42:42::/var/gdm:/sbin/nologinrich:x:500:500:Rich Blum:/home/rich:/bin/bashmama:x:501:501:Mama:/home/mama:/bin/bashkatie:x:502:502:katie:/home/katie:/bin/bashjessica:x:503:503:Jessica:/home/jessica:/bin/bashmysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash$

root 用户账户是 Linux 系统的管理员,固定分配给它的 UID 是 0。就像上例中显示的,Linux 系统会为各种各样的功能创建不同的用户账户,而这些账户并不是真的用户。这些账户叫作系统账户,是系统上运行的各种服务进程访问资源用的特殊账户。所有运行在后台的服务都需要用一个系统用户账户登录到 Linux 系统上。

Linux 为系统账户预留了 500 以下的 UID 值。

/etc/passwd文件的字段包含了如下信息:

登录用户名用户密码用户账户的UID(数字形式)用户账户的组ID(GID)(数字形式)用户账户的文本描述(称为备注字段)用户HOME目录的位置用户的默认shell

/etc/passwd 文件中的密码字段都被设置成了 x,这并不是说所有的用户账户都用相同的密码。

绝大多数 Linux 系统都将用户密码保存在另一个单独的文件中(叫作 shadow 文件,位置在 /etc/shadow)。只有特定的程序(比如登录程序)才能访问这个文件。

1.2 /etc/shadow 文件

/etc/shadow 文件对 Linux 系统密码管理提供了更多的控制。只有 root 用户才能访问 /etc/shadow文件,这让它比起 /etc/passwd 安全许多。

/etc/shadow 文件为系统上的每个用户账户都保存了一条记录,如下所示:

rich:$1$.FfcK0ns$f1UgiyHQ25wrB/hykCn020:11627:0:99999:7:::

在 /etc/shadow 文件的每条记录中都有 9 个字段:

与 /etc/passwd 文件中的登录名字段对应的登录名

加密后的密码

自上次修改密码后过去的天数密码(自1970年1月1日开始计算)

多少天后才能更改密码

多少天后必须更改密码

密码过期前提前多少天提醒用户更改密码

密码过期后多少天禁用用户账户

用户账户被禁用的日期(用自1970年1月1日到当天的天数表示)

预留字段给将来使用

使用 shadow 密码系统后,Linux 系统可以更好地控制用户密码。它可以控制用户多久更改一次密码,以及什么时候禁用该用户账户,

1.3 添加新用户

useradd 命令使用系统的默认值以及命令行参数来设置用户账户。系统默认值被设置在 /etc/default/useradd 文件中。可以使用加入了 -D 选项的 useradd 命令查看所用 Linux 系统中的这些默认值。

# /usr/sbin/useradd -DGROUP=100HOME=/homeINACTIVE=-1EXPIRE=SHELL=/bin/bashSKEL=/etc/skelCREATE_MAIL_SPOOL=yes#

在创建新用户时,如果你不在命令行中指定具体的值,useradd 命令就会使用 -D 选项所显示的那些默认值。这个例子列出的默认值如下:

新用户会被添加到 GID 为100的公共组;新用户的 HOME 目录将会位于 /home/loginname;新用户账户密码在过期后不会被禁用;新用户账户未被设置过期日期;新用户账户将 bash shell 作为默认 shell;系统会将 /etc/skel 目录下的内容复制到用户的 HOME 目录下;系统为该用户账户在 mail 目录下创建一个用于接收邮件的文件;

可以用默认系统参数创建一个新用户账户,然后检查一下新用户的 HOME 目录。

# useradd -m test# ls -al /home/testtotal 24drwxr-xr-x 2 test test 4096 -09-23 19:01 .drwxr-xr-x 4 root root 4096 -09-23 19:01 ..-rw-r--r-- 1 test test 220 -04-18 21:51 .bash_logout-rw-r--r-- 1 test test 3103 -04-18 21:51 .bashrc-rw-r--r-- 1 test test 179 -03-26 08:31 examples.desktop-rw-r--r-- 1 test test 675 -04-18 21:51 .profile#

默认情况下,useradd 命令不会创建 HOME 目录,但是 -m 命令行选项会使其创建 HOME 目录。

要想在创建用户时改变默认值或默认行为,可以使用命令行参数,下图列出了这些参数。

在创建新用户账户时使用命令行参数可以更改系统指定的默认值。但如果总需要修改某个值的话,最好还是修改一下系统的默认值。

可以在 -D 选项后跟上一个指定的值来修改系统默认的新用户设置。参数列表如下图所示

更改默认值非常简单:

# useradd -D -s /bin/tsch# useradd -DGROUP=100HOME=/homeINACTIVE=-1EXPIRE=SHELL=/bin/tschSKEL=/etc/skelCREATE_MAIL_SPOOL=yes# useradd命令会将tsch shell作为所有新建用户的默认登录shell。

1.4 删除用户

要删除用户可以使用 userdel 命令,默认情况下,userdel 命令会只删除 /etc/passwd 文件中的用户信息,而不会删除系统中属于该账户的任何文件。

如果加上 -r 参数,userdel 会删除用户的 HOME 目录以及邮件目录。然而,系统上仍可能存有已删除用户的其他文件。这在有些环境中会造成问题。

# /usr/sbin/userdel -r test# ls -al /home/testls: cannot access /home/test: No such file or directory#

1.5 修改用户

Linux提供了一些不同的工具来修改已有用户账户的信息。

usermod

usermod命令是用户账户修改工具中最强大的一个。它能用来修改/etc/passwd文件中的大部分字段,只需用与想修改的字段对应的命令行参数就可以了。参数大部分跟useradd命令的参数一样(比如,-c修改备注字段,-e修改过期日期,-g修改默认的登录组)。除此之外,还有另外一些可能派上用场的选项。

 -l 修改用户账户的登录名。

 -L 锁定账户,使用户无法登录。

 -p 修改账户的密码。

 -U 解除锁定,使用户能够登录。

passwd 和 chpasswd

改变用户密码的一个简便方法就是用passwd命令:

# passwd testChanging password for user test.New UNIX password:Retype new UNIX password:passwd: all authentication tokens updated successfully.#

如果只用 passwd 命令,它会改你自己的密码。系统上的任何用户都能改自己的密码,但只有root 用户才有权限改别人的密码。

-e 选项能强制用户下次登录时修改密码。你可以先给用户设置一个简单的密码,之后再强制在下次登录时改成他们能记住的更复杂的密码。

如果需要为系统中的大量用户修改密码,chpasswd 命令可以事半功倍。chpasswd 命令能从标准输入自动读取登录名和密码对(由冒号分割)列表,给密码加密,然后为用户账户设置。你也可以用重定向命令来将含有 userid:passwd 对的文件重定向给该命令。

# chpasswd < users.txt#

chsh、chfn 和 chage

chsh 命令用来快速修改默认的用户登录 shell。使用时必须用 shell 的全路径名作为参数,不能只用 shell 名。

# chsh -s /bin/csh testChanging shell for test.Shell changed.#

chfn 命令提供了在 /etc/passwd 文件的备注字段中存储信息的标准方法。chfn 命令会将用于 Unix 的 finger 命令的信息存进备注字段,而不是简单地存入一些随机文本(比如名字或昵称之类的),或是将备注字段留空。finger 命令可以非常方便地查看 Linux 系统上的用户信息。

# finger richLogin: rich Name: Rich BlumDirectory: /home/rich Shell: /bin/bashOn since Thu Sep 20 18:03 (EDT) on pts/0 from 192.168.1.2No mail.No Plan.#

如果在使用 chfn 命令时没有参数,它会向你询问要将哪些适合的内容加进备注字段。

# chfn testChanging finger information for test.Name []: Ima TestOffice []: Director of TechnologyOffice Phone []: (123)555-1234Home Phone []: (123)555-9876Finger information changed.# finger testLogin: test Name: Ima TestDirectory: /home/test Shell: /bin/cshOffice: Director of Technology Office Phone: (123)555-1234Home Phone: (123)555-9876Never logged in.No mail.No Plan.#

查看 /etc/passwd 文件中的记录,你会看到下面这样的结果。

# grep test /etc/passwdtest:x:504:504:Ima Test,Director of Technology,(123)555-1234,(123)555-9876:/home/test:/bin/csh#

chage 命令用来帮助管理用户账户的有效期。

chage命令的日期值可以用下面两种方式中的任意一种:

YYYY-MM-DD格式的日期代表从1970年1月1日起到该日期天数的数值

chage 命令中有个好用的功能是设置账户的过期日期。有了它,你就能创建在特定日期自动过期的临时用户,再也不需要记住删除用户了!过期的账户跟锁定的账户很相似:账户仍然存在,但用户无法用它登录。

2. 使用Linux组

组权限允许多个用户对系统中的对象(比如文件、目录或设备等)共享一组共用的权限。

每个组都有唯一的 GID——跟 UID 类似,在系统上这是个唯一的数值。除了 GID,每个组还有唯一的组名。

/etc/group文件包含系统上用到的每个组的信息。

root:x:0:rootbin:x:1:root,bin,daemondaemon:x:2:root,bin,daemonsys:x:3:root,bin,admadm:x:4:root,adm,daemonrich:x:500:mama:x:501:katie:x:502:jessica:x:503:mysql:x:27:test:x:504:

和 UID 一样,GID 在分配时也采用了特定的格式。系统账户用的组通常会分配低于 500 的 GID值,而用户组的 GID 则会从 500 开始分配。/etc/group 文件有 4 个字段:

​ * 组名

​ * 组密码

​ * GID

​ * 属于该组的用户列表

组密码允许非组内成员通过它临时成为该组成员。这个功能并不很普遍,但确实存在。

说明用户账户列表某种意义上有些误导人。你会发现,在列表中,有些组并没有列出用户。这并不是说这些组没有成员。当一个用户在 /etc/passwd 文件中指定某个组作为默认组时,用户账户不会作为该组成员再出现在 /etc/group 文件中。多年以来,被这个问题难倒的系统管理员可不是一两个呢。

2.1 创建新组

groupadd 命令可在系统上创建新组。

# /usr/sbin/groupadd shared# tail /etc/grouphaldaemon:x:68:xfs:x:43:gdm:x:42:rich:x:500:mama:x:501:katie:x:502:jessica:x:503:mysql:x:27:test:x:504:shared:x:505:#

在创建新组时,默认没有用户被分配到该组。groupadd 命令没有提供将用户添加到组中的选项,但可以用 usermod 命令来弥补这一点。

# /usr/sbin/usermod -G shared rich# /usr/sbin/usermod -G shared test# tail /etc/grouphaldaemon:x:68:xfs:x:43:gdm:x:42:rich:x:500:mama:x:501:katie:x:502:jessica:x:503:mysql:x:27:test:x:504:shared:x:505:rich, test#

shared 组现在有两个成员:test和rich。usermod 命令的 -G 选项会把这个新组添加到该用户账户的组列表里。

说明如果更改了已登录系统账户所属的用户组,该用户必须登出系统后再登录,组关系的更改才能生效。

警告为用户账户分配组时要格外小心。如果加了 -g 选项,指定的组名会替换掉该账户的默认组。-G 选项则将该组添加到用户的属组的列表里,不会影响默认组。

2.2 修改组

groupmod 命令可以修改已有组的 GID(加-g选项)或组名(加-n选项)。

# /usr/sbin/groupmod -n sharing shared# tail /etc/grouphaldaemon:x:68:xfs:x:43:gdm:x:42:rich:x:500:mama:x:501:katie:x:502:jessica:x:503:mysql:x:27:test:x:504:sharing:x:505:test,rich# # 修改组名时,GID和组成员不会变,只有组名改变。

3. 理解文件权限

待续

4. 改变安全性设置

待续

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。