Linux 用户与权限

本文最后更新于:2024年9月8日 晚上

Linux 用户与权限

  • Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。
  • 用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;另一方面也可以帮助用户组织文件,并为用户提供安全性保护。
  • 每个用户账号都拥有一个唯一的用户名和各自的口令,用户在登录时键入正确的用户名和口令后,就能够进入系统和自己的主目录,实现用户账号的管理,要完成的工作主要有如下几个方面:
    • 用户账号的添加。
    • 删除与修改。
    • 用户口令的管理。
    • 用户组的管理。

用户账号的管理

1
用户名@主机名:目录(#|$)
  • #表示是具有root权限的用户。
  • $表示不具有root权限的用户。

who

1
who - [husfV] [user]
  • -H 或 --heading:显示各栏位的标题信息列。
  • -i 或 -u 或 --idle:显示闲置时间,若该用户在前一分钟之内有进行任何动作,将标示成"."号,如果该用户已超过24小时没有任何动作,则标示出"old"字符串。
  • -m:此参数的效果和指定"am i"字符串相同。
  • -q 或–count:只显示登入系统的帐号名称和总人数。
  • -s:此参数将忽略不予处理,仅负责解决who指令其他版本的兼容性问题。
  • -w 或-T或–mesg或–message或–writable:显示用户的信息状态栏。

实例:显示当前登录系统的用户。

1
2
3
4
5
who
root tty7 2014-05-13 12:12 (:0)
root pts/0 2014-05-14 17:09 (:0.0)
root pts/1 2014-05-14 18:51 (192.168.1.17)
root pts/2 2014-05-14 19:48 (192.168.1.17)

whoami

  • 显示当前登录的用户。
1
$ whoami

useradd

  • Linux中一切皆文件,这里的添加用户说就是往/etc/passwd中写入用户的信息。
1
useradd -选项用户名。
  • -c<备注>:指定用户帐号的备注文字。
  • -d登入目录>:指定用户登入时的目录。
  • -e<有效期限>:指定帐号的有效期限。
  • -f<缓冲天数>:指定在密码过期后多少天即关闭该帐号。
  • -g<群组>:指定用户所属的群组。
  • -G<群组>:指定用户所属的附加群组。
  • -l<帐号名称>:指定用户帐号名称。
  • -L:锁定用户密码,使密码无效。
  • -U:解除密码锁定。
  • -s<shell>:指定用户登入后所使用的shell
  • -u<uid>:指定用户ID

userdel

1
2
userdel -选项用户名。
-r 用户名 #删除用户的时候将他的目录页一并删掉!

usermod

1
usermod -选项修改内容用户名。
  • -c<备注>:修改用户帐号的备注文字。
  • -d登入目录>:修改用户登入时的目录。
  • -e<有效期限>:修改帐号的有效期限。
  • -f<缓冲天数>:修改在密码过期后多少天即关闭该帐号。
  • -g<群组>:修改用户所属的群组,覆盖群组。
  • -G<群组>:修改用户所属的附加群组,添加群组。
  • -l<帐号名称>:修改用户帐号名称。
  • -L:锁定用户密码,使密码无效。
  • -U:解除密码锁定。
  • -s<shell>:修改用户登入后所使用的shell
  • -u<uid>:修改用户ID

su

1
2
su 用户名 #切换用户。
su -用户名 #如果想在切换用户之后使用新用户的工作环境,可以在su和username之间加-

sudo

1
2
sudo 命令 # 以管理员的权限运行命令。
sudo su #从普通用户切换到root用户。
  • -i:为了频繁的执行某些只有超级用户才能执行的权限,而不用每次输入密码,可以使用该命令,提示输入密码时该密码为当前账户的密码,没有时间限制,执行该命令后提示符变为"#”而不是"$”,想退回普通账户时可以执行"exit”或"logout”

exit

  • exit命令用于退出目前的shell
  • 执行exit可使shell以指定的状态值退出,若不设置状态值参数,则shell以预设值退出,状态值0代表执行成功,其他值代表执行失败,exit也可用在script,离开正在执行的script,回到shell
1
exit #退回原来的用户,等同于<C-r>

passwd

  • 设置用户的密码。

root用户

1
2
3
$ passwd [username]
new password: #输入密码。
re password: #重新输入密码。
  • -l 用户名:锁定之后这个用户不能登录。
  • -u 用户名:解锁某个用户。
  • -d 用户名:没有密码也不能登录。
  • -S 或 --status 用户名:查看用户状态信息。

普通用户

  • 只能修改自己的密码。
1
2
3
4
$ passwd
(current) UNIX password:
Enter new UNIX password:
Retype new UNIX password:

hostname

1
2
hostname #查看主机名。
hostname 主机名 #修改主机名(临时修改)

write

write命令用于向指定登录用户终端上发送信息,通过write命令可传递信息给另一位登入系统的用户,当输入完毕后,键入EOF表示信息结束,write命令就会将信息传给对方,如果接收信息的用户不只登入本地主机一次,你可以指定接收信息的终端机编号。

1
write(参数)
  • 用户:指定要接受信息的登录用户。
  • 登陆终端:指定接收信息的用户的登录终端(ttyname)

实例

  • 传信息给Rollaend,此时Rollaend只有一个tty:
1
write Rollaend
  • 接下来就是将信息打上去,结束请Ctrl+C:
  • 传信息给Rollaend,Rollaend的tty有pts/2,pts/3:
1
write Rollaend pts/2
  • 接下来就是将信息打上去,结束请Ctrl+C:
  • 若对方设定mesg n,则此时信息将无法传给对方。

wall

wall命令用于向系统当前所有打开的终端上输出信息,通过wall命令可将信息发送给每位同意接收公众信息的终端机用户,若不给予其信息内容,则wall命令会从标准输入设备读取数据,然后再把所得到的数据传送给所有终端机用户。

1
wall(参数)
  • 消息:指定广播消息。

实例

1
2
3
4
5
$ wall this is a test line

Broadcast message from root (pts/1) (Fri Dec 20 11:36:51 2013):

this is a test line

用户组管理

  • 每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理(开发,测试,运维, root),不同Linux 系统对用户组的规定有所不同,如Linux下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建。
  • 用户组的管理涉及用户组的添加,删除和修改,组的增加,删除和修改实际上就是对/etc/group文件的更新。

groupadd

  • 添加用户组。
1
groupadd 组名。
  • -g id:创建完用户组后可以得到一个组的id,这个id是可以指定的,如果不指定就是自增1

groupdel

  • 删除用户组。
1
groupdel 组名。

groupmod

  • 修改用户组。
1
groupmod -选项修改内容组名。
  • -g id:修改组id
  • -n 新组名:修改新组名。

gpasswd

  • 使用gpasswd命令设定用户组密码。
1
gpasswd [可选项] 组名。
  • -a:添加用户到组。
  • -d:从组删除用户。
  • -A:指定管理员。
  • -M:指定组成员和-A的用途差不多。
  • -r:删除密码。
  • -R:限制用户登入组,只有组中的成员才可以用newgrp加入该组。

实例

  • 如系统有个 peter 账户,该账户本身不是 groupname 群组的成员,使用 newgrp 需要输入密码即可。
1
gpasswd groupname
  • 让使用者暂时加入成为该组成员,之后 peter 建立的文件 group 也会是 groupname,所以该方式可以暂时让 peter 建立文件时使用其他的组,而不是 peter 本身所在的组。
  • 所以使用 gpasswd groupname 设定密码,就是让知道该群组密码的人可以暂时切换具备 groupname 群组功能的。
1
gpasswd -A peter users
  • 这样 peter 就是 users 群组的管理员,就可以执行下面的操作:
1
2
gpasswd -a mary users
gpasswd -a allen users
  • 注意:添加用户到某一个组可以使用 usermod -G group_name user_name 这个命令可以添加一个用户到指定的组,但是以前添加的组就会清空掉。
  • 所以想要添加一个用户到一个组,同时保留以前添加的组时,请使用 gpasswd 这个命令来添加操作用户:
1
gpasswd -a user_name group_name

newgrp

  • 用户可以在登录后,使用命令newgrp切换到其他用户组,这个命令的参数就是目的用户组。
  • newgrp 指令类似 login 指令,它是以相同的帐号,另一个群组名称,再次登入系统,欲使用 newgrp 指令切换群组,您必须是该群组的用户,否则将无法登入指定的群组。
  • 单一用户如果同时隶属多个群组,需利用交替用户的设置,若不指定群组名称,则 newgrp 指令会登入该用户名称的预设群组。
1
newgrp 组名。

配置文件

/etc/passwd

  • 用户组的所有信息都存放在/etc/group文件中,此文件的格式是由冒号(:)隔开若干个字段。
  • 登录口令:把真正的加密后的用户口令字存放到/etc/shadow文件中。
  • 0~999为系统保留的系统标识号。
1
2
3
4
5
6
7
8
9
10
11
12
用户名:口令(登录密码x,不可见):用户标识号:组标识号:注释性描述:主目录:登录Shell

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin # 无法登录该用户。
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin

/etc/shadow

  • 用于存储 Linux 系统中用户的密码信息。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志。

root:*:18646:0:99999:7:::
daemon:*:18646:0:99999:7:::
bin:*:18646:0:99999:7:::
sys:*:18646:0:99999:7:::
sync:*:18646:0:99999:7:::
games:*:18646:0:99999:7:::
man:*:18646:0:99999:7:::
lp:*:18646:0:99999:7:::
mail:*:18646:0:99999:7:::
news:*:18646:0:99999:7:::
uucp:*:18646:0:99999:7:::
proxy:*:18646:0:99999:7:::
www-data:*:18646:0:99999:7:::
backup:*:18646:0:99999:7:::
list:*:18646:0:99999:7:::
irc:*:18646:0:99999:7:::
gnats:*:18646:0:99999:7:::
nobody:*:18646:0:99999:7:::

/etc/group

  • 存放用户组的所有信息。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
组名:口令:组标识号:组内用户列表。

root:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:
tty:x:5:
disk:x:6:
lp:x:7:
mail:x:8:
news:x:9:
uucp:x:10:
man:x:12:
proxy:x:13:
kmem:x:15:
dialout:x:20:
fax:x:21:
voice:x:22:
cdrom:x:24:
floppy:x:25:

/etc/gshadow

  • 用于存储 Linux 系统中用户组的密码信息。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
组名:加密密码:组管理员:组附加用户列表。

root:*::
daemon:*::
bin:*::
sys:*::
adm:*::
tty:*::
disk:*::
lp:*::
mail:*::
news:*::
uucp:*::
man:*::
proxy:*::
kmem:*::
dialout:*::
fax:*::
voice:*::
cdrom:*::
floppy:*::
tape:*::
sudo:*::
audio:*::

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!