useradd新建用户和权限分配

场景:在搭建Ftp服务器时候,需要新建ftp用户,其实新建的ftp用户和Linux中root新建的用户一样,只是需要了解新建用户时候的相关规则。

1 解决新建用户缺少配置文件

1.1 新建用户 指定目录 修改密码

1. useradd 添加用户或更新新创建用户的默认信息

语法:useradd  选项 用户名

该命令的各选项含义如下:

-c comment    描述新用户帐号,通常为用户全名,comment 为字符串。
-d home_dir 设置用户主目录,默认值为用户的登录名,并放在/home目录下。
-D 创建新帐号后保存为新帐号设置的默认信息。
-e expire_date 用 MM/DD/YYYY 格式设置帐号过期日期。
-f inactivity 设置口令失效时间,该值为 0 使口令失效后帐号立即失效,为 -1 使该选项失效。
-g group 设置所要创建新用户所在的基本组,group为组名。
-k skel_dir 设置框架目录,该目录包含用户的初始配置文件,
创建用户时该目录下的文件都被复制到用户主目录下。
-m 自动创建用户主目录,并把框架目录(默认为/etc/skel)下的文件复制到用户主目录下。
-M 不创建用户主目录。
-r 允许保留的系统帐号使用用户ID创建一个新帐号。
-s shell 指定用户的登录shell。
-u user_id 设置用户ID

代码:

# useradd -d /home/test -m test;
然后给test设置密码。
# passwd test;

useradd新建用户和权限分配

ps:注意上述test目录中已经存在一些用户默认的配置文件。

1.2 查看创建的用户列表

一般情况下是:

cat /etc/passwd 可以查看所有用户的列表
w 可以查看当前活跃的用户列表
cat /etc/group 查看用户组

useradd新建用户和权限分配

但是这样看起来不是很简洁,一个简洁的命令是

cat /etc/passwd|grep -v nologin|grep -v halt|grep -v shutdown|awk -F":" '{ print $1"|"$3"|"$4 }'|more

useradd新建用户和权限分配

1.3 删除用户及目录

按部就班的办法是先删除用户在删除目录:

删除用户的命令是:userdel 用户名
比如我刚建立的用户是:zhyh,则命令为:
userdel zhyh
执行以上命令成功后利用以下命令删除目录
rm -rf /home/zhyh/
一个简单的办法就是执行下面的命令
userdel -r zhyh

useradd新建用户和权限分配


1.4 问题

今天新建了一个MQM的用户 ,

useradd -g mqm -d /var/mqm //容易缺少配置文件
passwd mqm

终端中显示 -bash-4.1$而不是 [mqm@locahost~]

百度了下。据说是因为缺少配置文件,所以将缺少的配置文件复制到用户的家目录既可以。

将/etc/skel中的文件全部复制到/var/mqm/之后,问题就得到了解决。 操作如下

#查看用户的家目录
cat /etc/passwd
#-a表示复制隐藏文件
cp -a /etc/skel/.  /var/mqm        

useradd新建用户和权限分配

linux中以 .开头的文件默认隐藏。在命令中加入-a可以对隐藏文件进行操作。

#可以查看隐藏文件
ls -a /etc/skel #可以复制隐藏文件
cp -a /etc/skel/. /

如果想将一个文件隐藏,只要在文件名之前加上“ . ”即可

#隐藏test文件
mv test .test

2 用户Shell控制

linux adduser-s /sbin/nologin和/bin/false的区别

/bin/false 是最严格的禁止login选项,一切服务都不能用,
/sbin/nologin 只是不允许系统login,可以使用其他ftp等服务

如果想要用false在禁止login的同时允许ftp,则必须在/etc/shells里增加一行/bin/false。

知道了Linux用户管理最重要的两个文件就是/etc/passwd和/etc/shadow这两个文件。其中/etc/passwd是用来存储登陆用户信息的,它的基本格式如下:

root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin

由上面的格式可以看出,每一行代表一个用户的信息,一共包括7个字段的信息,每个字段的信息用冒号隔开。这7个字段分别代表:

1. 账号名称:即登陆时的用户名
2. 密码:早期UNIX系统的密码是放在这个文件中的,但因为这个文件的特性是所有程序都能够读取,所以,这样很容易造成数据被窃取,因此后来就将这个字段的密码数据改放到/etc/shadow中了
3. UID:用户ID,每个账号名称对应一个UID,通常UID=0表示root管理员
4. GID:组ID,与/etc/group有关,/etc/group与/etc/passwd差不多,是用来规范用户组信息的
5. 用户信息说明栏: 用来解释这个账号是干什么的
6. 家目录:home目录,即用户登陆以后跳转到的目录,以root用户为例,/root是它的家目录,所以root用户登陆以后就跳转到/root目录这里
7. Shell:用户使用的shell,通常使用/bin/bash这个shell,这也就是为什么登陆Linux时默认的shell是bash的原因,就是在这里设置的,如果要想更改登陆后使用的shell,可以在这里修改。

另外一个很重要shell可以用来替代让账号无法登陆shell的命令,那就是/sbin/nologin,此时该用户只能使用ftp登录。

当我看到这里的时候,我就去登陆我们实验室的服务器,打开/etc/passwd这个文件,里面果然有很多的类似上面格式的用户账号信息。由于我们实验室服务器开放了ftp服务,而我正好有一个ftp的账号,我看到我的账号信息是这样的

lxb:x::::/opt/ftp:/sbin/nologin

通过上面的学习,我觉得它的意思大概是这样的,用户名是lxb,x表示密码经过加密放到/etc/shadow文件中了,UID是530,GID是525,访问的目录是/opt/ftp,我看了一下,这个目录下的内容正好是我登陆ftp后所看到的,至于最后一个/sbin/nologin,应该是登录时候使用的shell,但是它为什么是nologin呢,难道不让我登陆吗?

于是我用root权限登陆到里面,把后面的/sbin/nologin改成了/bin/bash,重新用ssh进行登陆,真的登陆进去了,而且登陆后的目录正好是/opt/ftp。

修改用户的shell类型有两种方式:

1、编辑/etc/passwd 文件

vim /etc/passwd

找到要修改的用户,直接进行编辑即可。

useradd新建用户和权限分配

2、使用命令修改

usermod -s /bin/bash cs408
usermod -s /sbin/nologin cs408 //限定用户cs408不能shell登录,只能ftp
上一篇:BZOJ1179 Atm //缩点+spfa


下一篇:一行命令更新所有 npm 依赖包