Life would be so much simple if we don't care so much

Khi tạo mới 1 thư mục hoặc 1 file thì có lẽ mọi quyền truy cập sẽ là như nhau. umask là 1 cơ chế để thiết lập quyền truy cập file default cho file và thư mục.

1. Check giá trị umask

Sau khi đã hoàn tất login vào OS thì umask đã được thiết lập sẵn. Bởi vì trong file /etc/bashrc (là file được execute khi login vào OS) đã có 1 descriptor dùng để assign giá trị umask cho user.
Để check giá trị umask hiện tại có thể run command umask mà không cần chỉ định option

$ umask
0002
Giá trị umask hiện tại đang là 0002 (ý nghĩa của giá trị này sẽ giải thích sau)

Nếu chỉ định option「-S」thì có thể confirm được quyền truy cập default của thư mục dưới dạng symbol mode

$ umask -S
u=rwx,g=rwx,o=rx
***Note

Đối với từng account thì giá trị umask sẽ được thiết lập.

2. Setting umask

Để setting umask thì ở lệnh umask sẽ viết giá trị umask và run

vd: Trong trường hợp set giá trị umask thành 0022
$ umask
0002 ← giá trị hiện tại 0002

$ umask 0022 ← set umaskt thành 0022

$ umask
0022 ← giá trị umask bây giờ là 0022

3. Cách tính umask

Dựa theo option mà cách thức tính giá trị umask sẽ được giải thích ở phần này.
Đối với file và folder thì cách tính toán sẽ khác nhau nhưng xác định được bạn muốn quyền truy cập default sẽ như thế nào thì có thể setting được.

Bạn có thể tính umask value bằng cách trừ đi giá trị quyền truy cập default từ 666 (đối với file) và 777 (đối với thư mục) (Giá trị umask có 1 số ngoại lệ nên hãy tham khảo table thêm. Không thể assign được phân quyền cho giá trị inital của file.)

Trường hợp muốn set giá trị access default của file và thư mục là 755 thì làm như sau:

777-755=022

umask 022 hoặc umask 0022 thì phần numeric có thể được set trong 4 ký tự. Có thể set default quyền access của thư mục là 755

4. Bảng cheat umask

Đối với giá trị umask đã chỉ định, thì dưới đây là bảng so sánh giữa quyền truy cập của file và thư mục

umask value default access of directory default access of file
0 rwx rw-
1 rw- rw-
2 r-x r–
3 r– r–
4 -wx -w-
5 -w- -w-
6 –x —
7 — —

5. Chỉ định symbol mode cho umask

Có thể execute giá trị umask theo symbol mode dưới đây. Cũng giống như symbol mode của chmod

umask u=rwx,g=rwx,o=rx
memo

※ Phần execute authority của file được tạo sẽ bị ignored.

Các sample sử dụng
$ umask -S
u=rwx,g=rwx,o=rx  ← Phần Other ko set phân quyền cho quyền write

$ umask u=rwx,g=rwx,o=rwx ← Phần Other không được chỉ định rwx

$ umask -S
u=rwx,g=rwx,o=rwx  ← Phần Other đã trở thành rwx

$ mkdir dir
$ ls -l
drwxrwxrwx 2 user1 user1 4096 7月 30 09:21 dir ← Default quyền truy cập ở phần Other của directory trở thành rwx
$ umask u=rwx,g=rwx,o=rx  ← Phần Other thì w đã bị remove

$ umask -S
u=rwx,g=rwx,o=rx

$ umask
0002

$ mkdir dir2
$ ls -l
drwxrwxr-x 2 user1 user1 4096 7月 30 09:21 dir2 ← Phần Other thì w đã bị remove
symbol mode của umask hay cũng giống như symbol mode của chmod thì có thể thêm hoặc xoá bớt ký tự

$ umask -S
u=rwx,g=rwx,o=rx

$ umask o+w  ← Phần Other thì w (quyền write) được thêm vào

$ umask -S
u=rwx,g=rwx,o=rwx ← Phần Other thì w (quyền write) được thêm vào

