■要求定義
– ファイルやフォルダのオーナーやグループを変更する
– chown [オプション] ユーザー[:グループ] ファイル
■chownサンプル
$ ls -l sample.txt
–w–wx-wT 1 vagrant vagrant 89 May 17 11:50 sample.txt
// ここではユーザー所有権「vagrant」、グループ所有権「vagrant」
// [vagrant]から[root]に変更する
$ sudo chown root sample.txt
$ ls -l sample.txt
–w–wx-wT 1 root vagrant 89 May 17 11:50 sample.txt
基本的にファイルを作成したユーザがユーザ所有権者になる
ユーザ所有権を変更すると、所有権者以外はファイルの変更ができなくなる
所有者を自分にしておき、パーミッションを700にすると、他のユーザは見ることができない
ユーザグループに属しておけば、ユーザグループの権限が作業できる
■検討
#include
int chown(const char *path, uid_t owner, gid_t group);
– whoamiで自分のユーザ名、id ${ユーザ名}でuid, gidを調べられる
$ whoami
vagrant
$ id vagrant
uid=1000(vagrant) gid=1000(vagrant) groups=1000(vagrant)
– ユーザ名一覧は「/etc/passwd」ファイルにある
$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
// 省略
ubuntu:x:1001:1001:Ubuntu:/home/ubuntu:/bin/bash
mysql:x:111:115:MySQL Server,,,:/nonexistent:/bin/false
■ユーザ追加の手順
$ sudo su –
$ useradd -m hpscript
$ passwd ${ユーザ名} // パスワード設定
$ usermod -G sudo hpscript // sudoユーザに追加
$ cat /etc/group | grep hpscript
sudo:x:27:ubuntu,hpscript
hpscript:x:1002:
■ユーザ変更の手順
$ su hpscript
■グループ追加の手順
$ groupadd test-group
■グループにユーザ追加の手順
$ sudo gpasswd -a hpscript test-group
Adding user hpscript to group test-group
$ id hpscript
uid=1002(hpscript) gid=1002(hpscript) groups=1002(hpscript),1003(test-group)
$ sudo touch hpscript.txt
$ ls -l
-rw-r–r– 1 root root 0 May 18 03:51 hpscript.txt
あれ、sudoでtouchをするとルートユーザで作成したことになりますな。
#include <stdio.h> #include <unistd.h> int main(){ char *fp; fp = "./hpscript.txt"; int uid = 1001; int gid = 1001; if(chown(fp, uid, gid) == 0){ printf("success\n"); } else { printf("try again\n"); }; return 0; }
$ ./dev
try again
あれ、なんでやろう??