我目前有一台小型 Ubuntu Server 12.04 机器(测试环境),创建了大约 3 个非 root 用户。每个用户在其目录下都有自己的public_html
目录home
,从而允许他们将多个应用程序部署为命名虚拟主机。每个用户都属于Apachewww-data
组,设置如下:
sudo usermod -a -G www-data [username]
sudo chown -R [username]:www-data /home/[username]/public_html
sudo chmod 2750 /home/[username]/public_html
现在,作为 root 用户,我正在创建一个 bash 脚本,该脚本将在提示用户的情况下自动创建 VirtualHost 的文件夹,public_html
并在/etc/apache2/sites-available/
.该脚本(使用 运行sudo
)将提示输入用户 ( $uzer
) 和所需的虚拟主机名 ( $vhost
)。到目前为止,经过几次检查后,我最终得到以下结果......
mkdir -vp /home/$uzer/public_html/$vhost
mkdir -vp /home/$uzer/public_html/$vhost/www
mkdir -vp /home/$uzer/public_html/$vhost/logs
mkdir -vp /home/$uzer/public_html/$vhost/backups
我需要更改这些新创建的文件夹的所有权,因此我不确定是否应该执行以下操作:
chown -vR $uzer:www-data /home/$uzer/public_html/$vhost
chmod 2750 /home/$uzer/public_html/$vhost
我的问题:
- 我的文件夹结构正确/理想吗?
- 我知道我已经使用了递归 (
-R
) 选项,但是我应该对$vhost/www
,$vhost/logs
和重复相同的操作$vhost/backups
吗? - 我是否正确地认为上面的 chmod 可能是多余的?
- 有什么方法可以让我
mkdir
以用户身份运行命令$uzer
吗?
答案1
问:我的文件夹结构正确/理想吗?
答:文件夹结构看起来不错。
问:我知道我使用了递归 (-R) 选项,但我是否应该对 $vhost/www、$vhost/logs 和 $vhost/backups 重复相同的操作?
答:在这些目录上运行它是多余的
问:我认为上面的 chmod 可能是多余的,这样的想法正确吗?
是的,从技术上讲,它是多余的,因为创建目录的初始 sudo 正在设置“设置组 ID 位”,但设置该位(2750 中的 2)并不能保证。我见过这样的目录,用户要么将文件移动到目录中,要么意外地更改了文件组,所以我会保留它。
有没有办法可以以用户 $uzer 身份运行 mkdir 命令?
root$ su -u $user -c "mkdir ..."
您还可以使用开关来节省 /www、/log 和 /backups 的 chmod 操作步骤mkdir --mode=...
。
例如
mkdir -vp --mode=2750 /home/$uzer/public_html/$vhost
mkdir -vp --mode=2750 /home/$uzer/public_html/$vhost/www
mkdir -vp --mode=2750 /home/$uzer/public_html/$vhost/logs
mkdir -vp --mode=2750 /home/$uzer/public_html/$vhost/backups
答案2
- 实际上,您使用的文件夹结构并不重要。
- 如果您在 chown 中使用
-R
选项,它只会影响运行该命令时存在的文件和目录。 chmod
不可以,因为如果您手动进行任何更改,您始终必须使用命令来更改权限。- 您可以要求
/etc/sudoers
file 允许 $user 使用mkdir
命令创建任何目录。