Tham khảo 

Advertisements

Sticky Bit tức là quyền truy cập đặc biệt ở Linux. Ở bài này sẽ hướng dẫn về Sticky Bit

1. Sticky Bit là gì?

Sticky Bit là việc thưc mục được thiết lập quyền truy cập đặc biệt.
Directory được thiết lập Sticky Bit thì tất cả các user có thể write nhưng chỉ có owner (ngoại trừ root) mới được xoá.
Thư mục /tmp được thiết lập Sticky Bit.

2. Check Sticky Bit setting

Check Sticky Bit có đang được thiết lập hay không?
# ls -ld /tmp/
drwxrwxrwt 7 root root 4096 7月 29 04:02 /tmp/

Đối với account khác thì ở phần quyền execute sẽ là 「t」. Khi thiết lập Sticky Bit cho thư mục thì quyền execute sẽ hiển thị là 「t」

3. Thiết lập Sticky Bit

Dùng command chmod để setting Sticky Bit

Setting với Symbol mode
Để set Sticky Bit với symbol mode thì dùng command chmod và set authority cho Other là t

chmod o+t dir

Setting với Numeric mode
Để set Sticky Bit với numeric mode thì dùng thêm vào giá trị 1000 cho quyền truy cập

chmod 1777 dir
Thử confirm lại permission của thư mục trên

# ls -ld dir
drwxrwxrwt 2 root root 4096 7月 29 08:41 dir
Phần Other sẽ hiển thị quyền truy cập tương ứng với t, Sticky Bit đã được set

SGID (Set Group ID) – Quyền truy cập đặc biệt
Trong linux bên cạnh SUID (Set User ID) thì còn có 1 quyền truy cập đặc biệt được gọi là SGID (Set Group ID) . Ở bài này sẽ giải thích về SGID (Set Group ID)

1. SGID (Set Group ID) là gì?

SGID (Set Group ID) nghĩa là quyền truy cập đặc biệt vào 1 file và có khả năng thực thi. Khách với SUID thì SGID có thể được thiết lập cho thư mục.

Trường hợp setting SGID (Set Group ID) cho file thực thi thì khi execute file đó file sẽ được thực thi dưới quyền của group owner.
Trường hợp setting SGID (Set Group ID) cho thư mục thì group owner của những file và thư mục con của thư mục đó sẽ trở thành group owner của thư mục mà được thiết lập SGID (Set Group ID)

2. Setting SGID (Set Group ID) như thế nào?

Để thiết lập SGID (Set Group ID) thì sẽ thực hiện command chmod như dưới đây:

chmod g+s file
Trong trường hợp setting quyền truy cập ở numberic mode thì add thêm vào 2000 cho giá trị số. Chẳng hạn muốn set SGID (Set Group ID) cho 1 file thực thi có quyền truy cập là 755 thì giá trị sẽ trở thành 2775

chmod 2755 file

***Note
Khi thiết lập SGID(Set Group ID) cho thư mục thì option cũng tương tự

3. Check SGID(Set Group ID)

Để confirm lại SGID (Set Group ID) thì có thể dùng lệnh「ls -l」

# touch file
# chmod 2755 file
# ls -l file
-rwxr-sr-x 1 root group2 0 7月 26 08:24 file
Phần permission của group là r-s. Phần quyền thực thi file thì thông thường là x nhưng ở đây là s nên mang ý nghĩa là SGID (Set Group ID) đang được thiết lập.

4. 1 số sample sử dụng
Trong thực tế, thiết lập SGID (Set Group ID) và check lại cách hoạt động. Test cả 2 trường hợp khi thiết lập file thực thi lẫn directory.

Khi set file thực thi, sử dụng root

# id
uid=0(root) gid=0(root) 所属グループ=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel)

# cp /bin/touch .  ← copy lệnh touch
# chgrp group1 touch  ← set group là group1
# chmod g+s touch  ← set SGID
# ls -l touch
-rwxr-sr-x 1 root group1 42284 7月 26 08:28 touch ← SGID được thiết lập

# ./touch test.txt

