linux用户与权限管理
(一):文件及目录权限管理
在linux系统中,针对文件而言主要分为三类用户:文件的所有者、组用户、其他用户。而linux系统的文件及目录的权限就是针对这三类不同的用户的(管理员拥有最高权限,在此不考虑系统管理员)。
首先,我们可以通过 ls -l 命令查看文件及目录权限
<pre name="code" class="html">wuhui@ABC:~$ ls -l
total 36
drwxrwxr-x 5 wuhui wuhui 4096 Mar 3 16:41 Demo
drwxr-xr-x 2 wuhui wuhui 4096 Feb 24 18:09 Desktop
drwxr-xr-x 2 wuhui wuhui 4096 Feb 24 18:09 Documents
drwxr-xr-x 2 wuhui wuhui 4096 Feb 24 18:09 Downloads
drwxr-xr-x 2 wuhui wuhui 4096 Feb 24 18:09 Music
drwxr-xr-x 2 wuhui wuhui 4096 Feb 24 18:09 Pictures
drwxr-xr-x 2 wuhui wuhui 4096 Feb 24 18:09 Public
drwxr-xr-x 2 wuhui wuhui 4096 Feb 24 18:09 Templates
drwxr-xr-x 2 wuhui wuhui 4096 Feb 24 18:09 Videos
由此我们可以看到文件及目录的常见权限为r(读)、w(写)、x(执行)除此之外,部分文件还拥有特殊权限。如
wuhui@ABC:~$ ls -l /bin/ping-rwsr-xr-x 1 root root 44168 May 8 2014 /bin/ping
在此,我们只讨论rwx权限。在ls -l 命令的执行结果中,第二位到第十位表示文件的权限,其中每三位代表一个用户,依次为文件所有者、文件属组用户、其他用户。我们先看看不同的文件权限的作用。
针对目录文件:
r:可以对此目录执行ls以列出该目录下的所有文件
w:可以在该目录下创建文件
x:可以使用cd切换此目录,也可以使用ls -l该内部文件的详细信息
针对文本文件:
r:可读,可以使用cat等命令查看
w:可写,可以编辑或删除此文件
x:可执行,可以在命令提示符下当做命令提交给内核运行
通过ls -l命令我们可以看到,三个权限的占位是固定的,我们可以尝试用二进制来表示文件的权限,如果文件的所有者拥有读权限,我们就将第二位置为1,反之则为0,按照每三位一组,我们不难看出可以直接用8进制数来表示一类用户的访问权限。例如:rwx:8 r-x:5 rwxrwxrwx:777
当我们创建文件或者目录时,我们可以看到文件的权限都是固定的
<pre name="code" class="html">wuhui@ABC:/tmp$ mkdir dir
drwxrwxr-x 2 wuhui wuhui 4096 Mar 15 21:53 dir
total 4
wuhui@ABC:/tmp$ ls -l
wuhui@ABC:/tmp$
wuhui@ABC:/tmp$ touch file
wuhui@ABC:/tmp$ ls -l
total 4
drwxrwxr-x 2 wuhui wuhui 4096 Mar 15 21:53 dir
-rw-rw-r-- 1 wuhui wuhui 0 Mar 15 21:54 file
我们可以看到文件的默认权限是rw-rw-r--:664 而目录的默认权限是:rwxrwxr-x:775 这是由于掩码造成的,我们可以通过umask 命令查看和修改当前环境中的umask
wuhui@ABC:/tmp$ umask0002
对于文件而言:文件权限 + umask = 666; 对于目录而言:目录权限 + umask = 777;默认情况下创建的文本文件不具有执行权限,如果当我们修改了umask后创的文本文件拥有了执行权限,系统在创建文件时自动在文件权限上加一。
下面说说如何修改文件权限:
chmod: 修改文件权限
-R, --recursive:递归修改目录及其目录内包含的所有文件的权限(change files and directories recursively)
--reference=RFILE:指定参照文件,将文件的权限修改为和所参照的文件的权限一样(use RFILE's mode instead of MODE values)
还可以直接通过三位8进制数来修改文件的权限,如:chmod 777 file chmod 755 file
chmod命令也可以修改某些用户的某些权限;u代表文件的所有者、g代表同组用户、o代表其他用户,
如:chmod u+x file:给文件所有者添加执行权限
chmod uo+wr:给文件的所有者和其他用户添加读写权限
chmod u-w,g+w,o= file: 给删除文件所有者的w权限,同组用户添加w权限,删除其他用户的wrx权限
(二):用户管理
linux系统的用户主要分为两种:系统管理员和普通用户,而普通用户又分为系统用户和一般用户,当然系统管理员拥有系统的最高权限。其中每个用户都有一个唯一的UID,管理员的UID为0,除此之外系统用户的UID是从1到499,一般用户的UID是从500到65535。除了用户之外还有一个用户组的概念,而用户组又分为:基本组(默认组、私有组)和附加组(额外组两种),每个组也有一个唯一的GID。
linux系统是根据/etc/passwd文件来保存当前系统中的用户与其对应的组的。我们先看看该文件的格式(ps:可以通过 man 5 passwd 命令来查看该文件的格式)
该文件的每一行通过:分为七个字段,依次为:
用户的登录名(login name)
可选加密密码(optional encrypted password),由于安全性考虑,用户的密码另外保存在/etc/shadow文件之中
用户ID(numerical user ID)
组ID(numerical group ID)
注释信息(user name or comment field)
用户家目录(user home directory)
默认shell(optional user command interpreter)
关于用户组的信息也可通过查看/etc/group文件获取,其格式类似于passwd文件。
下面讲讲如何管理用户及用户组:
useradd:创建一个新用户(create a new user or update default new user information)
该命令的默认配置文件保存在/etc/login.defs文件中
-u, --uid UID:指定UID
-g, --gid GROUP:指定基本组,如果不指定基本组,则默认创建一个与用户名同名的组
-G, --groups:指定附加组,可以指定多个,用逗号隔开
-c, --comment COMMENT:添加注释信息(Any text string. It is generally a short description of the login, and is currently used as the field for the user's full name.)
-d, --home HOME_DIR:指定家目录
-s, --shell SHELL:指定默认shell
-m, --create-home:强制创建家目录
-M:不创建用户家目录
-r:添加一个系统用户
userdel: 删除一个用户(delete a user account and related files)
默认情况不删除用户的家目录
-r:删除用户的同时也删除家目录
id:查看用户的信息(print real and effective user and group IDs)
finger: 查看用户账号信息(user information lookup program)
usermod:修改用户账号信息(modify a user account)
-u, --uid UID:修改UID
-g, --gid GROUP:修改基本组
-G, --groups GROUP1[,GROUP2,...[,GROUPN]]]:修改附加组,如果该用户已有附加组,则会覆盖原有的附加组
-Ga:在原有的附加组上添加新的附加组
-c, --comment COMMENT:修改注释信息(The new value of the user's password file comment field. It is normally modified using the chfn(1) utility.)
-d, --home HOME_DIR: 修改家目录,修改后该用户不能访问原有的家目录
-dm:修改家目录后将此前家目录的文件移动到新的家目录中
-s, --shell SHELL:修改shell (The name of the user's new login shell. Setting this field to blank causes the system to select the default login shell.)
-L, --lock: 锁定账号
-U, --unlock:解锁账号
chsh:修改用户默认shell
chfn:修改用户的注释信息,finger查看的信息
passwd:修改密码,普通用户修改自己的密码,管理员可以修改其他用户的密码(change user password)
-l, --lock:锁定账号
-u, --unlock:解锁账号
-d, --delete:删除用户密码(Delete a user's password (make it empty). This is a quick way to disable a password for an account. It will set the named account passwordless.)
groupadd:创建一个用户组,使用方法类似于useradd(create a new group)
groupmod:修改组信息,用法类似于usermod (modify a group definition on the system)
groupdel:删除组,使用方法类似于userdel (delete a user account and related files)
gpasswd:给组加密码 (administer /etc/group and /etc/gshadow)
newgrp:临时切换用户的基本组,此时会需要组密码(附加组中没有要切换到的组)否则也不需要密码
exit:退出临时登录到的组