# ls -l test.txt
-rw-r–r– 1 root group1 0 7月 26 08:30 test.txt ← group owner đã trở thành group1
***Note
Bởi vì chúng ta thực thi command ở root account nên tuỳ theo command mà group của file được tạo ra sẽ là root.
Để thiết lập SGID cho command touch, command được thực thi bởi quyền root:group1và group của file được tạo ra sẽ là group1.

Khi thiết lập với directory
Trường hợp set SGID với directory thì các sub file/directory sẽ được set với group owner của directory đã được set SGID.

# mkdir dir ← Tạo thư mục
# chgrp group1 dir ← Set group 1 cho group owner
# chmod g+s dir ← Set SGID

# ls -ld dir
drwxr-sr-x 2 root group1 4096 7月 26 08:33 dir  ← group trở thành group 1 của directory đã được set SGID

# touch dir/test.txt  ← dùng root account, tạo sub file cho thư mục dir
# mkdir dir/test_dir  ← dùng root account, tạo sub directory cho thư mục dir
# ls -l dir
合計 12
-rw-r–r– 1 root group1 0 7月 26 08:33 test.txt  ← group trở thành group1
drwxr-sr-x 2 root group1 4096 7月 26 08:34 test_dir  ← group trở thành group1
***Note
Khi tạo sub directory cho directory được set SGID thì sub directory cũng sẽ được set SGID. Có vẻ là có vấn đề về security nên cần chú ý sử dụng thích hợp.

 

Trong linux có 1 quyền truy cập đặc biệt được gọi là SUID(Set User ID). Trong bài này sẽ giải thích về SUID (Set User ID)

1. SUID (Set User ID) là gì?

SUID (Set User ID) là quyền truy cập đặc biệt được thiết lập với file và cho phép execute file
Thông thường, khi thực thi thì file sẽ được execute với quyền thực thi của user run file đó nhưng file được thiết lập SUID (Set User ID) thì nó được thực thi với quyền của user owner

Trong list các command được đưa vào sử dụng trong Linux, thì có command dùng để setting SUID (Set User ID). Chẳng hạn như command passwd cũng có tác dụng liên quan đến setting này.

2. Cách confirm setting SUID (Set User ID)

Có thể dùng ls -l để check xem SUID (Set User ID) có được setting hay không,

$ ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 22984 1月 7 2007 /usr/bin/passwd
Phần permisssion của ownership sẽ trở thành「rws」. Quyền execute file thông thường là 「x」 nhưng ở đây sẽ trở thành 「s」tức là SUID (Set User ID) đang được thiết lập.

*** Note
Command passwd để cập nhật các file /etc/passwd, /etc/shadow mà thông thường thì general user sẽ không update được.
Common user khi thưc thi command này, vì SUID đang được setting cho command passwd, sau đó thực thi với quyền root nên có thể cập nhật được các file /etc/passwd, /etc/shadow.

3. Setting SUID (Set User ID)

Để setting SUID (Set User ID) thì chỉ định command chmod như sau

chmod u+s file

Ở numeric mode trường hợp set quyền truy cập thì sẽ cộng thêm vào giá trị 4000. Chẳng han, nếu muốn setting SUID cho file thực thi có quyền truy cập 755 thì giá trị được overwrite thành 4755

chmod 4755 file

4. Các sample sử dụng

Thực tế, thử confirm các hoạt động của setting SUID (Set User ID) như dưới đây.

# id 現在rootアカウント
uid=0(root) gid=0(root) 所属グループ=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel)

# cp /bin/touch .  ← copy command touch
# chown user1 touch  ← set owner của command touch thành user1
# chmod u+s touch  ← setting SUID

# ls -l touch
-rwsr-xr-x 1 user1 root 42284 7月 25 12:39 touch ← setting SUID

# ./touch test.txt ← sử dụng command đã set SUID để tạo file test.txt

# ls -l test.txt
-rw-r–r– 1 user1 root 0 7月 25 12:39 test.txt ← owner của file test.txt lúc này sẽ trở thành user1
Bởi vì touch command đã được run bởi root thì owner của test.txt lúc đầu sẽ là root.
Để setting SUID cho command touch thì khi command được thực thi với owner là user1 thì owner của file được tạo ra cũng sẽ là user1.

Bài viết nguồn ở đây

Cách phát hiện các service cần thiết nên restart sau khi update package trong Linux

Mở đầu

Để giảm bớt lỗi hệ thống thì việc update system là thường xuyên phải được tiến hành nhưng đối với hệ thống đang vận hành trên real thì chúng ta muốn giảm tối đa những ảnh hưởng đến các service.
Sau khi update hệ thống, nếu có thể thì chúng ta muốn hoàn tất việc restart chỉ những process cần thiết nhưng nên restart những process nào thì tốt? Cơ bản là nếu không restart OS thì sẽ không phản ánh được những thay đổi chăng? Các trường hợp không cần phải restart OS thì cũng không ít.

Đối với những trường hợp như vậy, thì cần phải tìm ra những process cần thiết cần được restart, có command để check được advice có cần phải restart system hay không?

Hệ Redhat
Sử dụng Package「yum-utils」có chứa command「needs-restarting

# needs-restarting -h
Usage:
    needs-restarting: Report a list of process ids of programs that started
                    running before they or some component they use were updated.

Options:
  -h, –help        show this help message and exit
  -u, –useronly    show processes for my userid only
  -r, –reboothint  only report whether a full reboot is required (returns 1)
                    or not (returns 0)
  -s, –services    list the affected systemd services only
Trường hợp dùng RHEL/CentOS thì các option「-r、-s」được thêm vào từ ver7.3 trở lên  ⇒
Release note (https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/7.3_Release_Notes/index.html)

1.Install  

# yum install yum-utils

2.Test thử bằng cách update openssl

# yum update openssl

3.Hiển thị các process cần phải update

# needs-restarting | sort -g
805 : /sbin/dhclient -d -q -sf /usr/libexec/nm-dhcp-helper -pf /var/run/dhclient-enp0s3.pid -lf /var/lib/NetworkManager/dhclient-3b2440fa-27a4-4e0e-8549-888b68d3f2d4-enp0s3.lease -cf /var/lib/NetworkManager/dhclient-enp0s3.conf enp0s3
1011 : /usr/bin/python -Es /usr/sbin/tuned -l -P
1023 : /usr/sbin/sshd
1129 : /usr/libexec/postfix/master -w
1147 : pickup -l -t unix -u
1148 : qmgr -l -t unix -u
1296 : sshd: root@pts/0  

4.Thêm option「-s, –services」để hiển thị service name của systemd

# needs-restarting -s | sort
NetworkManager.service
postfix.service
sshd.service
tuned.service

5.Restart service, confirm lại 1 lần nữa

# systemctl restart NetworkManager postfix sshd tuned

# needs-restarting
#  ← ★Các process nên được restart đều đã biến mất★

6.Tuy nhiên nếu thêm option -r và confirm thì sẽ được recommend thực hiện reboot 
# needs-restarting -r
Core libraries or services have been updated:
  openssl-libs -> 1:1.0.1e-60.el7_3.1

Reboot is required to ensure that your system benefits from these updates.

More information: https://access.redhat.com/solutions/27943

Nếu nhìn vào message hiển thị có chứa page URL,  thì với trường hợp nếu có 1 số core libraries và service đã được update thì message sẽ hiển thị nhằm thông báo việc restart lại hệ thống.

Redhat Knowledge Base  <Subcription required>

⇒ Dựa theo source code trên thì dưới đây là 8 package mà khi update thường sẽ hiển thị thông báo nên update hệ thống
『dbus、glibc、gnutls、linux-firmware、kernel、openssl-libs、systemd、udev』
Source code:git://yum.baseurl.org/yum-utils.git/needs-restarting.py

Thêm vào đó, ở release note 7.3 thì được nói như sau (trừ 1 phần ngoại lệ)
needs-restarting trong ultility đã được thêm vào option mới –reboothint
Lần này, needs-restarting trong ultility được thêm vào option mới —reboothint. needs-restarting trong ultility đã được thêm vào option mới –reboothint. Khi thực thi needs-restarting —reboothint thì từ lần boot trước những core library tương ứng nào đang được update? reboot có tiếp tục tiến hành hay không ? thì hệ thống sẽ xuất thông báo. Ở đây thì , để tất cả các update được apply thì việc quyết định reboot hệ thống hay không sẽ có hữu ích cho người quản lý system. Chú ý là những thông báo này chỉ mang tính cung cấp thông tin chứ không phải là nhất thiết phải reboot hệ thống ngay lập tức.

Trường hợp các process restart ngoài process systemd ra

Chúng ta có thể tự check các process được trực tiếp start build từ source. Dưới đây là trường hợp sau khi overwrite file binary, sử dụng needs-restarting để check trong lúc h2o của HTTP server đang running

# needs-restarting
17648 : /usr/local/bin/h2o -c /etc/h2o/h2o.conf

Hệ Debian
Sử dụng package「debian-goodies」có chứa command「checkrestart」

Debian Manpages

NAME
checkrestart – check which processes need to be restarted after an upgrade

SYNOPSIS
checkrestart [ -hvpan ] [ -b blacklist_file ] [ -i package_name ] [ -e pid ]

1.Install

# apt-get install debian-goodies
2.Hiển thị các processs cần được restart

# checkrestart -a
Found 2 processes using old versions of upgraded files
(1 distinct program)
(1 distinct packages)

Of these, 1 seem to contain systemd service definitions or init scripts which can be used to restart them.
The following packages seem to have definitions that could be used
to restart their services:
openssh-server:
        1411    /usr/sbin/sshd
        1354    /usr/sbin/sshd
These are the initd scripts:
service ssh restart

*** Không có option tương tự như —reboothint của lệnh needs-restarting

Kết thúc

Có lẽ là việc sử dụng các command trong bài này thì không hẳn là sẽ tăng viễn cảnh có thể maintenance mà không cần phải restart OS. Ngoài ra, đối với OS restart sau khi update, có thể sử dụng để check lại các trạng thái process không reflect khi quên restart process

Link nguồn

 

Để thay đổi group của file/ thư mục thì có thể dùng command 「chgrp」. Ở bài này sẽ giải thích về cách sử dụng của command 「chgrp」

1. Format của lệnh chgrp

Format
chgrp [options] group file…
Các option chính
-R, –recursive Ownership của group được thay đổi đệ quy apply lên directory và các thành phần chứa bên trong thư mục đó. Lệnh execute trên tất các các file và subdirectory bên trong file
-c, –changes Hiển thị nội dung chi tiết của từng file mà được apply chuyển đổi group trong thực tế.
Command chgrp thì group mà được chỉ định cho file sẽ được set. Ngoài group name ra thì có thể chỉ định groupID

2. Các sample dùng chgrp

Thử dùng command chgrp trong thực tế.

Thay đổi group của file test.txt thành group2
$ ls -l
合計 4
-rw-r–r– 1 user1 group1 0 7月 22 08:50 test.txt ← Group của test.txt là group1

Sử dụng lệnh chgrp
$ chgrp group2 test.txt
$ ls -l
合計 4
-rw-r–r– 1 user1 group2 0 7月 22 08:50 test.txt ← group được đổi thành group2
Các file/subdirectory của dir1 cũng được gom lại và change thành group2
$ ls -l dir1/
合計 12
-rw-r–r– 1 user1 group1 0 7月 24 08:32 test1.txt ← group của file là group1
-rw-r–r– 1 user1 group1 0 7月 24 08:32 test2.txt ← group của file là group1
-rw-r–r– 1 user1 group1 0 7月 24 08:32 test3.txt ← group của file là group1

$ chgrp -R group2 dir1 ← với việc chỉ định option「-R」thì group của tất cả các subdirectory của dir1 đều change

$ ls -l dir1/
合計 12
-rw-r–r– 1 user1 group2 0 7月 24 08:32 test1.txt ← group của file được change thành group2
-rw-r–r– 1 user1 group2 0 7月 24 08:32 test2.txt ← group của file được change thành group2
-rw-r–r– 1 user1 group2 0 7月 24 08:32 test3.txt ← group của file được change thành group2

Trích nguồn

http://kazmax.zpp.jp/linux_beginner/chgrp.html

Để thay đổi owner và group của file/directory có thể dùng command 「chown」
Ở bài này, sẽ giải thích về cách sử dụng command 「chown」

1. Format lệnh chown

Format
chown [Option]… OWNER[:[GROUP]] FILE…
Các option chính

-R, —recursive Thay đổi đệ quy ownership của các file và thư mục. Lệnh thực thi apply các thay đổi lên các file và thư mục con đệ quy bên trong của file/folder được chỉ định.

-c, –changes Hiển thị chi tiết info các thay đổi được apply.
Dùng lệnh chown thì ownership của file và thư mục sẽ được thay đổi.
Phần OWNER thì user name, user iD (giá trị) được chỉ định.

Có thể được chỉ định cùng lúc và được phân tách bởi dấu「:(dấu 2 chấm)」

2. Các sample sử dụng chown

Owen từ user1 change thành user2
$ ls -l
合計 4
-rw-r–r– 1 user1 group1 0 7月 22 08:50 test.txt

$ chown user2 test.txt
$ ls -l
合計 4
-rw-r–r– 1 user2 group1 0 7月 22 08:50 test.txt ← Owner được chuyển đổi trở thành user2

Để thay đổi owner thành user2, group thành group2:
$ chown -c user2:group2 test.txt
Owner của ‘test.txt’ được thay đổi thành user2:group2 ← với option「-c」thì nội dung thay đổi sẽ được hiển thị.

$ ls -l
合計 4
-rw-r–r– 1 user2 group2 0 7月 22 08:50 test.txt ← Owner là user2, group được thay đổi thành group2

***Note

Về các ký tự phân tách OWNER và GROUP 「:(dấu 2 chấm)」và「.(dấu chấm)」

Ký tự phân tách OWNER và GROUP được viết là 「:(dấu 2 chấm)」nhưng「.(dấu chấm)」cũng có thể được sử dụng. Thay vào đó, ngày xưa thì việc sử dụng 「.(dấu chấm)」lại là standard hơn.
Để có thể chứa 「.(dấu chấm)」, User name và group name trong command thì khi thay đổi user và group, command chown sẽ hành động hơi strange khi được thực thi.
Để có thể thay đổi owner 1 cách đúng đắn thì có thể xài 「.(dấu chấm) và tốt hơn là nên sử dụng 「:(dấu 2 chấm)」

***Note

Khi dùng chown, mà thiếu set OWNER thì từ「:(dấu 2 chấm)」trở đi, thì chỉ có group được thay đổi

ls -l
合計 4
-rw-r–r– 1 user1 group1 0 7月 22 08:50 test.txt

$ chown :group2 test.txt ← Phần OWNER bị thiếu
$ ls -l
合計 4
-rw-r–r– 1 user1 group2 0 7月 22 08:50 test.txt ← chỉ group được thay đổi

***Note
Đối với trường hợp khi run
chown user1: test.txt
thì, tiếp tục ở phần user name cho dù có dấu hai chấm hoặc dấu chấm đi nữa thì khi group được để trống, group của file sẽ được thay đổi thành primary group của file đó. user sẽ trở thành đối tượng được chỉ định.

$ ls -l
合計 4
-rw-r–r– 1 user1 group1 0 7月 22 08:50 test.txt

$ id user2
uid=503(user2) gid=505(group2) 所属グループ=505(group2)
↑ primary group của「user2」là「group2」

$ chown user2: test.txt ←phần phía sau「:(dấu 2 chấm)」ko được set
$ ls -l
合計 4
-rw-r–r– 1 user2 group2 0 7月 22 08:50 test.txt
↑group của file đã thay đổi thành primary group của user2

Trích nguồn

http://kazmax.zpp.jp/linux_beginner/chown.html